diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index aa549c0361..49d5201eec 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3" - services: db: image: postgres:13 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..3ba13e0cec --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/actions/migration/action.yaml b/.github/actions/migration/action.yaml index a5c4c7a56f..22c5d45864 100644 --- a/.github/actions/migration/action.yaml +++ b/.github/actions/migration/action.yaml @@ -13,5 +13,5 @@ runs: invoke export-records -f data.json python3 ./src/backend/InvenTree/manage.py flush --noinput invoke migrate - invoke import-records -f data.json - invoke import-records -f data.json + invoke import-records -c -f data.json + invoke import-records -c -f data.json diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index 41e5db55a9..0a6848a23f 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -44,6 +44,11 @@ runs: with: python-version: ${{ env.python_version }} cache: pip + cache-dependency-path: | + src/backend/requirements.txt + src/backend/requirements-dev.txt + contrib/container/requirements.txt + contrib/dev_reqs/requirements.txt - name: Install Base Python Dependencies if: ${{ inputs.python == 'true' }} shell: bash @@ -93,4 +98,4 @@ runs: - name: Run invoke update if: ${{ inputs.update == 'true' }} shell: bash - run: invoke update --uv + run: invoke update --uv --skip-backup --skip-static diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8d14eeb906..37c37b524e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,7 +18,7 @@ updates: directories: - /contrib/container - /docs - - /.github + - /contrib/dev_reqs - /src/backend schedule: interval: weekly diff --git a/.github/scripts/version_check.py b/.github/scripts/version_check.py index 68e2ff1e25..5d26b16092 100644 --- a/.github/scripts/version_check.py +++ b/.github/scripts/version_check.py @@ -10,6 +10,7 @@ tagged branch: """ +import itertools import json import os import re @@ -18,8 +19,11 @@ from pathlib import Path import requests +REPO = os.getenv('GITHUB_REPOSITORY', 'inventree/inventree') +GITHUB_API_URL = os.getenv('GITHUB_API_URL', 'https://api.github.com') -def get_existing_release_tags(): + +def get_existing_release_tags(include_prerelease=True): """Request information on existing releases via the GitHub API.""" # Check for github token token = os.getenv('GITHUB_TOKEN', None) @@ -28,9 +32,7 @@ def get_existing_release_tags(): if token: headers = {'Authorization': f'Bearer {token}'} - response = requests.get( - 'https://api.github.com/repos/inventree/inventree/releases', headers=headers - ) + response = requests.get(f'{GITHUB_API_URL}/repos/{REPO}/releases', headers=headers) if response.status_code != 200: raise ValueError( @@ -50,6 +52,9 @@ def get_existing_release_tags(): print(f"Version '{tag}' did not match expected pattern") continue + if not include_prerelease and release['prerelease']: + continue + tags.append([int(x) for x in match.groups()]) return tags @@ -73,7 +78,7 @@ def check_version_number(version_string, allow_duplicate=False): version_tuple = [int(x) for x in match.groups()] # Look through the existing releases - existing = get_existing_release_tags() + existing = get_existing_release_tags(include_prerelease=False) # Assume that this is the highest release, unless told otherwise highest_release = True @@ -90,6 +95,11 @@ def check_version_number(version_string, allow_duplicate=False): if __name__ == '__main__': + # Ensure that we are running in GH Actions + if os.environ.get('GITHUB_ACTIONS', '') != 'true': + print('This script is intended to be run within a GitHub Action!') + sys.exit(1) + if 'only_version' in sys.argv: here = Path(__file__).parent.absolute() version_file = here.joinpath( @@ -97,16 +107,18 @@ if __name__ == '__main__': ) text = version_file.read_text() results = re.findall(r"""INVENTREE_API_VERSION = (.*)""", text) + # If 2. args is true lower the version number by 1 + if len(sys.argv) > 2 and sys.argv[2] == 'true': + results[0] = str(int(results[0]) - 1) print(results[0]) exit(0) + # GITHUB_REF_TYPE may be either 'branch' or 'tag' GITHUB_REF_TYPE = os.environ['GITHUB_REF_TYPE'] # GITHUB_REF may be either 'refs/heads/' or 'refs/heads/' GITHUB_REF = os.environ['GITHUB_REF'] - GITHUB_REF_NAME = os.environ['GITHUB_REF_NAME'] - GITHUB_BASE_REF = os.environ['GITHUB_BASE_REF'] # Print out version information, makes debugging actions *much* easier! @@ -187,10 +199,13 @@ if __name__ == '__main__': print(f"Version check passed for '{version}'!") print(f"Docker tags: '{docker_tags}'") + target_repos = [REPO.lower(), f'ghcr.io/{REPO.lower()}'] + # Ref: https://getridbug.com/python/how-to-set-environment-variables-in-github-actions-using-python/ with open(os.getenv('GITHUB_ENV'), 'a') as env_file: # Construct tag string - tags = ','.join([f'inventree/inventree:{tag}' for tag in docker_tags]) + tag_list = [[f'{r}:{t}' for t in docker_tags] for r in target_repos] + tags = ','.join(itertools.chain(*tag_list)) env_file.write(f'docker_tags={tags}\n') diff --git a/.github/workflows/check_translations.yaml b/.github/workflows/check_translations.yaml index 8ace00f569..3377460f6e 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@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 800574ab30..61dd6e6f99 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -39,7 +39,7 @@ jobs: docker: ${{ steps.filter.outputs.docker }} steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 id: filter with: @@ -66,9 +66,9 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Set Up Python ${{ env.python_version }} - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 + uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # pin@v5.1.1 with: python-version: ${{ env.python_version }} - name: Version Check @@ -115,18 +115,19 @@ jobs: - name: Run Unit Tests run: | echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> contrib/container/docker.dev.env - docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke test --disable-pty - docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke test --migrations --disable-pty - docker compose --project-directory . -f contrib/container/dev-docker-compose.yml down + docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run --rm inventree-dev-server invoke test --disable-pty + - name: Run Migration Tests + run: | + docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run --rm inventree-dev-server invoke test --migrations - name: Clean up test folder run: | rm -rf InvenTree/_testfolder - name: Set up QEMU if: github.event_name != 'pull_request' - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # pin@v3.0.0 + uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # pin@v3.2.0 - name: Set up Docker Buildx if: github.event_name != 'pull_request' - uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # pin@v3.3.0 + uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # pin@v3.6.1 - name: Set up cosign if: github.event_name != 'pull_request' uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # pin@v3.5.0 @@ -134,20 +135,20 @@ jobs: id: docker_login run: | if [ -z "${{ secrets.DOCKER_USERNAME }}" ]; then - echo "skip_dockerhub_login=true" >> $GITHUB_ENV + echo "skip_dockerhub_login=true" >> $GITHUB_OUTPUT else - echo "skip_dockerhub_login=false" >> $GITHUB_ENV + echo "skip_dockerhub_login=false" >> $GITHUB_OUTPUT fi - name: Login to Dockerhub if: github.event_name != 'pull_request' && steps.docker_login.outputs.skip_dockerhub_login != 'true' - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 # pin@v3.2.0 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pin@v3.3.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log into registry ghcr.io if: github.event_name != 'pull_request' - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 # pin@v3.2.0 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pin@v3.3.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -165,7 +166,7 @@ jobs: - name: Push Docker Images id: push-docker if: github.event_name != 'pull_request' - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # pin@v5.4.0 + uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 # pin@v6.5.0 with: context: . file: ./contrib/container/Dockerfile diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index e1ed0a7a0a..da3d43478d 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -10,11 +10,9 @@ on: env: python_version: 3.9 - node_version: 18 + node_version: 20 # The OS version must be set per job server_start_sleep: 60 - requests_version: 2.31.0 - pyyaml_version: 6.0.1 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} INVENTREE_DB_ENGINE: sqlite3 @@ -40,7 +38,7 @@ jobs: force: ${{ steps.force.outputs.force }} steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 id: filter with: @@ -72,7 +70,7 @@ jobs: needs: ["pre-commit"] steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -94,9 +92,9 @@ jobs: if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.frontend == 'true' || needs.paths-filter.outputs.force == 'true' steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 + uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # pin@v5.1.1 with: python-version: ${{ env.python_version }} cache: "pip" @@ -115,9 +113,9 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 + uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # pin@v5.1.1 with: python-version: ${{ env.python_version }} - name: Check Config @@ -151,7 +149,7 @@ jobs: version: ${{ steps.version.outputs.version }} steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -161,20 +159,32 @@ jobs: - name: Export API Documentation run: invoke schema --ignore-warnings --filename src/backend/InvenTree/schema.yml - name: Upload schema - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # pin@v4.3.3 + uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # pin@v4.3.5 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 contrib/dev_reqs/requirements.txt >/dev/null 2>&1 - version="$(python3 .github/scripts/version_check.py only_version 2>&1)" + version="$(python3 .github/scripts/version_check.py only_version ${{ needs.paths-filter.outputs.api }} 2>&1)" echo "Version: $version" url="https://raw.githubusercontent.com/inventree/schema/main/export/${version}/api.yaml" echo "URL: $url" - curl -s -o api.yaml $url + code=$(curl -s -o api.yaml $url --write-out '%{http_code}' --silent) + if [ "$code" != "200" ]; then + exit 1 + fi echo "Downloaded api.yaml" + - name: Running OpenAPI Spec diff action + id: breaking_changes + uses: oasdiff/oasdiff-action/diff@a2ff6682b27d175162a74c09ace8771bd3d512f8 # pin@main + with: + base: 'api.yaml' + revision: 'src/backend/InvenTree/schema.yml' + format: 'html' + - name: Echoing diff to step + run: echo "${{ steps.breaking_changes.outputs.diff }}" >> $GITHUB_STEP_SUMMARY + - name: Check for differences in API Schema if: needs.paths-filter.outputs.api == 'false' run: | @@ -201,12 +211,13 @@ jobs: version: ${{ needs.schema.outputs.version }} steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + name: Checkout Code with: repository: inventree/schema token: ${{ secrets.SCHEMA_PAT }} - name: Download schema artifact - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: schema.yml - name: Move schema to correct location @@ -215,8 +226,9 @@ jobs: mkdir export/${version} mv schema.yml export/${version}/api.yaml - uses: stefanzweifel/git-auto-commit-action@8621497c8c39c72f3e2a999a26b4ca1b5058a842 # v5.0.1 + name: Commit schema changes with: - commit_message: "Update API schema for ${version}" + commit_message: "Update API schema for ${{ env.version }} / ${{ github.sha }}" python: name: Tests - inventree-python @@ -238,7 +250,7 @@ jobs: INVENTREE_SITE_URL: http://127.0.0.1:12345 steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -269,7 +281,8 @@ jobs: continue-on-error: true # continue if a step fails so that coverage gets pushed strategy: matrix: - python_version: [3.9, 3.12] + python_version: [3.9] + # python_version: [3.9, 3.12] # Disabled due to requirement issues env: INVENTREE_DB_NAME: ./inventree.sqlite @@ -279,7 +292,7 @@ jobs: python_version: ${{ matrix.python_version }} steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -295,7 +308,7 @@ jobs: - name: Coverage Tests run: invoke test --coverage - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # pin@v4.4.1 + uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # pin@v4.5.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -333,7 +346,7 @@ jobs: - 6379:6379 steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -377,7 +390,7 @@ jobs: - 3306:3306 steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -416,7 +429,7 @@ jobs: - 5432:5432 steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -427,7 +440,7 @@ jobs: - name: Run Tests run: invoke test --migrations --report --coverage - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # pin@v4.4.1 + uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # pin@v4.5.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -447,7 +460,7 @@ jobs: INVENTREE_PLUGINS_ENABLED: false steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 name: Checkout Code - name: Environment Setup uses: ./.github/actions/setup @@ -504,7 +517,7 @@ jobs: VITE_COVERAGE: true steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -522,7 +535,7 @@ jobs: - name: Run Playwright tests id: tests run: cd src/frontend && npx nyc playwright test - - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # pin@v4 + - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # pin@v4 if: ${{ !cancelled() && steps.tests.outcome == 'failure' }} with: name: playwright-report @@ -532,7 +545,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@125fc84a9a348dbcf27191600683ec096ec9021c # pin@v4.4.1 + uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # pin@v4.5.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -545,7 +558,7 @@ jobs: timeout-minutes: 60 steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -554,11 +567,13 @@ jobs: run: cd src/frontend && yarn install - name: Build frontend run: cd src/frontend && yarn run compile && yarn run build + - name: Write version file - SHA + run: cd src/backend/InvenTree/web/static/web/.vite && echo "$GITHUB_SHA" > sha.txt - name: Zip frontend run: | cd src/backend/InvenTree/web/static zip -r frontend-build.zip web/ web/.vite - - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # pin@v4.3.3 + - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # pin@v4.3.5 with: name: frontend-build path: src/backend/InvenTree/web/static/web diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f93c99a1ec..c091b048ba 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,13 +1,16 @@ # Runs on releases -name: Publish release notes +name: Publish release on: release: types: [published] +permissions: + contents: read jobs: stable: runs-on: ubuntu-latest + name: Write release to stable branch permissions: contents: write pull-requests: write @@ -15,7 +18,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout Code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Version Check run: | pip install --require-hashes -r contrib/dev_reqs/requirements.txt @@ -28,13 +31,15 @@ jobs: branch: stable force: true - publish-build: + build: runs-on: ubuntu-latest + name: Build and attest frontend permissions: + id-token: write contents: write - pull-requests: write + attestations: write steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: @@ -43,14 +48,38 @@ jobs: run: cd src/frontend && yarn install - name: Build frontend run: cd src/frontend && npm run compile && npm run build + - name: Create SBOM for frontend + uses: anchore/sbom-action@v0 + with: + artifact-name: frontend-build.spdx + path: src/frontend + - name: Write version file - SHA + run: cd src/backend/InvenTree/web/static/web/.vite && echo "$GITHUB_SHA" > sha.txt + - name: Write version file - TAG + run: cd src/backend/InvenTree/web/static/web/.vite && echo "${{ github.ref_name }}" > tag.txt - name: Zip frontend run: | cd src/backend/InvenTree/web/static/web - zip -r ../frontend-build.zip * - - uses: svenstaro/upload-release-action@04733e069f2d7f7f0b4aebc4fbdbce8613b03ccd # pin@2.9.0 + zip -r ../frontend-build.zip * .vite + - name: Attest Build Provenance + id: attest + uses: actions/attest-build-provenance@v1 + with: + subject-path: "${{ github.workspace }}/src/backend/InvenTree/web/static/frontend-build.zip" + + - name: Upload frontend + uses: svenstaro/upload-release-action@04733e069f2d7f7f0b4aebc4fbdbce8613b03ccd # pin@2.9.0 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: src/backend/InvenTree/web/static/frontend-build.zip asset_name: frontend-build.zip tag: ${{ github.ref }} overwrite: true + - name: Upload Attestation + uses: svenstaro/upload-release-action@04733e069f2d7f7f0b4aebc4fbdbce8613b03ccd # pin@2.9.0 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + asset_name: frontend-build.intoto.jsonl + file: ${{ steps.attest.outputs.bundle-path}} + tag: ${{ github.ref }} + overwrite: true diff --git a/.github/workflows/scorecard.yaml b/.github/workflows/scorecard.yaml index 7bc41fc73e..31c997a4c8 100644 --- a/.github/workflows/scorecard.yaml +++ b/.github/workflows/scorecard.yaml @@ -32,12 +32,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3 + uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 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@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5 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@2e230e8fe0ad3a14a340ad0815ddb96d599d2aff # v3.25.8 + uses: github/codeql-action/upload-sarif@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a # v3.25.15 with: sarif_file: results.sarif diff --git a/.github/workflows/translations.yaml b/.github/workflows/translations.yaml index fc2968e479..0bdcd80517 100644 --- a/.github/workflows/translations.yaml +++ b/.github/workflows/translations.yaml @@ -7,7 +7,7 @@ on: env: python_version: 3.9 - node_version: 18 + node_version: 20 permissions: contents: read @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 - name: Environment Setup uses: ./.github/actions/setup with: diff --git a/.gitignore b/.gitignore index 4bc362f653..8541ce79a3 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,4 @@ InvenTree/web/static docs/schema.yml docs/docs/api/*.yml docs/docs/api/schema/*.yml +inventree_settings.json diff --git a/.pkgr.yml b/.pkgr.yml index 88f27034a5..405911adb4 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -14,7 +14,10 @@ env: - INVENTREE_BACKUP_DIR=/opt/inventree/backup - INVENTREE_PLUGIN_FILE=/opt/inventree/plugins.txt - INVENTREE_CONFIG_FILE=/opt/inventree/config.yaml + - APP_REPO=inventree/InvenTree +before_install: contrib/packager.io/preinstall.sh after_install: contrib/packager.io/postinstall.sh +before_remove: contrib/packager.io/preinstall.sh before: - contrib/packager.io/before.sh dependencies: @@ -32,7 +35,7 @@ dependencies: - gettext - nginx - jq - - libffi7 + - "libffi7 | libffi8" targets: ubuntu-20.04: true debian-11: true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6c99a6f6d5..c4d13efeef 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: - id: check-yaml - id: mixed-line-ending - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.4.1 + rev: v0.5.1 hooks: - id: ruff-format args: [--preview] @@ -27,42 +27,46 @@ repos: --preview ] - repo: https://github.com/astral-sh/uv-pre-commit - rev: 0.1.35 + rev: 0.2.13 hooks: - id: pip-compile name: pip-compile requirements-dev.in - args: [src/backend/requirements-dev.in, -o, src/backend/requirements-dev.txt, --python-version=3.9, --no-strip-extras, --generate-hashes] + args: [src/backend/requirements-dev.in, -o, src/backend/requirements-dev.txt, --no-strip-extras, --generate-hashes] files: src/backend/requirements-dev\.(in|txt)$ - id: pip-compile name: pip-compile requirements.txt - args: [src/backend/requirements.in, -o, src/backend/requirements.txt,--python-version=3.9, --no-strip-extras,--generate-hashes] + args: [src/backend/requirements.in, -o, src/backend/requirements.txt, --no-strip-extras, --generate-hashes] files: src/backend/requirements\.(in|txt)$ - id: pip-compile name: pip-compile requirements.txt - args: [contrib/dev_reqs/requirements.in, -o, contrib/dev_reqs/requirements.txt,--python-version=3.9, --no-strip-extras, --generate-hashes] + args: [contrib/dev_reqs/requirements.in, -o, contrib/dev_reqs/requirements.txt, --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] + args: [docs/requirements.in, -o, docs/requirements.txt, --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] + 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: - id: djlint-django - repo: https://github.com/codespell-project/codespell - rev: v2.2.6 + rev: v2.3.0 hooks: - id: codespell + additional_dependencies: + - tomli exclude: > (?x)^( docs/docs/stylesheets/.*| docs/docs/javascripts/.*| docs/docs/webfonts/.* | src/frontend/src/locales/.* | + pyproject.toml | + src/frontend/vite.config.ts | )$ - repo: https://github.com/pre-commit/mirrors-prettier rev: "v4.0.0-alpha.8" @@ -73,7 +77,7 @@ repos: - "prettier@^2.4.1" - "@trivago/prettier-plugin-sort-imports" - repo: https://github.com/pre-commit/mirrors-eslint - rev: "v9.1.0" + rev: "v9.6.0" hooks: - id: eslint additional_dependencies: @@ -85,7 +89,7 @@ repos: - "@typescript-eslint/parser" files: ^src/frontend/.*\.(js|jsx|ts|tsx)$ - repo: https://github.com/gitleaks/gitleaks - rev: v8.18.2 + rev: v8.18.4 hooks: - id: gitleaks #- repo: https://github.com/jumanjihouse/pre-commit-hooks diff --git a/.vscode/launch.json b/.vscode/launch.json index effc92367a..a374de9140 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,19 +6,37 @@ "configurations": [ { "name": "InvenTree Server", - "type": "python", + "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/src/backend/InvenTree/manage.py", - "args": ["runserver"], + "args": [ + "runserver", + // "0.0.0.0:8000", // expose server in network (useful for testing with mobile app) + // "--noreload" // disable auto-reload + ], + "django": true, + "justMyCode": true + }, + { + "name": "InvenTree Server - Tests", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/src/backend/InvenTree/manage.py", + "args": [ + "test", + // "part.test_api.PartCategoryAPITest", // run only a specific test + ], "django": true, "justMyCode": true }, { "name": "InvenTree Server - 3rd party", - "type": "python", + "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/src/backend/InvenTree/manage.py", - "args": ["runserver"], + "args": [ + "runserver" + ], "django": true, "justMyCode": false }, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 50022d571e..7c62407f07 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,7 +39,7 @@ InvenTree/ │ │ ├─ tsconfig.json # Settings for frontend compilation ├─ .pkgr.yml # Build definition for Debian/Ubuntu packages ├─ .pre-commit-config.yaml # Code formatter/linter configuration -├─ CONTRIBUTING.md # Contirbution guidelines and overview +├─ CONTRIBUTING.md # Contribution guidelines and overview ├─ Procfile # Process definition for Debian/Ubuntu packages ├─ README.md # General project information and overview ├─ runtime.txt # Python runtime settings for Debian/Ubuntu packages build diff --git a/README.md b/README.md index f329c20758..3f6b0dd27c 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ InvenTree is designed to be **extensible**, and provides multiple options for **
  • Django
  • DRF
  • Django Q
  • -
  • Django-Allauth
  • +
  • Django-Allauth
  • diff --git a/codecov.yml b/codecov.yml index 2edad7bb46..79d066e93b 100644 --- a/codecov.yml +++ b/codecov.yml @@ -3,6 +3,7 @@ coverage: project: default: target: 82% + patch: off github_checks: annotations: true diff --git a/contrib/container/Dockerfile b/contrib/container/Dockerfile index 572a286f5d..bd5adf670f 100644 --- a/contrib/container/Dockerfile +++ b/contrib/container/Dockerfile @@ -11,6 +11,7 @@ ARG base_image=python:3.11-alpine3.18 FROM ${base_image} AS inventree_base +ARG base_image # Build arguments for this image ARG commit_tag="" @@ -48,13 +49,18 @@ ENV INVENTREE_BACKGROUND_WORKERS="4" ENV INVENTREE_WEB_ADDR=0.0.0.0 ENV INVENTREE_WEB_PORT=8000 -LABEL org.label-schema.schema-version="1.0" \ - org.label-schema.build-date=${DATE} \ - org.label-schema.vendor="inventree" \ - org.label-schema.name="inventree/inventree" \ - org.label-schema.url="https://hub.docker.com/r/inventree/inventree" \ - org.label-schema.vcs-url="https://github.com/inventree/InvenTree.git" \ - org.label-schema.vcs-ref=${commit_tag} +LABEL org.opencontainers.image.created=${DATE} \ + org.opencontainers.image.vendor="inventree" \ + org.opencontainers.image.title="InvenTree backend server" \ + org.opencontainers.image.description="InvenTree is the open-source inventory management system" \ + org.opencontainers.image.url="https://inventree.org" \ + org.opencontainers.image.documentation="https://docs.inventree.org" \ + org.opencontainers.image.source="https://github.com/inventree/InvenTree" \ + org.opencontainers.image.revision=${commit_hash} \ + org.opencontainers.image.licenses="MIT" \ + org.opencontainers.image.base.name="docker.io/library/${base_image}" \ + org.opencontainers.image.version=${commit_tag} + # Install required system level packages RUN apk add --no-cache \ diff --git a/contrib/container/dev-docker-compose.yml b/contrib/container/dev-docker-compose.yml index 4b84be12a5..54636da3d5 100644 --- a/contrib/container/dev-docker-compose.yml +++ b/contrib/container/dev-docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.8" - # Docker compose recipe for InvenTree development server # - Runs PostgreSQL as the database backend # - Uses built-in django webserver diff --git a/contrib/container/docker-compose.yml b/contrib/container/docker-compose.yml index de38b655b8..6a0b001f8b 100644 --- a/contrib/container/docker-compose.yml +++ b/contrib/container/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.8" - # Docker compose recipe for a production-ready InvenTree setup, with the following containers: # - PostgreSQL as the database backend # - gunicorn as the InvenTree web server diff --git a/contrib/container/install_build_packages.sh b/contrib/container/install_build_packages.sh index 358a256e7f..bbeae43a54 100644 --- a/contrib/container/install_build_packages.sh +++ b/contrib/container/install_build_packages.sh @@ -1,7 +1,7 @@ #!/bin/ash # Install system packages required for building InvenTree python libraries -# Note that for postgreslql, we use the 13 version, which matches the version used in the InvenTree docker image +# Note that for postgreslql, we use the version 13, which matches the version used in the InvenTree docker image apk add gcc g++ musl-dev openssl-dev libffi-dev cargo python3-dev openldap-dev \ libstdc++ build-base linux-headers py3-grpcio \ diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index b5956e2763..f519da636b 100644 --- a/contrib/container/requirements.txt +++ b/contrib/container/requirements.txt @@ -4,19 +4,22 @@ asgiref==3.8.1 \ --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47 \ --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 # via django -django==4.2.11 \ - --hash=sha256:6e6ff3db2d8dd0c986b4eec8554c8e4f919b5c1ff62a5b4390c17aff2ed6e5c4 \ - --hash=sha256:ddc24a0a8280a0430baa37aff11f28574720af05888c62b7cfe71d219f4599d3 +django==4.2.15 \ + --hash=sha256:61ee4a130efb8c451ef3467c67ca99fdce400fedd768634efc86a68c18d80d30 \ + --hash=sha256:c77f926b81129493961e19c0e02188f8d07c112a1162df69bfab178ae447f94a # via django-auth-ldap django-auth-ldap==4.8.0 \ --hash=sha256:4b4b944f3c28bce362f33fb6e8db68429ed8fd8f12f0c0c4b1a4344a7ef225ce \ --hash=sha256:604250938ddc9fda619f247c7a59b0b2f06e53a7d3f46a156f28aa30dd71a738 + # via -r contrib/container/requirements.in gunicorn==22.0.0 \ --hash=sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9 \ --hash=sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63 + # via -r contrib/container/requirements.in invoke==2.2.0 \ --hash=sha256:6ea924cc53d4f78e3d98bc436b08069a03077e6f85ad1ddaa8a116d7dad15820 \ --hash=sha256:ee6cbb101af1a859c7fe84f2a264c059020b0cb7fe3535f9424300ab568f6bd5 + # via -r contrib/container/requirements.in mariadb==1.1.10 \ --hash=sha256:03d6284ef713d1cad40146576a4cc2d6cbc1662060f2a0e59b174e1694521698 \ --hash=sha256:1ce87971c02375236ff8933e6c593c748e7b2f2950b86eabfab4289fd250ea63 \ @@ -29,6 +32,7 @@ mariadb==1.1.10 \ --hash=sha256:a332893e3ef7ceb7970ab4bd7c844bcb4bd68a051ca51313566f9808d7411f2d \ --hash=sha256:d7b09ec4abd02ed235257feb769f90cd4066e8f536b55b92f5166103d5b66a63 \ --hash=sha256:dff8b28ce4044574870d7bdd2d9f9f5da8e5f95a7ff6d226185db733060d1a93 + # via -r contrib/container/requirements.in mysqlclient==2.2.4 \ --hash=sha256:329e4eec086a2336fe3541f1ce095d87a6f169d1cc8ba7b04ac68bcb234c9711 \ --hash=sha256:33bc9fb3464e7d7c10b1eaf7336c5ff8f2a3d3b88bab432116ad2490beb3bf41 \ @@ -39,6 +43,7 @@ mysqlclient==2.2.4 \ --hash=sha256:ac44777eab0a66c14cb0d38965572f762e193ec2e5c0723bcd11319cc5b693c5 \ --hash=sha256:d43987bb9626096a302ca6ddcdd81feaeca65ced1d5fe892a6a66b808326aa54 \ --hash=sha256:e1ebe3f41d152d7cb7c265349fdb7f1eca86ccb0ca24a90036cde48e00ceb2ab + # via -r contrib/container/requirements.in packaging==24.0 \ --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 @@ -48,6 +53,7 @@ packaging==24.0 \ psycopg[binary, pool]==3.1.18 \ --hash=sha256:31144d3fb4c17d78094d9e579826f047d4af1da6a10427d91dfcfb6ecdf6f12b \ --hash=sha256:4d5a0a5a8590906daa58ebd5f3cfc34091377354a1acced269dd10faf55da60e + # via -r contrib/container/requirements.in psycopg-binary==3.1.18 \ --hash=sha256:02bd4da45d5ee9941432e2e9bf36fa71a3ac21c6536fe7366d1bd3dd70d6b1e7 \ --hash=sha256:0f68ac2364a50d4cf9bb803b4341e83678668f1881a253e1224574921c69868c \ @@ -131,7 +137,9 @@ pyasn1-modules==0.4.0 \ # via python-ldap python-ldap==3.4.4 \ --hash=sha256:7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828 - # via django-auth-ldap + # via + # -r contrib/container/requirements.in + # django-auth-ldap pyyaml==6.0.1 \ --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ @@ -184,9 +192,11 @@ pyyaml==6.0.1 \ --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f -setuptools==69.5.1 \ - --hash=sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987 \ - --hash=sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32 + # via -r contrib/container/requirements.in +setuptools==70.3.0 \ + --hash=sha256:f171bab1dfbc86b132997f26a119f6056a57950d058587841a0082e8830f9dc5 \ + --hash=sha256:fe384da74336c398e0d956d1cae0669bc02eed936cdb1d49b57de1990dc11ffc + # via -r contrib/container/requirements.in sqlparse==0.5.0 \ --hash=sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93 \ --hash=sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663 @@ -215,6 +225,8 @@ uv==0.1.38 \ --hash=sha256:b0b15e51a0f8240969bc412ed0dd60cfe3f664b30173139ef263d71c596d631f \ --hash=sha256:ea44c07605d1359a7d82bf42706dd86d341f15f4ca2e1f36e51626a7111c2ad5 \ --hash=sha256:f87c9711493c53d32012a96b49c4d53aabdf7ed666cbf2c3fb55dd402a6b31a8 + # via -r contrib/container/requirements.in wheel==0.43.0 \ --hash=sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85 \ --hash=sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81 + # via -r contrib/container/requirements.in diff --git a/contrib/dev_reqs/requirements.in b/contrib/dev_reqs/requirements.in index 5075751c85..33bc7a3d99 100644 --- a/contrib/dev_reqs/requirements.in +++ b/contrib/dev_reqs/requirements.in @@ -1,4 +1,4 @@ # Packages needed for CI/packages -requests==2.32.2 +requests==2.32.3 pyyaml==6.0.1 -jc==1.25.2 +jc==1.25.3 diff --git a/contrib/dev_reqs/requirements.txt b/contrib/dev_reqs/requirements.txt index c4099a325e..a167cb11ab 100644 --- a/contrib/dev_reqs/requirements.txt +++ b/contrib/dev_reqs/requirements.txt @@ -1,8 +1,8 @@ # This file was autogenerated by uv via the following command: -# uv pip compile contrib/dev_reqs/requirements.in -o contrib/dev_reqs/requirements.txt --python-version=3.9 --no-strip-extras --generate-hashes -certifi==2024.2.2 \ - --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ - --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 +# uv pip compile contrib/dev_reqs/requirements.in -o contrib/dev_reqs/requirements.txt --no-strip-extras --generate-hashes +certifi==2024.7.4 \ + --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ + --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 # via requests charset-normalizer==3.3.2 \ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ @@ -100,9 +100,10 @@ idna==3.7 \ --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 # via requests -jc==1.25.2 \ - --hash=sha256:26e412a65a478f9da3097653db6277f915cfae5c0f0a3f42026b405936abd358 \ - --hash=sha256:97ada193495f79550f06fe0cbfb119ff470bcca57c1cc593a5cdb0008720e0b3 +jc==1.25.3 \ + --hash=sha256:ea17a8578497f2da92f73924d9d403f4563ba59422fbceff7bb4a16cdf84a54f \ + --hash=sha256:fa3140ceda6cba1210d1362f363cd79a0514741e8a1dd6167db2b2e2d5f24f7b + # via -r contrib/dev_reqs/requirements.in pygments==2.17.2 \ --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \ --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367 @@ -159,9 +160,11 @@ pyyaml==6.0.1 \ --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f -requests==2.32.2 \ - --hash=sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289 \ - --hash=sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c + # via -r contrib/dev_reqs/requirements.in +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 + # via -r contrib/dev_reqs/requirements.in ruamel-yaml==0.18.6 \ --hash=sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636 \ --hash=sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b @@ -218,9 +221,9 @@ ruamel-yaml-clib==0.2.8 \ --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \ --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412 # via ruamel-yaml -urllib3==2.2.1 \ - --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ - --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 +urllib3==2.2.2 \ + --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ + --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 # via requests xmltodict==0.13.0 \ --hash=sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56 \ diff --git a/contrib/install.sh b/contrib/install.sh index 3b432ae366..fc6b005960 100755 --- a/contrib/install.sh +++ b/contrib/install.sh @@ -75,6 +75,7 @@ root_command() { ;; "Debian GNU/Linux" | "debian gnu/linux" | Raspbian) if [[ $VER == "12" ]]; then + DIST_VER="11" SUPPORTED=true elif [[ $VER == "11" ]]; then SUPPORTED=true diff --git a/contrib/packager.io/before.sh b/contrib/packager.io/before.sh index b0bb808cef..0da421fd38 100755 --- a/contrib/packager.io/before.sh +++ b/contrib/packager.io/before.sh @@ -5,33 +5,40 @@ set -eu -VERSION="$APP_PKG_VERSION-$APP_PKG_ITERATION" -echo "Setting VERSION information to $VERSION" -echo "$VERSION" > VERSION - # The sha is the second element in APP_PKG_ITERATION +VERSION="$APP_PKG_VERSION-$APP_PKG_ITERATION" SHA=$(echo $APP_PKG_ITERATION | cut -d'.' -f2) # Download info -echo "Getting info from github for commit $SHA" -curl -L \ +echo "INFO collection | Getting info from github for commit $SHA" +curl -L -s -f \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/InvenTree/InvenTree/commits/$SHA > commit.json -curl -L \ + https://api.github.com/repos/$APP_REPO/commits/$SHA > commit.json +echo "INFO collection | Got commit.json with size $(wc -c commit.json)" +curl -L -s -f \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/InvenTree/InvenTree/commits/$SHA/branches-where-head > branches.json + https://api.github.com/repos/$APP_REPO/commits/$SHA/branches-where-head > branches.json +echo "INFO collection | Got branches.json with size $(wc -c branches.json)" +curl -L -s -f \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/$APP_REPO/commits/$APP_PKG_VERSION > tag.json +echo "INFO collection | Got tag.json with size $(wc -c tag.json)" # Extract info -echo "Extracting info from github" +echo "INFO extract | Extracting info from github" DATE=$(jq -r '.commit.committer.date' commit.json) BRANCH=$(jq -r '.[].name' branches.json) NODE_ID=$(jq -r '.node_id' commit.json) SIGNATURE=$(jq -r '.commit.verification.signature' commit.json) +FULL_SHA=$(jq -r '.sha' commit.json) -echo "Write VERSION information" +echo "INFO write | Write VERSION information" +echo "$VERSION" > VERSION echo "INVENTREE_COMMIT_HASH='$SHA'" >> VERSION +echo "INVENTREE_COMMIT_SHA='$FULL_SHA'" >> VERSION echo "INVENTREE_COMMIT_DATE='$DATE'" >> VERSION echo "INVENTREE_PKG_INSTALLER='PKG'" >> VERSION echo "INVENTREE_PKG_BRANCH='$BRANCH'" >> VERSION @@ -39,5 +46,22 @@ echo "INVENTREE_PKG_TARGET='$TARGET'" >> VERSION echo "NODE_ID='$NODE_ID'" >> VERSION echo "SIGNATURE='$SIGNATURE'" >> VERSION -echo "Written VERSION information" +echo "INFO write | Written VERSION information" +echo "### VERSION ###" cat VERSION +echo "### VERSION ###" + +# Try to get frontend +echo "INFO frontend | Trying to get frontend" +# Check if tag sha is the same as the commit sha +TAG_SHA=$(jq -r '.sha' tag.json) +if [ "$TAG_SHA" != "$FULL_SHA" ]; then + echo "INFO frontend | Tag sha '$TAG_SHA' is not the same as commit sha $FULL_SHA, can not download frontend" +else + echo "INFO frontend | Getting frontend from github via tag" + curl https://github.com/$APP_REPO/releases/download/$APP_PKG_VERSION/frontend-build.zip -L -O -f + mkdir -p src/backend/InvenTree/web/static + echo "INFO frontend | Unzipping frontend" + unzip -qq frontend-build.zip -d src/backend/InvenTree/web/static/web + echo "INFO frontend | Unzipped frontend" +fi diff --git a/contrib/packager.io/functions.sh b/contrib/packager.io/functions.sh index 9149754a66..29c9d53ff4 100755 --- a/contrib/packager.io/functions.sh +++ b/contrib/packager.io/functions.sh @@ -4,6 +4,8 @@ # Color_Off='\033[0m' On_Red='\033[41m' +PYTHON_FROM=9 +PYTHON_TO=12 function detect_docker() { if [ -n "$(grep docker Barcode Support->Barcode Input Delay`. + +### Custom Internal Format + +To implement a custom internal barcode format, the `generate(...)` method from the Barcode Mixin needs to be overridden. Then the plugin can be selected at `System Settings > Barcodes > Barcode Generation Plugin`. + +```python +from InvenTree.models import InvenTreeBarcodeMixin +from plugin import InvenTreePlugin +from plugin.mixins import BarcodeMixin + +class InvenTreeBarcodePlugin(BarcodeMixin, InvenTreePlugin): + NAME = "MyInternalBarcode" + TITLE = "My Internal Barcodes" + DESCRIPTION = "support for custom internal barcodes" + VERSION = "0.0.1" + AUTHOR = "InvenTree contributors" + + def generate(self, model_instance: InvenTreeBarcodeMixin): + return f'{model_instance.barcode_model_type()}: {model_instance.pk}' +``` + +!!! info "Scanning implementation required" + The parsing of the custom format needs to be implemented too, so that the scanning of the generated QR codes resolves to the correct part. diff --git a/docs/docs/extend/plugins/icon.md b/docs/docs/extend/plugins/icon.md new file mode 100644 index 0000000000..8913539285 --- /dev/null +++ b/docs/docs/extend/plugins/icon.md @@ -0,0 +1,19 @@ +--- +title: Icon Pack Mixin +--- + +## IconPackMixin + +The IconPackMixin class provides basic functionality for letting plugins expose custom icon packs that are available in the InvenTree UI. This is especially useful to provide a custom crafted icon pack with icons for different location types, e.g. different sizes and styles of drawers, bags, ESD bags, ... which are not available in the standard tabler icons library. + +### Sample Plugin + +The following example demonstrates how to use the `IconPackMixin` class to add a custom icon pack: + +::: plugin.samples.icons.icon_sample.SampleIconPlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] diff --git a/docs/docs/order/purchase_order.md b/docs/docs/order/purchase_order.md index 066f64d058..19169c2298 100644 --- a/docs/docs/order/purchase_order.md +++ b/docs/docs/order/purchase_order.md @@ -20,6 +20,7 @@ Each Purchase Order has a specific status code which indicates the current state | --- | --- | | Pending | The purchase order has been created, but has not been submitted to the supplier | | In Progress | The purchase order has been issued to the supplier, and is in progress | +| On Hold | The purchase order has been placed on hold, but is still active | | 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 | @@ -138,3 +139,14 @@ This view can be accessed externally as an ICS calendar using a URL like the fol `http://inventree.example.org/api/order/calendar/purchase-order/calendar.ics` by default, completed orders are not exported. These can be included by appending `?include_completed=True` to the URL. + +## Purchase Order Settings + +The following [global settings](../settings/global.md) are available for purchase orders: + +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("PURCHASEORDER_REFERENCE_PATTERN") }} +{{ globalsetting("PURCHASEORDER_REQUIRE_RESPONSIBLE") }} +{{ globalsetting("PURCHASEORDER_EDIT_COMPLETED_ORDERS") }} +{{ globalsetting("PURCHASEORDER_AUTO_COMPLETE") }} diff --git a/docs/docs/order/return_order.md b/docs/docs/order/return_order.md index 4b134601ae..cdbfba88b1 100644 --- a/docs/docs/order/return_order.md +++ b/docs/docs/order/return_order.md @@ -45,6 +45,7 @@ Each Return Order has a specific status code, as follows: | --- | --- | | Pending | The return order has been created, but not sent to the customer | | In Progress | The return order has been issued to the customer | +| On Hold | The return order has been placed on hold, but is still active | | Complete | The return order was marked as complete, and is now closed | | Cancelled | The return order was cancelled, and is now closed | @@ -120,3 +121,14 @@ This view can be accessed externally as an ICS calendar using a URL like the fol `http://inventree.example.org/api/order/calendar/return-order/calendar.ics` by default, completed orders are not exported. These can be included by appending `?include_completed=True` to the URL. + +## Return Order Settings + +The following [global settings](../settings/global.md) are available for return orders: + +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("RETURNORDER_ENABLED") }} +{{ globalsetting("RETURNORDER_REFERENCE_PATTERN") }} +{{ globalsetting("RETURNORDER_REQUIRE_RESPONSIBLE") }} +{{ globalsetting("RETURNORDER_EDIT_COMPLETED_ORDERS") }} diff --git a/docs/docs/order/sales_order.md b/docs/docs/order/sales_order.md index 43ab9cc533..e44666fb02 100644 --- a/docs/docs/order/sales_order.md +++ b/docs/docs/order/sales_order.md @@ -20,6 +20,7 @@ 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 | +| On Hold | The sales order has been placed on hold, but is still active | | 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 | @@ -182,3 +183,15 @@ All these fields can be edited by the user: {% with id="edit-shipment", url="order/edit_shipment.png", description="Edit shipment" %} {% include "img.html" %} {% endwith %} + +## Sales Order Settings + +The following [global settings](../settings/global.md) are available for sales orders: + +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("SALESORDER_REFERENCE_PATTERN") }} +{{ globalsetting("SALESORDER_REQUIRE_RESPONSIBLE") }} +{{ globalsetting("SALESORDER_DEFAULT_SHIPMENT") }} +{{ globalsetting("SALESORDER_EDIT_COMPLETED_ORDERS") }} +{{ globalsetting("SALESORDER_SHIP_COMPLETE") }} diff --git a/docs/docs/part/part.md b/docs/docs/part/part.md index acb90571df..5b39e1c77f 100644 --- a/docs/docs/part/part.md +++ b/docs/docs/part/part.md @@ -73,7 +73,15 @@ A [Purchase Order](../order/purchase_order.md) allows parts to be ordered from a If a part is designated as *Salable* it can be sold to external customers. Setting this flag allows parts to be added to sales orders. -### Active +## Locked Parts + +Parts can be locked to prevent them from being modified. This is useful for parts which are in production and should not be changed. The following restrictions apply to parts which are locked: + +- Locked parts cannot be deleted +- BOM items cannot be created, edited, or deleted when they are part of a locked assembly +- Part parameters linked to a locked part cannot be created, edited or deleted + +## Active Parts By default, all parts are *Active*. Marking a part as inactive means it is not available for many actions, but the part remains in the database. If a part becomes obsolete, it is recommended that it is marked as inactive, rather than deleting it from the database. diff --git a/docs/docs/part/revision.md b/docs/docs/part/revision.md new file mode 100644 index 0000000000..4d3a9bd79d --- /dev/null +++ b/docs/docs/part/revision.md @@ -0,0 +1,78 @@ +--- +title: Part Revisions +--- + +## Part Revisions + +When creating a complex part (such as an assembly comprised of other parts), it is often necessary to track changes to the part over time. For example, throughout the lifetime of an assembly, it may be necessary to adjust the bill of materials, or update the design of the part. + +Rather than overwrite the existing part data, InvenTree allows you to create a new *revision* of the part. This allows you to track changes to the part over time, and maintain a history of the part design. + +Crucially, creating a new *revision* ensures that any related data entries which refer to the original part (such as stock items, build orders, purchase orders, etc) are not affected by the change. + +### Revisions are Parts + +A *revision* of a part is itself a part. This means that each revision of a part has its own part number, stock items, parameters, bill of materials, etc. The only thing that differentiates a *revision* from any other part is that the *revision* is linked to the original part. + +### Revision Fields + +Each part has two fields which are used to track the revision of the part: + +* **Revision**: The revision number of the part. This is a user-defined field, and can be any string value. +* **Revision Of**: A reference to the part of which *this* part is a revision. This field is used to keep track of the available revisions for any particular part. + +### Revision Restrictions + +When creating a new revision of a part, there are some restrictions which must be adhered to: + +* **Circular References**: A part cannot be a revision of itself. This would create a circular reference which is not allowed. +* **Unique Revisions**: A part cannot have two revisions with the same revision number. Each revision (of a given part) must have a unique revision code. +* **Revisions of Revisions**: A single part can have multiple revisions, but a revision cannot have its own revision. This restriction is in place to prevent overly complex part relationships. +* **Template Revisions**: A part which is a [template part](./template.md) cannot have revisions. This is because the template part is used to create variants, and allowing revisions of templates would create disallowed relationship states in the database. However, variant parts are allowed to have revisions. +* **Template References**: A part which is a revision of a variant part must point to the same template as the original part. This is to ensure that the revision is correctly linked to the original part. + +## Revision Settings + +The following options are available to control the behavior of part revisions. + +Note that these options can be changed in the InvenTree settings: + +{% with id="part_revision_settings", url="part/part_revision_settings.png", description="Part revision settings" %} +{% include 'img.html' %} +{% endwith %} + +* **Enable Revisions**: If this setting is enabled, parts can have revisions. If this setting is disabled, parts cannot have revisions. +* **Assembly Revisions Only**: If this setting is enabled, only assembly parts can have revisions. This is useful if you only want to track revisions of assemblies, and not individual parts. + +## Create a Revision + +To create a new revision for a given part, navigate to the part detail page, and click on the "Revisions" tab. + +Select the "Duplicate Part" action, to create a new copy of the selected part. This will open the "Duplicate Part" form: + +{% with id="part_create_revision", url="part/part_create_revision.png", description="Create part revision" %} +{% include 'img.html' %} +{% endwith %} + +In this form, make the following updates: + +1. Set the *Revision Of* field to the original part (the one that you are duplicating) +2. Set the *Revision* field to a unique revision number for the new part revision + +Once these changes (and any other required changes) are made, press *Submit* to create the new part. + +Once the form is submitted (without any errors), you will be redirected to the new part revision. Here you can see that it is linked to the original part: + +{% with id="part_revision_b", url="part/part_revision_b.png", description="Revision B" %} +{% include 'img.html' %} +{% endwith %} + +## Revision Navigation + +When multiple revisions exist for a particular part, you can navigate between revisions using the *Select Part Revision* drop-down which renders at the top of the part page: + +{% with id="part_revision_select", url="part/part_revision_select.png", description="Select part revision" %} +{% include 'img.html' %} +{% endwith %} + +Note that this revision selector is only visible when multiple revisions exist for the part. diff --git a/docs/docs/part/scheduling.md b/docs/docs/part/scheduling.md index 2c70c85fd2..b9e667d9d8 100644 --- a/docs/docs/part/scheduling.md +++ b/docs/docs/part/scheduling.md @@ -5,7 +5,7 @@ title: Part Scheduling ## Part Scheduling -The *Scheduling* tab provides an overview of the *predicted* future availabile quantity of a particular part. +The *Scheduling* tab provides an overview of the *predicted* future available quantity of a particular part. The *Scheduling* tab displays a chart of estimated future part stock levels. It begins at the current date, with the current stock level. It then projects into the "future", taking information from: diff --git a/docs/docs/part/views.md b/docs/docs/part/views.md index f2301d9ea2..c574bccf7e 100644 --- a/docs/docs/part/views.md +++ b/docs/docs/part/views.md @@ -28,7 +28,6 @@ Details provides information about the particular part. Parts details can be dis {% with id="part_overview", url="part/part_overview.png", description="Part details" %} {% include 'img.html' %} {% endwith %} -

    A Part is defined in the system by the following parameters: @@ -38,7 +37,7 @@ A Part is defined in the system by the following parameters: **Description** - Longer form text field describing the Part -**Revision** - An optional revision code denoting the particular version for the part. Used when there are multiple revisions of the same master part object. +**Revision** - An optional revision code denoting the particular version for the part. Used when there are multiple revisions of the same master part object. Read [more about part revisions here](./revision.md). **Keywords** - Optional few words to describe the part and make the part search more efficient. @@ -62,7 +61,7 @@ Parts can have multiple defined parameters. If a part is a *Template Part* then the *Variants* tab will be visible. -[Read about Part templates](./template.md) +[Read about Part templates and variants](./template.md) ### Stock diff --git a/docs/docs/releases/0.1.4.md b/docs/docs/releases/0.1.4.md index cb8237d469..8963bb9198 100644 --- a/docs/docs/releases/0.1.4.md +++ b/docs/docs/releases/0.1.4.md @@ -61,7 +61,7 @@ Also, dedicated settings sections were added for: For Category section, read [Category Parameter Templates](#category-parameter-templates) -Other section allows to set the prefix of build, puchase and sales orders. +Other section allows to set the prefix of build, purchase and sales orders. ### Category Parameter Templates diff --git a/docs/docs/releases/0.4.0.md b/docs/docs/releases/0.4.0.md index 55d8b07bf9..1829f5df9c 100644 --- a/docs/docs/releases/0.4.0.md +++ b/docs/docs/releases/0.4.0.md @@ -29,5 +29,5 @@ title: Release 0.4.0 | Pull Request | Description | | --- | --- | | [#1823](https://github.com/inventree/InvenTree/pull/1823) | Fixes link formatting issues for ManufacturerParts | -| [#1824](https://github.com/inventree/InvenTree/pull/1824) | Selects correct curreny code when creating a new PurchaseOrderLineItem | +| [#1824](https://github.com/inventree/InvenTree/pull/1824) | Selects correct currency code when creating a new PurchaseOrderLineItem | | [#1867](https://github.com/inventree/InvenTree/pull/1867) | Fixes long-running bug when deleting sequential items via the API | diff --git a/docs/docs/report/helpers.md b/docs/docs/report/helpers.md index ce2a1d9188..3e8f8aff6f 100644 --- a/docs/docs/report/helpers.md +++ b/docs/docs/report/helpers.md @@ -259,6 +259,31 @@ A shortcut function is provided for rendering an image associated with a Company *Preview* and *thumbnail* image variations can be rendered for the `company_image` tag, in a similar manner to [part image variations](#image-variations) +## Icons + +Some models (e.g. part categories and locations) allow to specify a custom icon. To render these icons in a report, there is a `{% raw %}{% icon location.icon %}{% endraw %}` template tag from the report template library available. + +This tag renders the required html for the icon. + +!!! info "Loading fonts" + Additionally the icon fonts need to be loaded into the template. This can be done using the `{% raw %}{% include_icon_fonts %}{% endraw %}` template tag inside of a style block + +!!! tip "Custom classes for styling the icon further" + The icon template tag accepts an optional `class` argument which can be used to apply a custom class to the rendered icon used to style the icon further e.g. positioning it, changing it's size, ... `{% raw %}{% icon location.icon class="my-class" %}{% endraw %}`. + +```html +{% raw %} +{% load report %} + +{% block style %} +{% include_icon_fonts %} +{% endblock style %} + +{% icon location.icon %} + +{% endraw %} +``` + ## InvenTree Logo A template tag is provided to load the InvenTree logo image into a report. You can render the logo using the `{% raw %}{% logo_image %}{% endraw %}` tag: diff --git a/docs/docs/settings/SSO.md b/docs/docs/settings/SSO.md index 351c594b5f..2832ba1950 100644 --- a/docs/docs/settings/SSO.md +++ b/docs/docs/settings/SSO.md @@ -4,13 +4,13 @@ title: InvenTree Single Sign On ## Single Sign On -InvenTree provides the possibility to use 3rd party services to authenticate users. This functionality makes use of [django-allauth](https://django-allauth.readthedocs.io/en/latest/) and supports a wide array of OpenID and OAuth [providers](https://django-allauth.readthedocs.io/en/latest/socialaccount/providers/index.html). +InvenTree provides the possibility to use 3rd party services to authenticate users. This functionality makes use of [django-allauth](https://docs.allauth.org/en/latest/) and supports a wide array of OpenID and OAuth [providers](https://docs.allauth.org/en/latest/socialaccount/providers/index.html). !!! tip "Provider Documentation" - There are a lot of technical considerations when configuring a particular SSO provider. A good starting point is the [django-allauth documentation](https://django-allauth.readthedocs.io/en/latest/socialaccount/providers/index.html) + There are a lot of technical considerations when configuring a particular SSO provider. A good starting point is the [django-allauth documentation](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) !!! warning "Advanced Users" - The SSO functionality provided by django-allauth is powerful, but can prove challenging to configure. Please ensure that you understand the implications of enabling SSO for your InvenTree instance. Specific technical details of each available SSO provider are beyond the scope of this documentation - please refer to the [django-allauth documentation](https://django-allauth.readthedocs.io/en/latest/socialaccount/providers/index.html) for more information. + The SSO functionality provided by django-allauth is powerful, but can prove challenging to configure. Please ensure that you understand the implications of enabling SSO for your InvenTree instance. Specific technical details of each available SSO provider are beyond the scope of this documentation - please refer to the [django-allauth documentation](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) for more information. ## SSO Configuration @@ -31,8 +31,8 @@ There are two variables in the configuration file which define the operation of | Environment Variable |Configuration File | Description | More Info | | --- | --- | --- | --- | -| INVENTREE_SOCIAL_BACKENDS | `social_backends` | A *list* of provider backends enabled for the InvenTree instance | [django-allauth docs](https://django-allauth.readthedocs.io/en/latest/installation/quickstart.html) | -| INVENTREE_SOCIAL_PROVIDERS | `social_providers` | A *dict* of settings specific to the installed providers | [provider documentation](https://django-allauth.readthedocs.io/en/latest/socialaccount/providers/index.html) | +| INVENTREE_SOCIAL_BACKENDS | `social_backends` | A *list* of provider backends enabled for the InvenTree instance | [django-allauth docs](https://docs.allauth.org/en/latest/installation/quickstart.html) | +| INVENTREE_SOCIAL_PROVIDERS | `social_providers` | A *dict* of settings specific to the installed providers | [provider documentation](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) | In the example below, SSO provider modules are activated for *google*, *github* and *microsoft*. Specific configuration options are specified for the *microsoft* provider module: @@ -44,7 +44,7 @@ In the example below, SSO provider modules are activated for *google*, *github* Note that the provider modules specified in `social_backends` must be prefixed with `allauth.socialaccounts.providers` !!! warning "Provider Documentation" - We do not provide any specific documentation for each provider module. Please refer to the [django-allauth documentation](https://django-allauth.readthedocs.io/en/latest/socialaccount/providers/index.html) for more information. + We do not provide any specific documentation for each provider module. Please refer to the [django-allauth documentation](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) for more information. !!! tip "Restart Server" As the [configuration file](../start/config.md) is only read when the server is launched, ensure you restart the server after editing the file. @@ -57,7 +57,7 @@ The next step is to create an external authentication app with your provider of The provider application will be created as part of your SSO provider setup. This is *not* the same as the *SocialApp* entry in the InvenTree admin interface. !!! info "Read the Documentation" - The [django-allauth documentation](https://django-allauth.readthedocs.io/en/latest/socialaccount/providers/index.html) is a good starting point here. There are also a number of good tutorials online (at least for the major supported SSO providers). + The [django-allauth documentation](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) is a good starting point here. There are also a number of good tutorials online (at least for the major supported SSO providers). In general, the external app will generate a *key* and *secret* pair - although different terminology may be used, depending on the provider. @@ -132,6 +132,31 @@ In the [settings screen](./global.md), navigate to the *Login Settings* panel. H Note that [email settings](./email.md) must be correctly configured before SSO will be activated. Ensure that your email setup is correctly configured and operational. +## SSO Group Sync Configuration + +InvenTree has the ability to synchronize groups assigned to each user directly from the IdP. To enable this feature, navigate to the *Login Settings* panel in the [settings screen](./global.md) first. Here, the following options are available: + +| Setting | Description | +| --- | --- | +| Enable SSO group sync | Enable synchronizing InvenTree groups with groups provided by the IdP | +| SSO group key | The name of the claim containing all groups, e.g. `groups` or `roles` | +| SSO group map | A mapping from SSO groups to InvenTree groups as JSON, e.g. `{"/inventree/admins": "admin"}`. If the mapped group does not exist once a user signs up, a new group without assigned permissions will be created. | +| Remove groups outside of SSO | Whether groups should be removed from the user if they are not present in the IdP data | + +!!! warning "Remove groups outside of SSO" + Disabling this feature might cause security issues as groups that are removed in the IdP will stay assigned in InvenTree + +### Keycloak OIDC example configuration + +!!! tip "Configuration for different IdPs" + The main challenge in enabling the SSO group sync feature is for the SSO admin to configure the IdP such that the groups are correctly represented in in the Django allauth `extra_data` attribute. The SSO group sync feature has been developed and tested using integrated Keycloak users/groups and OIDC. If you are utilizing this feature using another IdP, kindly consider documenting your configuration steps as well. + +Keycloak groups are not sent to the OIDC client by default. To enable such functionality, create a new client scope named `groups` in the Keycloak admin console. For this scope, add a new mapper ('By Configuration') and select 'Group Membership'. Give it a descriptive name and set the token claim name to `groups`. + +For each OIDC client that relies on those group, explicitly add the `groups` scope to client scopes. The groups will now be sent to client upon request. + +**Note:** A group named `foo` will be displayed as `/foo`. For this reason, the example above recommends using group names like `appname/rolename` which will be sent to the client as `/appname/rolename`. + ## Security Considerations You should use SSL for your website if you want to use this feature. Also set your callback-endpoints to `https://` addresses to reduce the risk of leaking user's tokens. diff --git a/docs/docs/settings/currency.md b/docs/docs/settings/currency.md index 4a2e7834f5..7368213afa 100644 --- a/docs/docs/settings/currency.md +++ b/docs/docs/settings/currency.md @@ -24,12 +24,7 @@ If a different currency exchange backend is needed, or a custom implementation i ### Currency Settings -In the [settings screen](./global.md), under the *Pricing* section, the following currency settings are available: - -| 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 | +Refer to the [global settings](./global.md#pricing-and-currency) documentation for more information on available currency settings. #### Supported Currencies diff --git a/docs/docs/settings/global.md b/docs/docs/settings/global.md index ae5107ca89..7de1186167 100644 --- a/docs/docs/settings/global.md +++ b/docs/docs/settings/global.md @@ -17,116 +17,139 @@ Global settings are arranged in the following categories: ### Server Settings -Configuration of basic server settings. +Configuration of basic server settings: + +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("INVENTREE_BASE_URL") }} +{{ globalsetting("INVENTREE_COMPANY_NAME") }} +{{ globalsetting("INVENTREE_INSTANCE") }} +{{ globalsetting("INVENTREE_INSTANCE_TITLE") }} +{{ globalsetting("INVENTREE_RESTRICT_ABOUT") }} +{{ globalsetting("DISPLAY_FULL_NAMES") }} +{{ globalsetting("INVENTREE_UPDATE_CHECK_INTERVAL") }} +{{ globalsetting("INVENTREE_DOWNLOAD_FROM_URL") }} +{{ globalsetting("INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE") }} +{{ globalsetting("INVENTREE_DOWNLOAD_FROM_URL_USER_AGENT") }} +{{ globalsetting("INVENTREE_REQUIRE_CONFIRM") }} +{{ globalsetting("INVENTREE_STRICT_URLS") }} +{{ globalsetting("INVENTREE_TREE_DEPTH") }} +{{ globalsetting("INVENTREE_BACKUP_ENABLE") }} +{{ globalsetting("INVENTREE_BACKUP_DAYS") }} +{{ globalsetting("INVENTREE_DELETE_TASKS_DAYS") }} +{{ globalsetting("INVENTREE_DELETE_ERRORS_DAYS") }} +{{ globalsetting("INVENTREE_DELETE_NOTIFICATIONS_DAYS") }} -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| InvenTree Instance Name | String | String descriptor for the InvenTree server instance | InvenTree Server | -| Use Instance Name | Boolean | Use instance name in title bars | False | -| Restrict showing `about` | Boolean | Show the `about` modal only to superusers | False | -| Base URL | String | Base URL for server instance | *blank* | -| Company Name | String | Company name | My company name | -| Download from URL | Boolean | Allow downloading of images from remote URLs | False | ### Login Settings -Change how logins, password-forgot, signups are handled. +Change how logins, password-forgot, signups are handled: -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Enable registration | Boolean | Enable self-registration for users on the login-pages | False | -| Enable SSO | Boolean | Enable SSO on the login-pages | False | -| Enable SSO registration | Boolean | Enable self-registration for users via SSO on the login-pages | False | -| Enable password forgot | Boolean | Enable password forgot function on the login-pages.

    This will let users reset their passwords on their own. For this feature to work you need to configure E-mail | True | -| E-Mail required | Boolean | Require user to supply e-mail on signup.

    Without a way (e-mail) to contact the user notifications and security features might not work! | False | -| Enforce MFA | Boolean | Users must use multifactor security.

    This forces each user to setup MFA and use it on each authentication | False | -| Mail twice | Boolean | On signup ask users twice for their mail | False | -| Password twice | Boolean | On signup ask users twice for their password | True | -| Auto-fill SSO users | Boolean | Automatically fill out user-details from SSO account-data.

    If this feature is enabled the user is only asked for their username, first- and surname if those values can not be gathered from their SSO profile. This might lead to unwanted usernames bleeding over. | True | -| Allowed domains | String | Restrict signup to certain domains (comma-separated, starting with @) | | +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("LOGIN_ENABLE_PWD_FORGOT") }} +{{ globalsetting("LOGIN_MAIL_REQUIRED") }} +{{ globalsetting("LOGIN_ENFORCE_MFA") }} +{{ globalsetting("LOGIN_ENABLE_REG") }} +{{ globalsetting("LOGIN_SIGNUP_MAIL_TWICE") }} +{{ globalsetting("LOGIN_SIGNUP_PWD_TWICE") }} +{{ globalsetting("SIGNUP_GROUP") }} +{{ globalsetting("LOGIN_SIGNUP_MAIL_RESTRICTION") }} +{{ globalsetting("LOGIN_ENABLE_SSO") }} +{{ globalsetting("LOGIN_ENABLE_SSO_REG") }} +{{ globalsetting("LOGIN_SIGNUP_SSO_AUTO") }} +{{ globalsetting("LOGIN_ENABLE_SSO_GROUP_SYNC") }} +{{ globalsetting("SSO_GROUP_MAP") }} +{{ globalsetting("SSO_GROUP_KEY") }} +{{ globalsetting("SSO_REMOVE_GROUPS") }} +#### Require User Email + +If this setting is enabled, users must provide an email address when signing up. Note that some notification and security features require a valid email address. + +#### Forgot Password + +If this setting is enabled, users can reset their password via email. This requires a valid email address to be associated with the user account. + +#### Enforce Multi-Factor Authentication + +If this setting is enabled, users must have multi-factor authentication enabled to log in. + +#### Auto Fil SSO Users + +Automatically fill out user-details from SSO account-data. If this feature is enabled the user is only asked for their username, first- and surname if those values can not be gathered from their SSO profile. This might lead to unwanted usernames bleeding over. ### Barcodes -Configuration of barcode functionality +Configuration of barcode functionality: -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Barcode Support | Boolean | Enable barcode functionality in web interface | True | +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("BARCODE_ENABLE") }} +{{ globalsetting("BARCODE_INPUT_DELAY") }} +{{ globalsetting("BARCODE_WEBCAM_SUPPORT") }} +{{ globalsetting("BARCODE_SHOW_TEXT") }} +{{ globalsetting("BARCODE_GENERATION_PLUGIN") }} -### Currencies +### Pricing and Currency -Configuration of currency support +Configuration of pricing data and currency support: -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Default Currency | Currency | Default currency | USD | +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("INVENTREE_DEFAULT_CURRENCY") }} +{{ globalsetting("CURRENCY_CODES") }} +{{ globalsetting("PART_INTERNAL_PRICE") }} +{{ globalsetting("PART_BOM_USE_INTERNAL_PRICE") }} +{{ globalsetting("PRICING_DECIMAL_PLACES_MIN") }} +{{ globalsetting("PRICING_DECIMAL_PLACES") }} +{{ globalsetting("PRICING_UPDATE_DAYS") }} +{{ globalsetting("PRICING_USE_SUPPLIER_PRICING") }} +{{ globalsetting("PRICING_PURCHASE_HISTORY_OVERRIDES_SUPPLIER") }} +{{ globalsetting("PRICING_USE_STOCK_PRICING") }} +{{ globalsetting("PRICING_STOCK_ITEM_AGE_DAYS") }} +{{ globalsetting("PRICING_USE_VARIANT_PRICING") }} +{{ globalsetting("PRICING_ACTIVE_VARIANTS") }} ### Reporting -Configuration of report generation +Configuration of report generation: -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Enable Reports | Boolean | Enable report generation | False | -| Page Size | String | Default page size | A4 | -| Debug Mode | Boolean | Generate reports in debug mode (HTML output) | False | -| Test Reports | Boolean | Enable generation of test reports | False | +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("REPORT_ENABLE") }} +{{ globalsetting("REPORT_DEFAULT_PAGE_SIZE") }} +{{ globalsetting("REPORT_DEBUG_MODE") }} +{{ globalsetting("REPORT_LOG_ERRORS") }} +{{ globalsetting("REPORT_ENABLE_TEST_REPORT") }} +{{ globalsetting("REPORT_ATTACH_TEST_REPORT") }} ### Parts -#### Main Settings - -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| IPN Regex | String | Regular expression pattern for matching Part IPN | *blank* | -| Allow Duplicate IPN | Boolean | Allow multiple parts to share the same IPN | True | -| Allow Editing IPN | Boolean | Allow changing the IPN value while editing a part | True | -| Part Name Display Format | String | Format to display the part name | {% raw %}`{{ part.id if part.id }}{{ ' | ' if part.id }}{{ part.name }}{{ ' | ' if part.revision }}{{ part.revision if part.revision }}`{% endraw %} | -| Show Price History | Boolean | Display historical pricing for Part | False | -| Show Price in Forms | Boolean | Display part price in some forms | True | -| Show Price in BOM | Boolean | Include pricing information in BOM tables | True | -| Show related parts | Boolean | Display related parts for a part | True | -| Create initial stock | Boolean | Create initial stock on part creation | True | - -#### Creation Settings - -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Template | Boolean | Parts are templates by default | False | -| Assembly | Boolean | Parts can be assembled from other components by default | False | -| Component | Boolean | Parts can be used as sub-components by default | True | -| Trackable | Boolean | Parts are trackable by default | False | -| Purchaseable | Boolean | Parts are purchaseable by default | True | -| Salable | Boolean | Parts are salable by default | False | -| Virtual | Boolean | Parts are virtual by default | False | - -#### Copy Settings - -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Copy Part BOM Data | Boolean | Copy BOM data by default when duplicating a part | True | -| Copy Part Parameter Data | Boolean | Copy parameter data by default when duplicating a part | True | -| Copy Part Test Data | Boolean | Copy test data by default when duplicating a part | True | -| Copy Category Parameter Templates | Boolean | Copy category parameter templates when creating a part | True | - -#### Internal Price Settings - -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Internal Prices | Boolean | Enable internal prices for parts | False | -| Internal Price as BOM-Price | Boolean | Use the internal price (if set) in BOM-price calculations | False | - -#### Part Import Setting - -This section of the part settings allows staff users to: - -- import parts to InvenTree clicking the Import Part button -- enable the ["Import Parts" tab in the part category view](../part/part.md#part-import). - -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Show Import in Views | Boolean | Display the import wizard in some part views | True | +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("PART_IPN_REGEX") }} +{{ globalsetting("PART_ALLOW_DUPLICATE_IPN") }} +{{ globalsetting("PART_ALLOW_EDIT_IPN") }} +{{ globalsetting("PART_ALLOW_DELETE_FROM_ASSEMBLY") }} +{{ globalsetting("PART_ENABLE_REVISION") }} +{{ globalsetting("PART_REVISION_ASSEMBLY_ONLY") }} +{{ globalsetting("PART_NAME_FORMAT") }} +{{ globalsetting("PART_SHOW_RELATED") }} +{{ globalsetting("PART_CREATE_INITIAL") }} +{{ globalsetting("PART_CREATE_SUPPLIER") }} +{{ globalsetting("PART_TEMPLATE") }} +{{ globalsetting("PART_ASSEMBLY") }} +{{ globalsetting("PART_COMPONENT") }} +{{ globalsetting("PART_TRACKABLE") }} +{{ globalsetting("PART_PURCHASEABLE") }} +{{ globalsetting("PART_SALABLE") }} +{{ globalsetting("PART_VIRTUAL") }} +{{ globalsetting("PART_COPY_BOM") }} +{{ globalsetting("PART_COPY_PARAMETERS") }} +{{ globalsetting("PART_COPY_TESTS") }} +{{ globalsetting("PART_CATEGORY_PARAMETERS") }} +{{ globalsetting("PART_CATEGORY_DEFAULT_ICON") }} #### Part Parameter Templates @@ -149,45 +172,48 @@ After a list of parameters is added to a part category and upon creation of a ne Configuration of stock item options -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Stock Expiry | Boolean | Enable stock expiry functionality | False | -| Stock Stale Time | Days | Number of days stock items are considered stale before expiring | 90 | -| Sell Expired Stock | Boolean | Allow sale of expired stock | False | -| Build Expired Stock | Boolean | Allow building with expired stock | False | -| Stock Ownership Control | Boolean | Enable ownership control functionality | False | +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("SERIAL_NUMBER_GLOBALLY_UNIQUE") }} +{{ globalsetting("SERIAL_NUMBER_AUTOFILL") }} +{{ globalsetting("STOCK_DELETE_DEPLETED_DEFAULT") }} +{{ globalsetting("STOCK_BATCH_CODE_TEMPLATE") }} +{{ globalsetting("STOCK_ENABLE_EXPIRY") }} +{{ globalsetting("STOCK_STALE_DAYS") }} +{{ globalsetting("STOCK_ALLOW_EXPIRED_SALE") }} +{{ globalsetting("STOCK_ALLOW_EXPIRED_BUILD") }} +{{ globalsetting("STOCK_OWNERSHIP_CONTROL") }} +{{ globalsetting("STOCK_LOCATION_DEFAULT_ICON") }} +{{ globalsetting("STOCK_SHOW_INSTALLED_ITEMS") }} +{{ globalsetting("STOCK_ENFORCE_BOM_INSTALLATION") }} +{{ globalsetting("STOCK_ALLOW_OUT_OF_STOCK_TRANSFER") }} +{{ globalsetting("TEST_STATION_DATA") }} ### Build Orders -Options for build orders - -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Reference Pattern | String | Pattern for defining Build Order reference values | {% raw %}BO-{ref:04d}{% endraw %} | +Refer to the [build order settings](../build/build.md#build-order-settings). ### Purchase Orders -Options for purchase orders +Refer to the [purchase order settings](../order/purchase_order.md#purchase-order-settings). -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Reference Pattern | String | Pattern for defining Purchase Order reference values | {% raw %}PO-{ref:04d}{% endraw %} | +### Sales Orders -### Sales orders +Refer to the [sales order settings](../order/sales_order.md#sales-order-settings). -Options for sales orders +### Return Orders -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Reference Pattern | String | Pattern for defining Sales Order reference values | {% raw %}SO-{ref:04d}{% endraw %} | +Refer to the [return order settings](../order/return_order.md#return-order-settings). ### Plugin Settings -Change into what parts plugins can integrate into. -| Setting | Type | Description | Default | -| --- | --- | --- | --- | -| Enable URL integration | Boolean | Enable plugins to add URL routes | False | -| Enable navigation integration | Boolean | Enable plugins to integrate into navigation | False | -| Enable setting integration | Boolean | Enable plugins to integrate into inventree settings | False | -| Enable app integration | Boolean | Enable plugins to add apps | False | +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("PLUGIN_ON_STARTUP") }} +{{ globalsetting("PLUGIN_UPDATE_CHECK") }} +{{ globalsetting("ENABLE_PLUGINS_URL") }} +{{ globalsetting("ENABLE_PLUGINS_NAVIGATION") }} +{{ globalsetting("ENABLE_PLUGINS_APP") }} +{{ globalsetting("ENABLE_PLUGINS_SCHEDULE") }} +{{ globalsetting("ENABLE_PLUGINS_EVENTS") }} diff --git a/docs/docs/settings/user.md b/docs/docs/settings/user.md index c9f74b97ed..fdb6cb0aca 100644 --- a/docs/docs/settings/user.md +++ b/docs/docs/settings/user.md @@ -32,24 +32,44 @@ This screen allows the user to customize display of items on the InvenTree home ### Search Settings -Customize settings for search results +Customize settings for search results: -{% with id="user-search", url="settings/user_search.png", description="User Search Settings" %} -{% include 'img.html' %} -{% endwith %} +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ usersetting("SEARCH_WHOLE") }} +{{ usersetting("SEARCH_REGEX") }} +{{ usersetting("SEARCH_PREVIEW_RESULTS") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_PARTS") }} +{{ usersetting("SEARCH_HIDE_INACTIVE_PARTS") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_SUPPLIER_PARTS") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_MANUFACTURER_PARTS") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_CATEGORIES") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_STOCK") }} +{{ usersetting("SEARCH_PREVIEW_HIDE_UNAVAILABLE_STOCK") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_LOCATIONS") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_COMPANIES") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_BUILD_ORDERS") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_PURCHASE_ORDERS") }} +{{ usersetting("SEARCH_PREVIEW_EXCLUDE_INACTIVE_PURCHASE_ORDERS") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_SALES_ORDERS") }} +{{ usersetting("SEARCH_PREVIEW_EXCLUDE_INACTIVE_SALES_ORDERS") }} +{{ usersetting("SEARCH_PREVIEW_SHOW_RETURN_ORDERS") }} +{{ usersetting("SEARCH_PREVIEW_EXCLUDE_INACTIVE_RETURN_ORDERS") }} ### Notifications -Settings related to notification messages +Settings related to notification messages: -{% with id="user-notification", url="settings/user_notifications.png", description="User Notification Settings" %} -{% include 'img.html' %} -{% endwith %} +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ usersetting("NOTIFICATION_ERROR_REPORT") }} ### Reporting -Settings for label printing and report generation +Settings for label printing and report generation: -{% with id="user-reporting", url="settings/user_reporting.png", description="User Reporting Settings" %} -{% include 'img.html' %} -{% endwith %} +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ usersetting("REPORT_INLINE") }} +{{ usersetting("LABEL_INLINE") }} +{{ usersetting("LABEL_DEFAULT_PRINTER") }} diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index 98498f25fc..5653b8a659 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -54,6 +54,8 @@ The following basic options are available: | --- | --- | --- | --- | | INVENTREE_SITE_URL | site_url | Specify a fixed site URL | *Not specified* | | INVENTREE_DEBUG | debug | Enable [debug mode](./intro.md#debug-mode) | True | +| INVENTREE_DEBUG_QUERYCOUNT | debug_querycount | Enable [query count logging](https://github.com/bradmontgomery/django-querycount) in the terminal | False | +| INVENTREE_DEBUG_SHELL | debug_shell | Enable [administrator shell](https://github.com/djk2/django-admin-shell) (only in debug mode) | False | | INVENTREE_LOG_LEVEL | log_level | Set level of logging to terminal | WARNING | | INVENTREE_DB_LOGGING | db_logging | Enable logging of database messages | False | | INVENTREE_TIMEZONE | timezone | Server timezone | UTC | @@ -297,6 +299,10 @@ Alternatively this location can be specified with the `INVENTREE_BACKUP_DIR` env InvenTree provides allowance for additional sign-in options. The following options are not enabled by default, and care must be taken by the system administrator when configuring these settings. +| Environment Variable | Configuration File | Description | Default | +| --- | --- | --- | --- | +| INVENTREE_MFA_ENABLED | mfa_enabled | Enable or disable multi-factor authentication support for the InvenTree server | True | + ### Single Sign On Single Sign On (SSO) allows users to sign in to InvenTree using a third-party authentication provider. This functionality is provided by the [django-allauth](https://docs.allauth.org/en/latest/) package. diff --git a/docs/docs/start/docker_install.md b/docs/docs/start/docker_install.md index b2384c4df5..e2c6d16b26 100644 --- a/docs/docs/start/docker_install.md +++ b/docs/docs/start/docker_install.md @@ -199,7 +199,7 @@ Any persistent files generated by the Caddy container (such as certificates, etc ### Demo Dataset -To quickly get started with a demo dataset, you can run the following command: +To quickly get started with a [demo dataset](../demo.md), you can run the following command: ``` docker compose run --rm inventree-server invoke setup-test -i @@ -212,3 +212,86 @@ To start afresh (and completely remove the existing database), run the following ``` docker compose run --rm inventree-server invoke delete-data ``` + +## Install custom packages + +To install custom packages to your docker image, a custom docker image can be built and used automatically each time when updating. The following changes need to be applied to the docker compose file: + +
    docker-compose.yml changes + +```diff +diff --git a/docker-compose.yml b/docker-compose.yml +index 8adee63..dc3993c 100644 +--- a/docker-compose.yml ++++ b/docker-compose.yml +@@ -69,7 +69,14 @@ services: + # Uses gunicorn as the web server + inventree-server: + # If you wish to specify a particular InvenTree version, do so here +- image: inventree/inventree:${INVENTREE_TAG:-stable} ++ image: inventree/inventree:${INVENTREE_TAG:-stable}-custom ++ pull_policy: never ++ build: ++ context: . ++ dockerfile: Dockerfile ++ target: production ++ args: ++ INVENTREE_TAG: ${INVENTREE_TAG:-stable} + # Only change this port if you understand the stack. + # If you change this you have to change: + # - the proxy settings (on two lines) +@@ -88,7 +95,8 @@ services: + # Background worker process handles long-running or periodic tasks + inventree-worker: + # If you wish to specify a particular InvenTree version, do so here +- image: inventree/inventree:${INVENTREE_TAG:-stable} ++ image: inventree/inventree:${INVENTREE_TAG:-stable}-custom ++ pull_policy: never + command: invoke worker + depends_on: + - inventree-server +``` + +
    + +And the following `Dockerfile` needs to be created: + +
    Dockerfile + +```dockerfile +ARG INVENTREE_TAG + +FROM inventree/inventree:${INVENTREE_TAG} as production + +# Install whatever dependency is needed here (e.g. git) +RUN apk add --no-cache git +``` + +
    + +And if additional, development packages are needed e.g. just for building a wheel for a pip package, a multi stage build can be used with the following `Dockerfile`: + +
    Dockerfile + +```dockerfile +ARG INVENTREE_TAG + +# prebuild stage - needs a lot of build dependencies +# make sure, the alpine and python version matches the version used in the inventree base image +FROM python:3.11-alpine3.18 as prebuild + +# Install whatever development dependency is needed (e.g. cups-dev, gcc, the musl-dev build tools and the pip pycups package) +RUN apk add --no-cache cups-dev gcc musl-dev && \ + pip install --user --no-cache-dir pycups + +# production image - only install the cups shared library +FROM inventree/inventree:${INVENTREE_TAG} as production + +# Install e.g. shared library later available in the final image +RUN apk add --no-cache cups-libs + +# Copy the pip wheels from the build stage in the production stage +COPY --from=prebuild /root/.local /root/.local +``` + +
    diff --git a/docs/docs/start/install.md b/docs/docs/start/install.md index 3b1bd6ed92..6591d68852 100644 --- a/docs/docs/start/install.md +++ b/docs/docs/start/install.md @@ -239,6 +239,7 @@ Run the following command to initialize the database with the required tables. cd /home/inventree/src invoke update ``` +NOTE: If you are on Debian, and get "No module named 'django', it might be that `/usr/bin/invoke` are used. Make sure that the python environment (`/home/inventree/env/bin`) is ahead in the PATH variable. ### Create Admin Account diff --git a/docs/docs/stock/owner.md b/docs/docs/stock/owner.md index e782fe4fda..bd7b2b8812 100644 --- a/docs/docs/stock/owner.md +++ b/docs/docs/stock/owner.md @@ -12,8 +12,25 @@ The stock ownership feature is disabled by default, and must be enabled via the {% include 'img.html' %} {% endwith %} +### Background +The stock item ownership function does not change or the influence the access rights that have been set +in admin panel. It just hides buttons for edit, add and delete actions. This means that the user who +should have access by ownership needs to have stock item write access set in the admin panel. By +this he also gets write access to all other items, except the item has a different owner. + +Example + +* Stock item 1111 has an owner called Daniel +* Stock item 2222 has an owner called Peter +* Stock item 3333 has no owner + +Set stock item access for Daniel and Peter to V,A,E,D in the admin panel. Now Daniel can edit +1111 but not 2222. Peter can edit 2222 but not 1111. Both can edit 3333. + + !!! warning "Existing Stock Locations and Items" - Enabling the ownership feature will automatically remove the edit permissions to all users for stock locations and items which **do not have** any owner set. Only a user with admin permissions will be able to set the owner for those locations and items. + Items with no user set can be edited by everyone who has the access rights. An owner has + to be added to every stock item in order to use the ownership control. ### Owner: Group vs User @@ -46,6 +63,12 @@ Setting the owner of stock location will automatically: * Set the owner of all children locations to the same owner. * Set the owner of all stock items at this location to the same owner. +The inherited ownership changes with stock transfer. If a stock item is transferred from a location +owned by Daniel to a location owned by Peter the owner of the stock item and the access right will +also change from Daniel to Peter. This is only valid for the inherited ownership. If a stock item +is directly owned by Peter the ownership and the access right will stay with Peter even when the item +is moved to a location owned by Daniel. + !!! info If the owner of a children location or a stock item is a subset of the specified owner (eg. a user linked to the specified group), the owner won't be updated. diff --git a/docs/docs/stock/stock.md b/docs/docs/stock/stock.md index 4ec3c249f0..a72841fc90 100644 --- a/docs/docs/stock/stock.md +++ b/docs/docs/stock/stock.md @@ -6,6 +6,18 @@ title: Stock A stock location represents a physical real-world location where *Stock Items* are stored. Locations are arranged in a cascading manner and each location may contain multiple sub-locations, or stock, or both. +### Icons + +Stock locations can be assigned custom icons (either directly or through [Stock Location Types](#stock-location-type)). When using PUI there is a custom icon picker component available that can help to select the right icon. However in CUI the icon needs to be entered manually. + +By default, the tabler icons package (with prefix: `ti`) is available. To manually select an item, search on the [tabler icons](https://tabler.io/icons) page for an icon and copy its name e.g. `bookmark`. Some icons have a filled and an outline version (if no variants are specified, it's an outline variant). Now these values can be put into the format: `::`. E.g. `ti:bookmark:outline` or `ti:bookmark:filled`. + +If there are some icons missing in the tabler icons package, users can even install their own custom icon packs through a plugin. See [`IconPackMixin`](../extend/plugins/icon.md). + +## Stock Location Type + +A stock location type represents a specific type of location (e.g. one specific size of drawer, shelf, ... or box) which can be assigned to multiple stock locations. In the first place, it is used to specify an icon and having the icon in sync for all locations that use this location type, but it also serves as a data field to quickly see what type of location this is. It is planned to add e.g. drawer dimension information to the location type to add a "find a matching, empty stock location" tool. + ## Stock Item A *Stock Item* is an actual instance of a [*Part*](../part/part.md) item. It represents a physical quantity of the *Part* in a specific location. @@ -20,7 +32,7 @@ The *Stock Item* detail view shows information regarding the particular stock it **Quantity** - How many items are in stock? -**Supplier** - If this part was purcahsed from a *Supplier*, which *Supplier* did it come from? +**Supplier** - If this part was purchased from a *Supplier*, which *Supplier* did it come from? **Supplier Part** - Link to the particular *Supplier Part*, if appropriate. diff --git a/docs/main.py b/docs/main.py index 78a4339315..b09b8b0da2 100644 --- a/docs/main.py +++ b/docs/main.py @@ -1,5 +1,6 @@ """Main entry point for the documentation build process.""" +import json import os import subprocess import textwrap @@ -7,6 +8,20 @@ import textwrap import requests import yaml +# Cached settings dict values +global GLOBAL_SETTINGS +global USER_SETTINGS + +# Read in the InvenTree settings file +here = os.path.dirname(__file__) +settings_file = os.path.join(here, 'inventree_settings.json') + +with open(settings_file, 'r') as sf: + settings = json.load(sf) + + GLOBAL_SETTINGS = settings['global'] + USER_SETTINGS = settings['user'] + def get_repo_url(raw=False): """Return the repository URL for the current project.""" @@ -54,11 +69,23 @@ def check_link(url) -> bool: return False +def get_build_enviroment() -> str: + """Returns the branch we are currently building on, based on the environment variables of the various CI platforms.""" + # Check if we are in ReadTheDocs + if os.environ.get('READTHEDOCS') == 'True': + return os.environ.get('READTHEDOCS_GIT_IDENTIFIER') + # We are in GitHub Actions + elif os.environ.get('GITHUB_ACTIONS') == 'true': + return os.environ.get('GITHUB_REF') + else: + return 'master' + + def define_env(env): """Define custom environment variables for the documentation build process.""" @env.macro - def sourcedir(dirname, branch='master'): + def sourcedir(dirname, branch=None): """Return a link to a directory within the source code repository. Arguments: @@ -70,6 +97,9 @@ def define_env(env): Raises: - FileNotFoundError: If the directory does not exist, or the generated URL is invalid """ + if branch == None: + branch = get_build_enviroment() + if dirname.startswith('/'): dirname = dirname[1:] @@ -94,7 +124,7 @@ def define_env(env): return url @env.macro - def sourcefile(filename, branch='master', raw=False): + def sourcefile(filename, branch=None, raw=False): """Return a link to a file within the source code repository. Arguments: @@ -106,6 +136,9 @@ def define_env(env): Raises: - FileNotFoundError: If the file does not exist, or the generated URL is invalid """ + if branch == None: + branch = get_build_enviroment() + if filename.startswith('/'): filename = filename[1:] @@ -201,3 +234,37 @@ def define_env(env): ) return includefile(fn, f'Template: {base}', format='html') + + @env.macro + def rendersetting(setting: dict): + """Render a provided setting object into a table row.""" + name = setting['name'] + description = setting['description'] + default = setting.get('default', None) + units = setting.get('units', None) + + return f'| {name} | {description} | {default if default is not None else ""} | {units if units is not None else ""} |' + + @env.macro + def globalsetting(key: str): + """Extract information on a particular global setting. + + Arguments: + - key: The name of the global setting to extract information for. + """ + global GLOBAL_SETTINGS + setting = GLOBAL_SETTINGS[key] + + return rendersetting(setting) + + @env.macro + def usersetting(key: str): + """Extract information on a particular user setting. + + Arguments: + - key: The name of the user setting to extract information for. + """ + global USER_SETTINGS + setting = USER_SETTINGS[key] + + return rendersetting(setting) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 14c8ddd832..ed0e673d02 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -106,6 +106,7 @@ nav: - Part Views: part/views.md - Tracking: part/trackable.md - Parameters: part/parameter.md + - Revisions: part/revision.md - Templates: part/template.md - Tests: part/test.md - Pricing: part/pricing.md @@ -202,6 +203,7 @@ nav: - Barcode Mixin: extend/plugins/barcode.md - Currency Mixin: extend/plugins/currency.md - Event Mixin: extend/plugins/event.md + - Icon Pack Mixin: extend/plugins/icon.md - Label Printing Mixin: extend/plugins/label.md - Locate Mixin: extend/plugins/locate.md - Navigation Mixin: extend/plugins/navigation.md diff --git a/docs/requirements.txt b/docs/requirements.txt index 1fe63ba3e3..e5558c570e 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,5 +1,5 @@ # 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 +# uv pip compile docs/requirements.in -o docs/requirements.txt --no-strip-extras --generate-hashes anyio==4.3.0 \ --hash=sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8 \ --hash=sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6 @@ -14,9 +14,9 @@ bracex==2.4 \ --hash=sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb \ --hash=sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418 # via wcmatch -certifi==2024.2.2 \ - --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ - --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 +certifi==2024.7.4 \ + --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ + --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 # via # httpcore # httpx @@ -134,9 +134,9 @@ essentials-openapi==1.0.9 \ --hash=sha256:1431e98ef0a442f1919fd9833385bf44d832c355fd05919dc06d43d4da0f8ef4 \ --hash=sha256:ebc46aac41c0b917a658f77caaa0ca93a6e4a4519de8a272f82c1538ccd5619f # via neoteroi-mkdocs -exceptiongroup==1.2.1 \ - --hash=sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad \ - --hash=sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16 +exceptiongroup==1.2.2 \ + --hash=sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b \ + --hash=sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc # via anyio ghp-import==2.1.0 \ --hash=sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619 \ @@ -173,9 +173,9 @@ idna==3.7 \ # anyio # httpx # requests -importlib-metadata==7.1.0 \ - --hash=sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570 \ - --hash=sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2 +importlib-metadata==8.2.0 \ + --hash=sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369 \ + --hash=sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d # via # markdown # mkdocs @@ -284,6 +284,7 @@ mkdocs==1.6.0 \ --hash=sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7 \ --hash=sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512 # via + # -r docs/requirements.in # mkdocs-autorefs # mkdocs-git-revision-date-localized-plugin # mkdocs-include-markdown-plugin @@ -300,18 +301,22 @@ 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-git-revision-date-localized-plugin==1.2.6 \ + --hash=sha256:e432942ce4ee8aa9b9f4493e993dee9d2cc08b3ea2b40a3d6b03ca0f2a4bcaa2 \ + --hash=sha256:f015cb0f3894a39b33447b18e270ae391c4e25275cac5a626e80b243784e2692 + # via -r docs/requirements.in +mkdocs-include-markdown-plugin==6.2.1 \ + --hash=sha256:46fc372886d48eec541d36138d1fe1db42afd08b976ef7c8d8d4ea6ee4d5d1e8 \ + --hash=sha256:8dfc3aee9435679b094cbdff023239e91d86cf357c40b0e99c28036449661830 + # via -r docs/requirements.in mkdocs-macros-plugin==1.0.5 \ --hash=sha256:f60e26f711f5a830ddf1e7980865bf5c0f1180db56109803cdd280073c1a050a \ --hash=sha256:fe348d75f01c911f362b6d998c57b3d85b505876dde69db924f2c512c395c328 -mkdocs-material==9.5.24 \ - --hash=sha256:02d5aaba0ee755e707c3ef6e748f9acb7b3011187c0ea766db31af8905078a34 \ - --hash=sha256:e12cd75954c535b61e716f359cf2a5056bf4514889d17161fdebd5df4b0153c6 + # via -r docs/requirements.in +mkdocs-material==9.5.31 \ + --hash=sha256:1b1f49066fdb3824c1e96d6bacd2d4375de4ac74580b47e79ff44c4d835c5fcb \ + --hash=sha256:31833ec664772669f5856f4f276bf3fdf0e642a445e64491eda459249c3a1ca8 + # via -r docs/requirements.in mkdocs-material-extensions==1.3.1 \ --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ --hash=sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31 @@ -319,10 +324,13 @@ mkdocs-material-extensions==1.3.1 \ 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 + # via -r docs/requirements.in +mkdocstrings[python]==0.25.2 \ + --hash=sha256:5cf57ad7f61e8be3111a2458b4e49c2029c9cb35525393b179f9c916ca8042dc \ + --hash=sha256:9e2cda5e2e12db8bb98d21e3410f3f27f8faab685a24b03b06ba7daa5b92abfc + # via + # -r docs/requirements.in + # mkdocstrings-python mkdocstrings-python==1.10.2 \ --hash=sha256:38a4fd41953defb458a107033440c229c7e9f98f35a24e84d888789c97da5a63 \ --hash=sha256:e8e596b37f45c09b67bec253e035fe18988af5bbbbf44e0ccd711742eed750e5 @@ -330,6 +338,7 @@ mkdocstrings-python==1.10.2 \ neoteroi-mkdocs==1.0.5 \ --hash=sha256:1f3b372dee79269157361733c0f45b3a89189077078e0e3224d829a144ef3579 \ --hash=sha256:29875ef444b08aec5619a384142e16f1b4e851465cab4e380fb2b8ae730fe046 + # via -r docs/requirements.in packaging==24.0 \ --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 @@ -432,90 +441,90 @@ 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 +regex==2024.7.24 \ + --hash=sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c \ + --hash=sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535 \ + --hash=sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24 \ + --hash=sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce \ + --hash=sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc \ + --hash=sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5 \ + --hash=sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce \ + --hash=sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53 \ + --hash=sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d \ + --hash=sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c \ + --hash=sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908 \ + --hash=sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8 \ + --hash=sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024 \ + --hash=sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281 \ + --hash=sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a \ + --hash=sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169 \ + --hash=sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364 \ + --hash=sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa \ + --hash=sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be \ + --hash=sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53 \ + --hash=sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759 \ + --hash=sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e \ + --hash=sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b \ + --hash=sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52 \ + --hash=sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610 \ + --hash=sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05 \ + --hash=sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2 \ + --hash=sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca \ + --hash=sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0 \ + --hash=sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293 \ + --hash=sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289 \ + --hash=sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e \ + --hash=sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f \ + --hash=sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c \ + --hash=sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94 \ + --hash=sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad \ + --hash=sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46 \ + --hash=sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9 \ + --hash=sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9 \ + --hash=sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee \ + --hash=sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9 \ + --hash=sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1 \ + --hash=sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9 \ + --hash=sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799 \ + --hash=sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1 \ + --hash=sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b \ + --hash=sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf \ + --hash=sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5 \ + --hash=sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2 \ + --hash=sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e \ + --hash=sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51 \ + --hash=sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506 \ + --hash=sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73 \ + --hash=sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7 \ + --hash=sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5 \ + --hash=sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57 \ + --hash=sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4 \ + --hash=sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd \ + --hash=sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b \ + --hash=sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41 \ + --hash=sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe \ + --hash=sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59 \ + --hash=sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8 \ + --hash=sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f \ + --hash=sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e \ + --hash=sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750 \ + --hash=sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1 \ + --hash=sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96 \ + --hash=sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc \ + --hash=sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440 \ + --hash=sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe \ + --hash=sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38 \ + --hash=sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950 \ + --hash=sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2 \ + --hash=sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd \ + --hash=sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce \ + --hash=sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66 \ + --hash=sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3 \ + --hash=sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86 # via mkdocs-material -requests==2.32.2 \ - --hash=sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289 \ - --hash=sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 # via mkdocs-material rich==13.7.1 \ --hash=sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222 \ @@ -539,15 +548,15 @@ 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 +typing-extensions==4.12.2 \ + --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ + --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 # via # anyio # mkdocstrings -urllib3==2.2.1 \ - --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ - --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 +urllib3==2.2.2 \ + --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ + --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 # via requests watchdog==4.0.0 \ --hash=sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257 \ @@ -584,7 +593,7 @@ 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 +zipp==3.19.2 \ + --hash=sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19 \ + --hash=sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c # via importlib-metadata diff --git a/pyproject.toml b/pyproject.toml index a20e754e99..a8c23e75d8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,11 +16,11 @@ exclude = [ src = ["src/backend/InvenTree"] # line-length = 120 -[tool.ruff.extend-per-file-ignores] +[tool.ruff.lint.extend-per-file-ignores] "__init__.py" = ["D104"] [tool.ruff.lint] -select = ["A", "B", "C4", "D", "I", "N"] +select = ["A", "B", "C4", "D", "I", "N", "F"] # Things that should be enabled in the future: # - LOG # - DJ # for Django stuff @@ -69,6 +69,11 @@ indent-style = "space" skip-magic-trailing-comma = true line-ending = "auto" +[tool.uv.pip] +python-version = "3.9" +no-strip-extras=true +generate-hashes=true + [tool.coverage.run] source = ["src/backend/InvenTree", "InvenTree"] @@ -80,3 +85,6 @@ src_paths=["src/backend/InvenTree", ] skip_glob ="*/migrations/*.py" known_django="django" sections=["FUTURE","STDLIB","DJANGO","THIRDPARTY","FIRSTPARTY","LOCALFOLDER"] + +[tool.codespell] +ignore-words-list = ["assertIn","SME","intoto"] diff --git a/readthedocs.yml b/readthedocs.yml index 003ca95426..f9a08ce2a9 100644 --- a/readthedocs.yml +++ b/readthedocs.yml @@ -17,5 +17,6 @@ build: - echo "Generating API schema file" - pip install -U invoke - invoke migrate + - invoke export-settings-definitions --filename docs/inventree_settings.json --overwrite - invoke schema --filename docs/schema.yml --ignore-warnings - python docs/extract_schema.py docs/schema.yml diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index c3c0db4af2..952ddb3ff4 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -8,7 +8,6 @@ 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 @@ -21,9 +20,7 @@ from rest_framework.views import APIView import InvenTree.version import users.models -from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.mixins import ListCreateAPI -from InvenTree.permissions import RolePermission from InvenTree.templatetags.inventree_extras import plugins_info from part.models import Part from plugin.serializers import MetadataSerializer @@ -311,8 +308,26 @@ class BulkDeleteMixin: - Speed (single API call and DB query) """ + def validate_delete(self, queryset, request) -> None: + """Perform validation right before deletion. + + Arguments: + queryset: The queryset to be deleted + request: The request object + + Returns: + None + + Raises: + ValidationError: If the deletion should not proceed + """ + pass + def filter_delete_queryset(self, queryset, request): - """Provide custom filtering for the queryset *before* it is deleted.""" + """Provide custom filtering for the queryset *before* it is deleted. + + The default implementation does nothing, just returns the queryset. + """ return queryset def delete(self, request, *args, **kwargs): @@ -371,6 +386,9 @@ class BulkDeleteMixin: if filters: queryset = queryset.filter(**filters) + # Run a final validation step (should raise an error if the deletion should not proceed) + self.validate_delete(queryset, request) + n_deleted = queryset.count() queryset.delete() @@ -383,58 +401,6 @@ class ListCreateDestroyAPIView(BulkDeleteMixin, ListCreateAPI): ... -class APIDownloadMixin: - """Mixin for enabling a LIST endpoint to be downloaded a file. - - To download the data, add the ?export= to the query string. - - The implementing class must provided a download_queryset method, - e.g. - - def download_queryset(self, queryset, export_format): - dataset = StockItemResource().export(queryset=queryset) - - filedata = dataset.export(export_format) - - filename = 'InvenTree_Stocktake_{date}.{fmt}'.format( - date=datetime.now().strftime("%d-%b-%Y"), - fmt=export_format - ) - - return DownloadFile(filedata, filename) - """ - - def get(self, request, *args, **kwargs): - """Generic handler for a download request.""" - export_format = request.query_params.get('export', None) - - if export_format and export_format in ['csv', 'tsv', 'xls', 'xlsx']: - queryset = self.filter_queryset(self.get_queryset()) - return self.download_queryset(queryset, export_format) - # Default to the parent class implementation - return super().get(request, *args, **kwargs) - - def download_queryset(self, queryset, export_format): - """This function must be implemented to provide a downloadFile request.""" - raise NotImplementedError('download_queryset method not implemented!') - - -class AttachmentMixin: - """Mixin for creating attachment objects, and ensuring the user information is saved correctly.""" - - permission_classes = [permissions.IsAuthenticated, RolePermission] - - filter_backends = SEARCH_ORDER_FILTER - - search_fields = ['attachment', 'comment', 'link'] - - def perform_create(self, serializer): - """Save the user information when a file is uploaded.""" - attachment = serializer.save() - attachment.user = self.request.user - attachment.save() - - class APISearchViewSerializer(serializers.Serializer): """Serializer for the APISearchView.""" diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index cd371ed20a..0f0a6a6bde 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,115 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 206 +INVENTREE_API_VERSION = 236 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" + INVENTREE_API_TEXT = """ + +v236 - 2024-08-10 : https://github.com/inventree/InvenTree/pull/7844 + - Adds "supplier_name" to the PurchaseOrder API serializer + +v235 - 2024-08-08 : https://github.com/inventree/InvenTree/pull/7837 + - Adds "on_order" quantity to SalesOrderLineItem serializer + - Adds "building" quantity to SalesOrderLineItem serializer + +v234 - 2024-08-08 : https://github.com/inventree/InvenTree/pull/7829 + - Fixes bug in the plugin metadata endpoint + +v233 - 2024-08-04 : https://github.com/inventree/InvenTree/pull/7807 + - Adds new endpoints for managing state of build orders + - Adds new endpoints for managing state of purchase orders + - Adds new endpoints for managing state of sales orders + - Adds new endpoints for managing state of return orders + +v232 - 2024-08-03 : https://github.com/inventree/InvenTree/pull/7793 + - Allow ordering of SalesOrderShipment API by 'shipment_date' and 'delivery_date' + +v231 - 2024-08-03 : https://github.com/inventree/InvenTree/pull/7794 + - Optimize BuildItem and BuildLine serializers to improve API efficiency + +v230 - 2024-05-05 : https://github.com/inventree/InvenTree/pull/7164 + - Adds test statistics endpoint + +v229 - 2024-07-31 : https://github.com/inventree/InvenTree/pull/7775 + - Add extra exportable fields to the BomItem serializer + +v228 - 2024-07-18 : https://github.com/inventree/InvenTree/pull/7684 + - Adds "icon" field to the PartCategory.path and StockLocation.path API + - Adds icon packages API endpoint + +v227 - 2024-07-19 : https://github.com/inventree/InvenTree/pull/7693/ + - Adds endpoints to list and revoke the tokens issued to the current user + +v226 - 2024-07-15 : https://github.com/inventree/InvenTree/pull/7648 + - Adds barcode generation API endpoint + +v225 - 2024-07-17 : https://github.com/inventree/InvenTree/pull/7671 + - Adds "filters" field to DataImportSession API + +v224 - 2024-07-14 : https://github.com/inventree/InvenTree/pull/7667 + - Add notes field to ManufacturerPart and SupplierPart API endpoints + +v223 - 2024-07-14 : https://github.com/inventree/InvenTree/pull/7649 + - Allow adjustment of "packaging" field when receiving items against a purchase order + +v222 - 2024-07-14 : https://github.com/inventree/InvenTree/pull/7635 + - Adjust the BomItem API endpoint to improve data import process + +v221 - 2024-07-13 : https://github.com/inventree/InvenTree/pull/7636 + - Adds missing fields from StockItemBriefSerializer + - Adds missing fields from PartBriefSerializer + - Adds extra exportable fields to BuildItemSerializer + +v220 - 2024-07-11 : https://github.com/inventree/InvenTree/pull/7585 + - Adds "revision_of" field to Part serializer + - Adds new API filters for "revision" status + +v219 - 2024-07-11 : https://github.com/inventree/InvenTree/pull/7611 + - Adds new fields to the BuildItem API endpoints + - Adds new ordering / filtering options to the BuildItem API endpoints + +v218 - 2024-07-11 : https://github.com/inventree/InvenTree/pull/7619 + - Adds "can_build" field to the BomItem API + +v217 - 2024-07-09 : https://github.com/inventree/InvenTree/pull/7599 + - Fixes bug in "project_code" field for order API endpoints + +v216 - 2024-07-08 : https://github.com/inventree/InvenTree/pull/7595 + - Moves API endpoint for contenttype lookup by model name + +v215 - 2024-07-09 : https://github.com/inventree/InvenTree/pull/7591 + - Adds additional fields to the BuildLine serializer + +v214 - 2024-07-08 : https://github.com/inventree/InvenTree/pull/7587 + - Adds "default_location_detail" field to the Part API + +v213 - 2024-07-06 : https://github.com/inventree/InvenTree/pull/7527 + - Adds 'locked' field to Part API + +v212 - 2024-07-06 : https://github.com/inventree/InvenTree/pull/7562 + - Makes API generation more robust (no functional changes) + +v211 - 2024-06-26 : https://github.com/inventree/InvenTree/pull/6911 + - Adds API endpoints for managing data import and export + +v210 - 2024-06-26 : https://github.com/inventree/InvenTree/pull/7518 + - Adds translateable text to User API fields + +v209 - 2024-06-26 : https://github.com/inventree/InvenTree/pull/7514 + - Add "top_level" filter to PartCategory API endpoint + - Add "top_level" filter to StockLocation API endpoint + +v208 - 2024-06-19 : https://github.com/inventree/InvenTree/pull/7479 + - Adds documentation for the user roles API endpoint (no functional changes) + +v207 - 2024-06-09 : https://github.com/inventree/InvenTree/pull/7420 + - Moves all "Attachment" models into a single table + - All "Attachment" operations are now performed at /api/attachment/ + - Add permissions information to /api/user/roles/ endpoint + v206 - 2024-06-08 : https://github.com/inventree/InvenTree/pull/7417 - Adds "choices" field to the PartTestTemplate model @@ -111,7 +215,7 @@ v178 - 2024-02-29 : https://github.com/inventree/InvenTree/pull/6604 - Adds "external_stock" field to the Part API endpoint - Adds "external_stock" field to the BomItem API endpoint - Adds "external_stock" field to the BuildLine API endpoint - - Stock quantites represented in the BuildLine API endpoint are now filtered by Build.source_location + - Stock quantities represented in the BuildLine API endpoint are now filtered by Build.source_location v177 - 2024-02-27 : https://github.com/inventree/InvenTree/pull/6581 - Adds "subcategoies" count to PartCategoryTree serializer diff --git a/src/backend/InvenTree/InvenTree/apps.py b/src/backend/InvenTree/InvenTree/apps.py index 85d42bf18d..accd545980 100644 --- a/src/backend/InvenTree/InvenTree/apps.py +++ b/src/backend/InvenTree/InvenTree/apps.py @@ -11,6 +11,8 @@ from django.core.exceptions import AppRegistryNotReady from django.db import transaction from django.db.utils import IntegrityError, OperationalError +from allauth.socialaccount.signals import social_account_updated + import InvenTree.conversion import InvenTree.ready import InvenTree.tasks @@ -70,6 +72,12 @@ class InvenTreeConfig(AppConfig): self.add_user_on_startup() self.add_user_from_file() + # register event receiver and connect signal for SSO group sync. The connected signal is + # used for account updates whereas the receiver is used for the initial account creation. + from InvenTree import sso + + social_account_updated.connect(sso.ensure_sso_groups) + def remove_obsolete_tasks(self): """Delete any obsolete scheduled tasks in the database.""" obsolete = [ diff --git a/src/backend/InvenTree/InvenTree/conversion.py b/src/backend/InvenTree/InvenTree/conversion.py index b2d15c16df..61f1850899 100644 --- a/src/backend/InvenTree/InvenTree/conversion.py +++ b/src/backend/InvenTree/InvenTree/conversion.py @@ -153,7 +153,7 @@ def convert_physical_value(value: str, unit: str = None, strip_units=True): if unit: try: valid = unit in ureg - except Exception as exc: + except Exception: valid = False if not valid: @@ -196,7 +196,7 @@ def convert_physical_value(value: str, unit: str = None, strip_units=True): try: value = convert_value(attempt, unit) break - except Exception as exc: + except Exception: value = None if value is None: diff --git a/src/backend/InvenTree/InvenTree/exceptions.py b/src/backend/InvenTree/InvenTree/exceptions.py index f6fca172a3..12328994e7 100644 --- a/src/backend/InvenTree/InvenTree/exceptions.py +++ b/src/backend/InvenTree/InvenTree/exceptions.py @@ -9,7 +9,6 @@ import traceback from django.conf import settings from django.core.exceptions import ValidationError as DjangoValidationError -from django.db.utils import IntegrityError, OperationalError from django.utils.translation import gettext_lazy as _ import rest_framework.views as drfviews diff --git a/src/backend/InvenTree/InvenTree/exchange.py b/src/backend/InvenTree/InvenTree/exchange.py index 2b118b696e..ab02883058 100644 --- a/src/backend/InvenTree/InvenTree/exchange.py +++ b/src/backend/InvenTree/InvenTree/exchange.py @@ -8,6 +8,7 @@ from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend from djmoney.contrib.exchange.models import ExchangeBackend, Rate from common.currency import currency_code_default, currency_codes +from common.settings import get_global_setting logger = logging.getLogger('inventree') @@ -22,14 +23,13 @@ class InvenTreeExchange(SimpleExchangeBackend): def get_rates(self, **kwargs) -> dict: """Set the requested currency codes and get rates.""" - from common.models import InvenTreeSetting from plugin import registry base_currency = kwargs.get('base_currency', currency_code_default()) symbols = kwargs.get('symbols', currency_codes()) # Find the selected exchange rate plugin - slug = InvenTreeSetting.get_setting('CURRENCY_UPDATE_PLUGIN', '', create=False) + slug = get_global_setting('CURRENCY_UPDATE_PLUGIN', create=False) if slug: plugin = registry.get_plugin(slug) diff --git a/src/backend/InvenTree/InvenTree/fields.py b/src/backend/InvenTree/InvenTree/fields.py index b1b276abb1..01efe65ae1 100644 --- a/src/backend/InvenTree/InvenTree/fields.py +++ b/src/backend/InvenTree/InvenTree/fields.py @@ -33,7 +33,7 @@ class InvenTreeRestURLField(RestURLField): def run_validation(self, data=empty): """Override default validation behaviour for this field type.""" - strict_urls = get_global_setting('INVENTREE_STRICT_URLS', True, cache=False) + strict_urls = get_global_setting('INVENTREE_STRICT_URLS', cache=False) if not strict_urls and data is not empty and '://' not in data: # Validate as if there were a schema provided diff --git a/src/backend/InvenTree/InvenTree/forms.py b/src/backend/InvenTree/InvenTree/forms.py index ff4babe3bf..0997f1a38b 100644 --- a/src/backend/InvenTree/InvenTree/forms.py +++ b/src/backend/InvenTree/InvenTree/forms.py @@ -15,6 +15,7 @@ from allauth.account.forms import LoginForm, SignupForm, set_form_field_order from allauth.core.exceptions import ImmediateHttpResponse from allauth.socialaccount.adapter import DefaultSocialAccountAdapter from allauth_2fa.adapter import OTPAdapter +from allauth_2fa.forms import TOTPDeviceForm from allauth_2fa.utils import user_has_valid_totp_device from crispy_forms.bootstrap import AppendedText, PrependedAppendedText, PrependedText from crispy_forms.helper import FormHelper @@ -190,7 +191,7 @@ class CustomSignupForm(SignupForm): # check for two password fields if not get_global_setting('LOGIN_SIGNUP_PWD_TWICE'): - self.fields.pop('password2') + self.fields.pop('password2', None) # reorder fields set_form_field_order( @@ -211,6 +212,16 @@ class CustomSignupForm(SignupForm): return cleaned_data +class CustomTOTPDeviceForm(TOTPDeviceForm): + """Ensure that db registration is enabled.""" + + def __init__(self, user, metadata=None, **kwargs): + """Override to check if registration is open.""" + if not settings.MFA_ENABLED: + raise forms.ValidationError(_('MFA Registration is disabled.')) + super().__init__(user, metadata, **kwargs) + + def registration_enabled(): """Determine whether user registration is enabled.""" if get_global_setting('LOGIN_ENABLE_REG') or InvenTree.sso.registration_enabled(): @@ -269,7 +280,9 @@ class RegistratonMixin: # Check if a default group is set in settings start_group = get_global_setting('SIGNUP_GROUP') - if start_group: + if ( + start_group and user.groups.count() == 0 + ): # check that no group has been added through SSO group sync try: group = Group.objects.get(id=start_group) user.groups.add(group) diff --git a/src/backend/InvenTree/InvenTree/helpers.py b/src/backend/InvenTree/InvenTree/helpers.py index a3ca2ffaf5..63a1c43f8f 100644 --- a/src/backend/InvenTree/InvenTree/helpers.py +++ b/src/backend/InvenTree/InvenTree/helpers.py @@ -3,7 +3,6 @@ import datetime import hashlib import io -import json import logging import os import os.path @@ -27,7 +26,6 @@ from bleach import clean from djmoney.money import Money from PIL import Image -import InvenTree.version from common.currency import currency_code_default from .settings import MEDIA_URL, STATIC_URL @@ -396,41 +394,9 @@ def WrapWithQuotes(text, quote='"'): return text -def MakeBarcode(cls_name, object_pk: int, object_data=None, **kwargs): - """Generate a string for a barcode. Adds some global InvenTree parameters. - - Args: - cls_name: string describing the object type e.g. 'StockItem' - object_pk (int): ID (Primary Key) of the object in the database - object_data: Python dict object containing extra data which will be rendered to string (must only contain stringable values) - - Returns: - json string of the supplied data plus some other data - """ - if object_data is None: - object_data = {} - - brief = kwargs.get('brief', True) - - data = {} - - if brief: - data[cls_name] = object_pk - else: - data['tool'] = 'InvenTree' - data['version'] = InvenTree.version.inventreeVersion() - data['instance'] = InvenTree.version.inventreeInstanceName() - - # Ensure PK is included - object_data['id'] = object_pk - data[cls_name] = object_data - - return str(json.dumps(data, sort_keys=True)) - - def GetExportFormats(): - """Return a list of allowable file formats for exporting data.""" - return ['csv', 'tsv', 'xls', 'xlsx', 'json', 'yaml'] + """Return a list of allowable file formats for importing or exporting tabular data.""" + return ['csv', 'xlsx', 'tsv', 'json'] def DownloadFile( diff --git a/src/backend/InvenTree/InvenTree/helpers_mixin.py b/src/backend/InvenTree/InvenTree/helpers_mixin.py index 59c88785ed..d3f5c06d06 100644 --- a/src/backend/InvenTree/InvenTree/helpers_mixin.py +++ b/src/backend/InvenTree/InvenTree/helpers_mixin.py @@ -2,8 +2,10 @@ import inspect from pathlib import Path +from typing import Any, Callable from django.conf import settings +from django.core.cache import cache from plugin import registry as plg_registry @@ -104,3 +106,37 @@ class ClassProviderMixin: except ValueError: # Path(...).relative_to throws an ValueError if its not relative to the InvenTree source base dir return False + + +def get_shared_class_instance_state_mixin(get_state_key: Callable[[type], str]): + """Get a mixin class that provides shared state for classes across the main application and worker. + + Arguments: + get_state_key: A function that returns the key for the shared state when given a class instance. + """ + + class SharedClassStateMixinClass: + """Mixin to provide shared state for classes across the main application and worker.""" + + def set_shared_state(self, key: str, value: Any): + """Set a shared state value for this machine. + + Arguments: + key: The key for the shared state + value: The value to set + """ + cache.set(self._get_key(key), value, timeout=None) + + def get_shared_state(self, key: str, default=None): + """Get a shared state value for this machine. + + Arguments: + key: The key for the shared state + """ + return cache.get(self._get_key(key)) or default + + def _get_key(self, key: str): + """Get the key for this class instance.""" + return f'{get_state_key(self)}:{key}' + + return SharedClassStateMixinClass diff --git a/src/backend/InvenTree/InvenTree/helpers_model.py b/src/backend/InvenTree/InvenTree/helpers_model.py index 3fb73c852d..810c44c633 100644 --- a/src/backend/InvenTree/InvenTree/helpers_model.py +++ b/src/backend/InvenTree/InvenTree/helpers_model.py @@ -15,9 +15,6 @@ from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money from PIL import Image -import InvenTree -import InvenTree.helpers_model -import InvenTree.version from common.notifications import ( InvenTreeNotificationBodies, NotificationBody, @@ -39,8 +36,6 @@ def get_base_url(request=None): 3. If settings.SITE_URL is set (e.g. in the Django settings), use that 4. If the InvenTree setting INVENTREE_BASE_URL is set, use that """ - import common.models - # Check if a request is provided if request: return request.build_absolute_uri('/') @@ -107,8 +102,6 @@ def download_image_from_url(remote_url, timeout=2.5): ValueError: Server responded with invalid 'Content-Length' value TypeError: Response is not a valid image """ - import common.models - # Check that the provided URL at least looks valid validator = URLValidator() validator(remote_url) @@ -206,8 +199,6 @@ def render_currency( max_decimal_places: The maximum number of decimal places to render to. If unspecified, uses the PRICING_DECIMAL_PLACES setting. include_symbol: If True, include the currency symbol in the output """ - import common.models - if money in [None, '']: return '-' @@ -252,7 +243,7 @@ def render_currency( def getModelsWithMixin(mixin_class) -> list: - """Return a list of models that inherit from the given mixin class. + """Return a list of database models that inherit from the given mixin class. Args: mixin_class: The mixin class to search for @@ -331,9 +322,7 @@ def notify_users( 'instance': instance, 'name': content.name.format(**content_context), 'message': content.message.format(**content_context), - 'link': InvenTree.helpers_model.construct_absolute_url( - instance.get_absolute_url() - ), + 'link': construct_absolute_url(instance.get_absolute_url()), 'template': {'subject': content.name.format(**content_context)}, } diff --git a/src/backend/InvenTree/InvenTree/locales.py b/src/backend/InvenTree/InvenTree/locales.py index 900ffa6343..62e3a8bd9d 100644 --- a/src/backend/InvenTree/InvenTree/locales.py +++ b/src/backend/InvenTree/InvenTree/locales.py @@ -15,6 +15,7 @@ Additionally, update the following files with the new locale code: from django.utils.translation import gettext_lazy as _ LOCALES = [ + ('ar', _('Arabic')), ('bg', _('Bulgarian')), ('cs', _('Czech')), ('da', _('Danish')), @@ -23,6 +24,7 @@ LOCALES = [ ('en', _('English')), ('es', _('Spanish')), ('es-mx', _('Spanish (Mexican)')), + ('et', _('Estonian')), ('fa', _('Farsi / Persian')), ('fi', _('Finnish')), ('fr', _('French')), diff --git a/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py b/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py new file mode 100644 index 0000000000..8587e936d0 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py @@ -0,0 +1,53 @@ +"""Custom management command to export settings definitions. + +This is used to generate a JSON file which contains all of the settings, +so that they can be introspected by the InvenTree documentation system. + +This in turn allows settings to be documented in the InvenTree documentation, +without having to manually duplicate the information in multiple places. +""" + +import json + +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + """Extract settings information, and export to a JSON file.""" + + def add_arguments(self, parser): + """Add custom arguments for this command.""" + parser.add_argument( + 'filename', type=str, help='Output filename for settings definitions' + ) + + def handle(self, *args, **kwargs): + """Export settings information to a JSON file.""" + from common.models import InvenTreeSetting, InvenTreeUserSetting + + settings = {'global': {}, 'user': {}} + + # Global settings + for key, setting in InvenTreeSetting.SETTINGS.items(): + settings['global'][key] = { + 'name': str(setting['name']), + 'description': str(setting['description']), + 'default': str(InvenTreeSetting.get_setting_default(key)), + 'units': str(setting.get('units', '')), + } + + # User settings + for key, setting in InvenTreeUserSetting.SETTINGS.items(): + settings['user'][key] = { + 'name': str(setting['name']), + 'description': str(setting['description']), + 'default': str(InvenTreeUserSetting.get_setting_default(key)), + 'units': str(setting.get('units', '')), + } + + filename = kwargs.get('filename', 'inventree_settings.json') + + with open(filename, 'w') as f: + json.dump(settings, f, indent=4) + + print(f"Exported InvenTree settings definitions to '{filename}'") diff --git a/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py b/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py new file mode 100644 index 0000000000..c4e1305686 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py @@ -0,0 +1,192 @@ +"""Custom management command to migrate the old FontAwesome icons.""" + +import json + +from django.core.exceptions import ValidationError +from django.core.management.base import BaseCommand, CommandError +from django.db import models + +from common.icons import validate_icon +from part.models import PartCategory +from stock.models import StockLocation, StockLocationType + + +class Command(BaseCommand): + """Generate an icon map from the FontAwesome library to the new icon library.""" + + help = """Helper command to migrate the old FontAwesome icons to the new icon library.""" + + def add_arguments(self, parser): + """Add the arguments.""" + parser.add_argument( + '--output-file', + type=str, + help='Path to file to write generated icon map to', + ) + parser.add_argument( + '--input-file', type=str, help='Path to file to read icon map from' + ) + parser.add_argument( + '--include-items', + default=False, + action='store_true', + help='Include referenced inventree items in the output icon map (optional)', + ) + parser.add_argument( + '--import-now', + default=False, + action='store_true', + help='CAUTION: If this flag is set, the icon map will be imported and the database will be touched', + ) + + def handle(self, *args, **kwargs): + """Generate an icon map from the FontAwesome library to the new icon library.""" + # Check for invalid combinations of arguments + if kwargs['output_file'] and kwargs['input_file']: + raise CommandError('Cannot specify both --input-file and --output-file') + + if not kwargs['output_file'] and not kwargs['input_file']: + raise CommandError('Must specify either --input-file or --output-file') + + if kwargs['include_items'] and not kwargs['output_file']: + raise CommandError( + '--include-items can only be used with an --output-file specified' + ) + + if kwargs['output_file'] and kwargs['import_now']: + raise CommandError( + '--import-now can only be used with an --input-file specified' + ) + + ICON_MODELS = [ + (StockLocation, 'custom_icon'), + (StockLocationType, 'icon'), + (PartCategory, '_icon'), + ] + + def get_model_items_with_icons(model: models.Model, icon_field: str): + """Return a list of models with icon fields.""" + return model.objects.exclude(**{f'{icon_field}__isnull': True}).exclude(**{ + f'{icon_field}__exact': '' + }) + + # Generate output icon map file + if kwargs['output_file']: + icons = {} + + for model, icon_name in ICON_MODELS: + self.stdout.write( + f'Processing model {model.__name__} with icon field {icon_name}' + ) + + items = get_model_items_with_icons(model, icon_name) + + for item in items: + icon = getattr(item, icon_name) + + try: + validate_icon(icon) + continue # Skip if the icon is already valid + except ValidationError: + pass + + if icon not in icons: + icons[icon] = { + **({'items': []} if kwargs['include_items'] else {}), + 'new_icon': '', + } + + if kwargs['include_items']: + icons[icon]['items'].append({ + 'model': model.__name__.lower(), + 'id': item.id, # type: ignore + }) + + self.stdout.write(f'Writing icon map for {len(icons.keys())} icons') + with open(kwargs['output_file'], 'w') as f: + json.dump(icons, f, indent=2) + + self.stdout.write(f'Icon map written to {kwargs["output_file"]}') + + # Import icon map file + if kwargs['input_file']: + with open(kwargs['input_file'], 'r') as f: + icons = json.load(f) + + self.stdout.write(f'Loaded icon map for {len(icons.keys())} icons') + + self.stdout.write('Verifying icon map') + has_errors = False + + # Verify that all new icons are valid icons + for old_icon, data in icons.items(): + try: + validate_icon(data.get('new_icon', '')) + except ValidationError: + self.stdout.write( + f'[ERR] Invalid icon: "{old_icon}" -> "{data.get("new_icon", "")}' + ) + has_errors = True + + # Verify that all required items are provided in the icon map + for model, icon_name in ICON_MODELS: + self.stdout.write( + f'Processing model {model.__name__} with icon field {icon_name}' + ) + items = get_model_items_with_icons(model, icon_name) + + for item in items: + icon = getattr(item, icon_name) + + try: + validate_icon(icon) + continue # Skip if the icon is already valid + except ValidationError: + pass + + if icon not in icons: + self.stdout.write( + f' [ERR] Icon "{icon}" not found in icon map' + ) + has_errors = True + + # If there are errors, stop here + if has_errors: + self.stdout.write( + '[ERR] Icon map has errors, please fix them before continuing with importing' + ) + return + + # Import the icon map into the database if the flag is set + if kwargs['import_now']: + self.stdout.write('Start importing icons and updating database...') + cnt = 0 + + for model, icon_name in ICON_MODELS: + self.stdout.write( + f'Processing model {model.__name__} with icon field {icon_name}' + ) + items = get_model_items_with_icons(model, icon_name) + + for item in items: + icon = getattr(item, icon_name) + + try: + validate_icon(icon) + continue # Skip if the icon is already valid + except ValidationError: + pass + + setattr(item, icon_name, icons[icon]['new_icon']) + cnt += 1 + item.save() + + self.stdout.write( + f'Icon map successfully imported - changed {cnt} items' + ) + self.stdout.write('Icons are now migrated') + else: + self.stdout.write('Icon map is valid and ready to be imported') + self.stdout.write( + 'Run the command with --import-now to import the icon map and update the database' + ) diff --git a/src/backend/InvenTree/InvenTree/metadata.py b/src/backend/InvenTree/InvenTree/metadata.py index 19404f46b2..7805d73c0a 100644 --- a/src/backend/InvenTree/InvenTree/metadata.py +++ b/src/backend/InvenTree/InvenTree/metadata.py @@ -115,9 +115,14 @@ class InvenTreeMetadata(SimpleMetadata): return metadata - def override_value(self, field_name, field_value, model_value): + def override_value(self, field_name: str, field_key: str, field_value, model_value): """Override a value on the serializer with a matching value for the model. + Often, the serializer field will point to an underlying model field, + which contains extra information (which is translated already). + + Rather than duplicating this information in the serializer, we can extract it from the model. + This is used to override the serializer values with model values, if (and *only* if) the model value should take precedence. @@ -125,17 +130,28 @@ class InvenTreeMetadata(SimpleMetadata): - 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) + + Arguments: + - field_name: The name of the field + - field_key: The property key to override + - field_value: The value of the field (if available) + - model_value: The equivalent value of the model (if available) """ - if model_value and not field_value: + if field_value is None and model_value is not None: return model_value - if field_value and not model_value: + if model_value is None and field_value is not None: return field_value + # Callable values will be evaluated later 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: + if callable(field_value) and not callable(model_value): + return field_value + + # Prioritize translated text over raw string values + if type(field_value) is str and type(model_value) is not str: return model_value return field_value @@ -144,6 +160,8 @@ class InvenTreeMetadata(SimpleMetadata): """Override get_serializer_info so that we can add 'default' values to any fields whose Meta.model specifies a default value.""" self.serializer = serializer + request = getattr(self, 'request', None) + serializer_info = super().get_serializer_info(serializer) # Look for any dynamic fields which were not available when the serializer was instantiated @@ -153,12 +171,19 @@ class InvenTreeMetadata(SimpleMetadata): # Already know about this one continue - if hasattr(serializer, field_name): - field = getattr(serializer, field_name) + if field := getattr(serializer, field_name, None): serializer_info[field_name] = self.get_field_info(field) model_class = None + # Extract read_only_fields and write_only_fields from the Meta class (if available) + if meta := getattr(serializer, 'Meta', None): + read_only_fields = getattr(meta, 'read_only_fields', []) + write_only_fields = getattr(meta, 'write_only_fields', []) + else: + read_only_fields = [] + write_only_fields = [] + # Attributes to copy extra attributes from the model to the field (if they don't exist) # Note that the attributes may be named differently on the underlying model! extra_attributes = { @@ -172,16 +197,20 @@ class InvenTreeMetadata(SimpleMetadata): model_fields = model_meta.get_field_info(model_class) - model_default_func = getattr(model_class, 'api_defaults', None) - - if model_default_func: - model_default_values = model_class.api_defaults(self.request) + if model_default_func := getattr(model_class, 'api_defaults', None): + model_default_values = model_default_func(request=request) or {} else: model_default_values = {} # Iterate through simple fields for name, field in model_fields.fields.items(): if name in serializer_info.keys(): + if name in read_only_fields: + serializer_info[name]['read_only'] = True + + if name in write_only_fields: + serializer_info[name]['write_only'] = True + if field.has_default(): default = field.default @@ -197,10 +226,12 @@ class InvenTreeMetadata(SimpleMetadata): serializer_info[name]['default'] = model_default_values[name] for field_key, model_key in extra_attributes.items(): - field_value = serializer_info[name].get(field_key, None) + field_value = getattr(serializer.fields[name], field_key, None) model_value = getattr(field, model_key, None) - if value := self.override_value(name, field_value, model_value): + if value := self.override_value( + name, field_key, field_value, model_value + ): serializer_info[name][field_key] = value # Iterate through relations @@ -213,6 +244,12 @@ class InvenTreeMetadata(SimpleMetadata): # Ignore reverse relations continue + if name in read_only_fields: + serializer_info[name]['read_only'] = True + + if name in write_only_fields: + serializer_info[name]['write_only'] = True + # Extract and provide the "limit_choices_to" filters # This is used to automatically filter AJAX requests serializer_info[name]['filters'] = ( @@ -220,10 +257,12 @@ class InvenTreeMetadata(SimpleMetadata): ) for field_key, model_key in extra_attributes.items(): - field_value = serializer_info[name].get(field_key, None) + field_value = getattr(serializer.fields[name], field_key, None) model_value = getattr(relation.model_field, model_key, None) - if value := self.override_value(name, field_value, model_value): + if value := self.override_value( + name, field_key, field_value, model_value + ): serializer_info[name][field_key] = value if name in model_default_values: @@ -241,7 +280,8 @@ class InvenTreeMetadata(SimpleMetadata): if instance is None and model_class is not None: # Attempt to find the instance based on kwargs lookup - kwargs = getattr(self.view, 'kwargs', None) + view = getattr(self, 'view', None) + kwargs = getattr(view, 'kwargs', None) if view else None if kwargs: pk = None @@ -298,8 +338,10 @@ class InvenTreeMetadata(SimpleMetadata): # Force non-nullable fields to read as "required" # (even if there is a default value!) - if not field.allow_null and not ( - hasattr(field, 'allow_blank') and field.allow_blank + if ( + 'required' not in field_info + and not field.allow_null + and not (hasattr(field, 'allow_blank') and field.allow_blank) ): field_info['required'] = True @@ -326,8 +368,11 @@ class InvenTreeMetadata(SimpleMetadata): field_info['api_url'] = '/api/user/' elif field_info['model'] == 'contenttype': field_info['api_url'] = '/api/contenttype/' - else: + elif hasattr(model, 'get_api_url'): field_info['api_url'] = model.get_api_url() + else: + logger.warning("'get_api_url' method not defined for %s", model) + field_info['api_url'] = getattr(model, 'api_url', None) # Handle custom 'primary key' field field_info['pk_field'] = getattr(field, 'pk_field', 'pk') or 'pk' diff --git a/src/backend/InvenTree/InvenTree/middleware.py b/src/backend/InvenTree/InvenTree/middleware.py index d5463af22e..5790c8c9b9 100644 --- a/src/backend/InvenTree/InvenTree/middleware.py +++ b/src/backend/InvenTree/InvenTree/middleware.py @@ -12,6 +12,7 @@ from django.urls import Resolver404, include, path, resolve, reverse_lazy from allauth_2fa.middleware import AllauthTwoFactorMiddleware, BaseRequire2FAMiddleware from error_report.middleware import ExceptionProcessor +from common.settings import get_global_setting from InvenTree.urls import frontendpatterns from users.models import ApiToken @@ -153,11 +154,9 @@ class Check2FAMiddleware(BaseRequire2FAMiddleware): def require_2fa(self, request): """Use setting to check if MFA should be enforced for frontend page.""" - from common.models import InvenTreeSetting - try: if url_matcher.resolve(request.path[1:]): - return InvenTreeSetting.get_setting('LOGIN_ENFORCE_MFA') + return get_global_setting('LOGIN_ENFORCE_MFA') except Resolver404: pass return False diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index 0e2b4ca9e9..7430ee5c9f 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -1,13 +1,9 @@ """Generic models which provide extra functionality over base Django model types.""" import logging -import os from datetime import datetime -from io import BytesIO -from django.conf import settings from django.contrib.auth import get_user_model -from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError from django.db import models @@ -20,11 +16,11 @@ from error_report.models import Error from mptt.exceptions import InvalidMove from mptt.models import MPTTModel, TreeForeignKey +import common.settings import InvenTree.fields import InvenTree.format import InvenTree.helpers import InvenTree.helpers_model -from InvenTree.sanitizer import sanitize_svg logger = logging.getLogger('inventree') @@ -97,7 +93,7 @@ class PluginValidationMixin(DiffMixin): return except ValidationError as exc: raise exc - except Exception as exc: + except Exception: # Log the exception to the database import InvenTree.exceptions @@ -218,12 +214,15 @@ class MetadataMixin(models.Model): self.save() -class DataImportMixin(object): +class DataImportMixin: """Model mixin class which provides support for 'data import' functionality. Models which implement this mixin should provide information on the fields available for import """ + # TODO: This mixin should be removed after https://github.com/inventree/InvenTree/pull/6911 is implemented + # TODO: This approach to data import functionality is *outdated* + # Define a map of fields available for import IMPORT_FIELDS = {} @@ -304,10 +303,7 @@ class ReferenceIndexingMixin(models.Model): if cls.REFERENCE_PATTERN_SETTING is None: return '' - # import at function level to prevent cyclic imports - from common.models import InvenTreeSetting - - return InvenTreeSetting.get_setting( + return common.settings.get_global_setting( cls.REFERENCE_PATTERN_SETTING, create=False ).strip() @@ -503,207 +499,71 @@ class InvenTreeMetadataModel(MetadataMixin, InvenTreeModel): abstract = True -def rename_attachment(instance, filename): - """Function for renaming an attachment file. The subdirectory for the uploaded file is determined by the implementing class. - - Args: - instance: Instance of a PartAttachment object - filename: name of uploaded file - - Returns: - path to store file, format: '//filename' - """ - # Construct a path to store a file attachment for a given model type - return os.path.join(instance.getSubdir(), filename) - - -class InvenTreeAttachment(InvenTreeModel): +class InvenTreeAttachmentMixin: """Provides an abstracted class for managing file attachments. - An attachment can be either an uploaded file, or an external URL + Links the implementing model to the common.models.Attachment table, + and provides the following methods: - Attributes: - attachment: Upload file - link: External URL - comment: String descriptor for the attachment - user: User associated with file upload - upload_date: Date the file was uploaded + - attachments: Return a queryset containing all attachments for this model """ - class Meta: - """Metaclass options. Abstract ensures no database table is created.""" + def delete(self): + """Handle the deletion of a model instance. - abstract = True - - def getSubdir(self): - """Return the subdirectory under which attachments should be stored. - - Note: Re-implement this for each subclass of InvenTreeAttachment + Before deleting the model instance, delete any associated attachments. """ - return 'attachments' - - def save(self, *args, **kwargs): - """Provide better validation error.""" - # Either 'attachment' or 'link' must be specified! - if not self.attachment and not self.link: - raise ValidationError({ - 'attachment': _('Missing file'), - 'link': _('Missing external link'), - }) - - if self.attachment and self.attachment.name.lower().endswith('.svg'): - self.attachment.file.file = self.clean_svg(self.attachment) - - super().save(*args, **kwargs) - - def clean_svg(self, field): - """Sanitize SVG file before saving.""" - cleaned = sanitize_svg(field.file.read()) - return BytesIO(bytes(cleaned, 'utf8')) - - def __str__(self): - """Human name for attachment.""" - if self.attachment is not None: - return os.path.basename(self.attachment.name) - return str(self.link) - - attachment = models.FileField( - upload_to=rename_attachment, - verbose_name=_('Attachment'), - help_text=_('Select file to attach'), - blank=True, - null=True, - ) - - link = InvenTree.fields.InvenTreeURLField( - blank=True, - null=True, - verbose_name=_('Link'), - help_text=_('Link to external URL'), - ) - - comment = models.CharField( - blank=True, - max_length=100, - verbose_name=_('Comment'), - help_text=_('File comment'), - ) - - user = models.ForeignKey( - User, - on_delete=models.SET_NULL, - blank=True, - null=True, - verbose_name=_('User'), - help_text=_('User'), - ) - - upload_date = models.DateField( - auto_now_add=True, null=True, blank=True, verbose_name=_('upload date') - ) + self.attachments.all().delete() + super().delete() @property - def basename(self): - """Base name/path for attachment.""" - if self.attachment: - return os.path.basename(self.attachment.name) - return None + def attachments(self): + """Return a queryset containing all attachments for this model.""" + return self.attachments_for_model().filter(model_id=self.pk) - @basename.setter - def basename(self, fn): - """Function to rename the attachment file. + @classmethod + def check_attachment_permission(cls, permission, user) -> bool: + """Check if the user has permission to perform the specified action on the attachment. - - Filename cannot be empty - - Filename cannot contain illegal characters - - Filename must specify an extension - - Filename cannot match an existing file + The default implementation runs a permission check against *this* model class, + but this can be overridden in the implementing class if required. + + Arguments: + permission: The permission to check (add / change / view / delete) + user: The user to check against + + Returns: + bool: True if the user has permission, False otherwise """ - fn = fn.strip() + perm = f'{cls._meta.app_label}.{permission}_{cls._meta.model_name}' + return user.has_perm(perm) - if len(fn) == 0: - raise ValidationError(_('Filename must not be empty')) + def attachments_for_model(self): + """Return all attachments for this model class.""" + from common.models import Attachment - attachment_dir = settings.MEDIA_ROOT.joinpath(self.getSubdir()) - old_file = settings.MEDIA_ROOT.joinpath(self.attachment.name) - new_file = settings.MEDIA_ROOT.joinpath(self.getSubdir(), fn).resolve() + model_type = self.__class__.__name__.lower() - # Check that there are no directory tricks going on... - if new_file.parent != attachment_dir: - logger.error( - "Attempted to rename attachment outside valid directory: '%s'", new_file - ) - raise ValidationError(_('Invalid attachment directory')) + return Attachment.objects.filter(model_type=model_type) - # Ignore further checks if the filename is not actually being renamed - if new_file == old_file: - return + def create_attachment(self, attachment=None, link=None, comment='', **kwargs): + """Create an attachment / link for this model.""" + from common.models import Attachment - forbidden = [ - "'", - '"', - '#', - '@', - '!', - '&', - '^', - '<', - '>', - ':', - ';', - '/', - '\\', - '|', - '?', - '*', - '%', - '~', - '`', - ] + kwargs['attachment'] = attachment + kwargs['link'] = link + kwargs['comment'] = comment + kwargs['model_type'] = self.__class__.__name__.lower() + kwargs['model_id'] = self.pk - for c in forbidden: - if c in fn: - raise ValidationError(_(f"Filename contains illegal character '{c}'")) - - if len(fn.split('.')) < 2: - raise ValidationError(_('Filename missing extension')) - - if not old_file.exists(): - logger.error( - "Trying to rename attachment '%s' which does not exist", old_file - ) - return - - if new_file.exists(): - raise ValidationError(_('Attachment with this filename already exists')) - - try: - os.rename(old_file, new_file) - self.attachment.name = os.path.join(self.getSubdir(), fn) - self.save() - except Exception: - raise ValidationError(_('Error renaming file')) - - def fully_qualified_url(self): - """Return a 'fully qualified' URL for this attachment. - - - If the attachment is a link to an external resource, return the link - - If the attachment is an uploaded file, return the fully qualified media URL - """ - if self.link: - return self.link - - if self.attachment: - media_url = InvenTree.helpers.getMediaUrl(self.attachment.url) - return InvenTree.helpers_model.construct_absolute_url(media_url) - - return '' + Attachment.objects.create(**kwargs) class InvenTreeTree(MetadataMixin, PluginValidationMixin, MPTTModel): """Provides an abstracted self-referencing tree model for data categories. - Each Category has one parent Category, which can be blank (for a top-level Category). - - Each Category can have zero-or-more child Categor(y/ies) + - Each Category can have zero-or-more child Category(y/ies) Attributes: name: brief name @@ -715,6 +575,9 @@ class InvenTreeTree(MetadataMixin, PluginValidationMixin, MPTTModel): # e.g. for StockLocation, this value is 'location' ITEM_PARENT_KEY = None + # Extra fields to include in the get_path result. E.g. icon + EXTRA_PATH_FIELDS = [] + class Meta: """Metaclass defines extra model properties.""" @@ -920,7 +783,7 @@ class InvenTreeTree(MetadataMixin, PluginValidationMixin, MPTTModel): on_delete=models.DO_NOTHING, blank=True, null=True, - verbose_name=_('parent'), + verbose_name='parent', related_name='children', ) @@ -1008,7 +871,14 @@ class InvenTreeTree(MetadataMixin, PluginValidationMixin, MPTTModel): name: , } """ - return [{'pk': item.pk, 'name': item.name} for item in self.path] + return [ + { + 'pk': item.pk, + 'name': item.name, + **{k: getattr(item, k, None) for k in self.EXTRA_PATH_FIELDS}, + } + for item in self.path + ] def __str__(self): """String representation of a category is the full path to that category.""" @@ -1072,6 +942,8 @@ class InvenTreeBarcodeMixin(models.Model): - barcode_data : Raw data associated with an assigned barcode - barcode_hash : A 'hash' of the assigned barcode data used to improve matching + + The barcode_model_type_code() classmethod must be implemented in the model class. """ class Meta: @@ -1102,11 +974,25 @@ class InvenTreeBarcodeMixin(models.Model): # By default, use the name of the class return cls.__name__.lower() + @classmethod + def barcode_model_type_code(cls): + r"""Return a 'short' code for the model type. + + This is used to generate a efficient QR code for the model type. + It is expected to match this pattern: [0-9A-Z $%*+-.\/:]{2} + + Note: Due to the shape constrains (45**2=2025 different allowed codes) + this needs to be explicitly implemented in the model class to avoid collisions. + """ + raise NotImplementedError( + 'barcode_model_type_code() must be implemented in the model class' + ) + def format_barcode(self, **kwargs): """Return a JSON string for formatting a QR code for this model instance.""" - return InvenTree.helpers.MakeBarcode( - self.__class__.barcode_model_type(), self.pk, **kwargs - ) + from plugin.base.barcodes.helper import generate_barcode + + return generate_barcode(self) def format_matched_response(self): """Format a standard response for a matched barcode.""" @@ -1124,7 +1010,7 @@ class InvenTreeBarcodeMixin(models.Model): @property def barcode(self): """Format a minimal barcode string (e.g. for label printing).""" - return self.format_barcode(brief=True) + return self.format_barcode() @classmethod def lookup_barcode(cls, barcode_hash): diff --git a/src/backend/InvenTree/InvenTree/ready.py b/src/backend/InvenTree/InvenTree/ready.py index 0ae788282c..b08941d1c0 100644 --- a/src/backend/InvenTree/InvenTree/ready.py +++ b/src/backend/InvenTree/InvenTree/ready.py @@ -115,6 +115,7 @@ def canAppAccessDatabase( 'makemessages', 'compilemessages', 'spectactular', + 'collectstatic', ] if not allow_shell: @@ -125,7 +126,7 @@ def canAppAccessDatabase( excluded_commands.append('test') if not allow_plugins: - excluded_commands.extend(['collectstatic', 'collectplugins']) + excluded_commands.extend(['collectplugins']) for cmd in excluded_commands: if cmd in sys.argv: diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index 1ee69b403a..4063685115 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -404,6 +404,17 @@ class UserSerializer(InvenTreeModelSerializer): read_only_fields = ['username'] + username = serializers.CharField(label=_('Username'), help_text=_('Username')) + first_name = serializers.CharField( + label=_('First Name'), help_text=_('First name of the user') + ) + last_name = serializers.CharField( + label=_('Last Name'), help_text=_('Last name of the user') + ) + email = serializers.EmailField( + label=_('Email'), help_text=_('Email address of the user') + ) + class ExendedUserSerializer(UserSerializer): """Serializer for a User with a bit more info.""" @@ -424,6 +435,16 @@ class ExendedUserSerializer(UserSerializer): read_only_fields = UserSerializer.Meta.read_only_fields + ['groups'] + is_staff = serializers.BooleanField( + label=_('Staff'), help_text=_('Does this user have staff permissions') + ) + is_superuser = serializers.BooleanField( + label=_('Superuser'), help_text=_('Is this user a superuser') + ) + is_active = serializers.BooleanField( + label=_('Active'), help_text=_('Is this user account active') + ) + def validate(self, attrs): """Expanded validation for changing user role.""" # Check if is_staff or is_superuser is in attrs @@ -509,43 +530,6 @@ class InvenTreeAttachmentSerializerField(serializers.FileField): return os.path.join(str(settings.MEDIA_URL), str(value)) -class InvenTreeAttachmentSerializer(InvenTreeModelSerializer): - """Special case of an InvenTreeModelSerializer, which handles an "attachment" model. - - The only real addition here is that we support "renaming" of the attachment file. - """ - - @staticmethod - def attachment_fields(extra_fields=None): - """Default set of fields for an attachment serializer.""" - fields = [ - 'pk', - 'attachment', - 'filename', - 'link', - 'comment', - 'upload_date', - 'user', - 'user_detail', - ] - - if extra_fields: - fields += extra_fields - - return fields - - user_detail = UserSerializer(source='user', read_only=True, many=False) - - attachment = InvenTreeAttachmentSerializerField(required=False, allow_null=False) - - # The 'filename' field must be present in the serializer - filename = serializers.CharField( - label=_('Filename'), required=False, source='basename', allow_blank=False - ) - - upload_date = serializers.DateField(read_only=True) - - class InvenTreeImageSerializerField(serializers.ImageField): """Custom image serializer. @@ -872,7 +856,7 @@ class RemoteImageMixin(metaclass=serializers.SerializerMetaclass): remote_image = serializers.URLField( required=False, - allow_blank=False, + allow_blank=True, write_only=True, label=_('Remote Image'), help_text=_('URL of remote image file'), diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 7aed4489a5..8112ea0f19 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -18,7 +18,6 @@ import django.conf.locale import django.core.exceptions from django.core.validators import URLValidator from django.http import Http404 -from django.utils.translation import gettext_lazy as _ import pytz from dotenv import load_dotenv @@ -198,6 +197,7 @@ INSTALLED_APPS = [ 'stock.apps.StockConfig', 'users.apps.UsersConfig', 'machine.apps.MachineConfig', + 'importer.apps.ImporterConfig', 'web', 'generic', 'InvenTree.apps.InvenTreeConfig', # InvenTree app runs last @@ -296,10 +296,11 @@ ADMIN_SHELL_IMPORT_MODELS = False if ( DEBUG and INVENTREE_ADMIN_ENABLED + and not TESTING and get_boolean_setting('INVENTREE_DEBUG_SHELL', 'debug_shell', False) ): # noqa try: - import django_admin_shell + import django_admin_shell # noqa: F401 INSTALLED_APPS.append('django_admin_shell') ADMIN_SHELL_ENABLE = True @@ -1208,6 +1209,9 @@ ACCOUNT_FORMS = { 'reset_password_from_key': 'allauth.account.forms.ResetPasswordKeyForm', 'disconnect': 'allauth.socialaccount.forms.DisconnectForm', } +ALLAUTH_2FA_FORMS = {'setup': 'InvenTree.forms.CustomTOTPDeviceForm'} +# Determine if multi-factor authentication is enabled for this server (default = True) +MFA_ENABLED = get_boolean_setting('INVENTREE_MFA_ENABLED', 'mfa_enabled', True) SOCIALACCOUNT_ADAPTER = 'InvenTree.forms.CustomSocialAccountAdapter' ACCOUNT_ADAPTER = 'InvenTree.forms.CustomAccountAdapter' @@ -1272,7 +1276,7 @@ PLUGIN_TESTING_SETUP = get_setting( ) # Load plugins from setup hooks in testing? PLUGIN_TESTING_EVENTS = False # Flag if events are tested right now PLUGIN_RETRY = get_setting( - 'INVENTREE_PLUGIN_RETRY', 'PLUGIN_RETRY', 5 + 'INVENTREE_PLUGIN_RETRY', 'PLUGIN_RETRY', 3, typecast=int ) # How often should plugin loading be tried? PLUGIN_FILE_CHECKED = False # Was the plugin file checked? diff --git a/src/backend/InvenTree/InvenTree/social_auth_urls.py b/src/backend/InvenTree/InvenTree/social_auth_urls.py index 49d9e461ee..9702750b49 100644 --- a/src/backend/InvenTree/InvenTree/social_auth_urls.py +++ b/src/backend/InvenTree/InvenTree/social_auth_urls.py @@ -3,6 +3,7 @@ import logging from importlib import import_module +from django.conf import settings from django.urls import NoReverseMatch, include, path, reverse from allauth.account.models import EmailAddress @@ -177,7 +178,9 @@ class SocialProviderListView(ListAPI): data = { 'sso_enabled': InvenTree.sso.login_enabled(), 'sso_registration': InvenTree.sso.registration_enabled(), - 'mfa_required': get_global_setting('LOGIN_ENFORCE_MFA'), + 'mfa_required': settings.MFA_ENABLED + and get_global_setting('LOGIN_ENFORCE_MFA'), + 'mfa_enabled': settings.MFA_ENABLED, 'providers': provider_list, 'registration_enabled': get_global_setting('LOGIN_ENABLE_REG'), 'password_forgotten_enabled': get_global_setting('LOGIN_ENABLE_PWD_FORGOT'), diff --git a/src/backend/InvenTree/InvenTree/sso.py b/src/backend/InvenTree/InvenTree/sso.py index b3fb551cf2..9279d58198 100644 --- a/src/backend/InvenTree/InvenTree/sso.py +++ b/src/backend/InvenTree/InvenTree/sso.py @@ -1,7 +1,14 @@ """Helper functions for Single Sign On functionality.""" +import json import logging +from django.contrib.auth.models import Group +from django.db.models.signals import post_save +from django.dispatch import receiver + +from allauth.socialaccount.models import SocialAccount, SocialLogin + from common.settings import get_global_setting from InvenTree.helpers import str2bool @@ -75,3 +82,55 @@ def registration_enabled() -> bool: def auto_registration_enabled() -> bool: """Return True if SSO auto-registration is enabled.""" return str2bool(get_global_setting('LOGIN_SIGNUP_SSO_AUTO')) + + +def ensure_sso_groups(sender, sociallogin: SocialLogin, **kwargs): + """Sync groups from IdP each time a SSO user logs on. + + This event listener is registered in the apps ready method. + """ + if not get_global_setting('LOGIN_ENABLE_SSO_GROUP_SYNC'): + return + + group_key = get_global_setting('SSO_GROUP_KEY') + group_map = json.loads(get_global_setting('SSO_GROUP_MAP')) + # map SSO groups to InvenTree groups + group_names = [] + for sso_group in sociallogin.account.extra_data.get(group_key, []): + if mapped_name := group_map.get(sso_group): + group_names.append(mapped_name) + + # ensure user has groups + user = sociallogin.account.user + for group_name in group_names: + try: + user.groups.get(name=group_name) + except Group.DoesNotExist: + # user not in group yet + try: + group = Group.objects.get(name=group_name) + except Group.DoesNotExist: + logger.info(f'Creating group {group_name} as it did not exist') + group = Group(name=group_name) + group.save() + logger.info(f'Adding group {group_name} to user {user}') + user.groups.add(group) + + # remove groups not listed by SSO if not disabled + if get_global_setting('SSO_REMOVE_GROUPS'): + for group in user.groups.all(): + if not group.name in group_names: + logger.info(f'Removing group {group.name} from {user}') + user.groups.remove(group) + + +@receiver(post_save, sender=SocialAccount) +def on_social_account_created(sender, instance: SocialAccount, created: bool, **kwargs): + """Sync SSO groups when new SocialAccount is added. + + Since the allauth `social_account_added` signal is not sent for some reason, this + signal is simulated using post_save signals. The issue has been reported as + https://github.com/pennersr/django-allauth/issues/3834 + """ + if created: + ensure_sso_groups(None, SocialLogin(account=instance)) diff --git a/src/backend/InvenTree/InvenTree/static/css/inventree.css b/src/backend/InvenTree/InvenTree/static/css/inventree.css index 912f482243..185ca70e8c 100644 --- a/src/backend/InvenTree/InvenTree/static/css/inventree.css +++ b/src/backend/InvenTree/InvenTree/static/css/inventree.css @@ -1101,3 +1101,19 @@ a { .large-treeview-icon { font-size: 1em; } + +.api-icon { + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better font rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.test-statistics-table-total-row { + font-weight: bold; + border-top-style: double; +} diff --git a/src/backend/InvenTree/InvenTree/static/script/inventree/inventree.js b/src/backend/InvenTree/InvenTree/static/script/inventree/inventree.js index db12de9d9d..0da91dbee1 100644 --- a/src/backend/InvenTree/InvenTree/static/script/inventree/inventree.js +++ b/src/backend/InvenTree/InvenTree/static/script/inventree/inventree.js @@ -60,10 +60,6 @@ function exportFormatOptions() { value: 'tsv', display_name: 'TSV', }, - { - value: 'xls', - display_name: 'XLS', - }, { value: 'xlsx', display_name: 'XLSX', diff --git a/src/backend/InvenTree/InvenTree/static/tabler-icons/LICENSE b/src/backend/InvenTree/InvenTree/static/tabler-icons/LICENSE new file mode 100644 index 0000000000..974db1ac4b --- /dev/null +++ b/src/backend/InvenTree/InvenTree/static/tabler-icons/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2024 Paweł Kuna + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/backend/InvenTree/InvenTree/static/tabler-icons/icons.json b/src/backend/InvenTree/InvenTree/static/tabler-icons/icons.json new file mode 100644 index 0000000000..0f52ecfafc --- /dev/null +++ b/src/backend/InvenTree/InvenTree/static/tabler-icons/icons.json @@ -0,0 +1 @@ +{"a-b-2":{"name":"a-b-2","category":"","tags":["test","visual","user"],"variants":{"outline":"f25f"}},"a-b-off":{"name":"a-b-off","category":"","tags":["test","visual","user"],"variants":{"outline":"f0a6"}},"a-b":{"name":"a-b","category":"","tags":["test","visual","user"],"variants":{"outline":"ec36"}},"abacus-off":{"name":"abacus-off","category":"Math","tags":["abacus","math","counting","adding up"],"variants":{"outline":"f3b6"}},"abacus":{"name":"abacus","category":"Math","tags":["abacus","math","counting","adding up"],"variants":{"outline":"f05c"}},"abc":{"name":"abc","category":"","tags":["letters","alphabet","latin"],"variants":{"outline":"f567"}},"access-point-off":{"name":"access-point-off","category":"Devices","tags":["device","hosts","airwaves","wireless","network"],"variants":{"outline":"ed1a"}},"access-point":{"name":"access-point","category":"Devices","tags":["device","hosts","airwaves","wireless","network"],"variants":{"outline":"ed1b"}},"accessible-off":{"name":"accessible-off","category":"","tags":["low-vision","blind","disability","handicapped"],"variants":{"outline":"f0a7"}},"accessible":{"name":"accessible","category":"","tags":["low-vision","blind","disability","handicapped"],"variants":{"outline":"eba9","filled":"f6ea"}},"activity-heartbeat":{"name":"activity-heartbeat","category":"","tags":["pulse","lifeline","impuls","hospital","heartrate"],"variants":{"outline":"f0db"}},"activity":{"name":"activity","category":"","tags":["pulse","motion","health","action"],"variants":{"outline":"ed23"}},"ad-2":{"name":"ad-2","category":"Design","tags":["advert","advertisement","marketing","commercial","traffic"],"variants":{"outline":"ef1f"}},"ad-circle-off":{"name":"ad-circle-off","category":"","tags":["marketing","promotion","advertisement","shape"],"variants":{"outline":"f79d"}},"ad-circle":{"name":"ad-circle","category":"","tags":["marketing","promotion","advertisement","shape"],"variants":{"outline":"f79e","filled":"f7d3"}},"ad-off":{"name":"ad-off","category":"Design","tags":["advert","advertisement","marketing","commercial","traffic"],"variants":{"outline":"f3b7"}},"ad":{"name":"ad","category":"Design","tags":["advert","advertisement","marketing","commercial","traffic"],"variants":{"outline":"ea02","filled":"f6eb"}},"address-book-off":{"name":"address-book-off","category":"","tags":["contact","contacts","phonebook","profile","resources"],"variants":{"outline":"f3b8"}},"address-book":{"name":"address-book","category":"","tags":["contact","contacts","phonebook","profile","resources"],"variants":{"outline":"f021"}},"adjustments-alt":{"name":"adjustments-alt","category":"System","tags":["equalizer","sliders","controls","settings","filter"],"variants":{"outline":"ec37"}},"adjustments-bolt":{"name":"adjustments-bolt","category":"System","tags":[],"variants":{"outline":"f7fb"}},"adjustments-cancel":{"name":"adjustments-cancel","category":"System","tags":[],"variants":{"outline":"f7fc"}},"adjustments-check":{"name":"adjustments-check","category":"System","tags":[],"variants":{"outline":"f7fd"}},"adjustments-code":{"name":"adjustments-code","category":"System","tags":[],"variants":{"outline":"f7fe"}},"adjustments-cog":{"name":"adjustments-cog","category":"System","tags":[],"variants":{"outline":"f7ff"}},"adjustments-dollar":{"name":"adjustments-dollar","category":"System","tags":[],"variants":{"outline":"f800"}},"adjustments-down":{"name":"adjustments-down","category":"System","tags":[],"variants":{"outline":"f801"}},"adjustments-exclamation":{"name":"adjustments-exclamation","category":"System","tags":[],"variants":{"outline":"f802"}},"adjustments-heart":{"name":"adjustments-heart","category":"System","tags":[],"variants":{"outline":"f803"}},"adjustments-horizontal":{"name":"adjustments-horizontal","category":"System","tags":["equalizer","sliders","controls","settings","filter"],"variants":{"outline":"ec38"}},"adjustments-minus":{"name":"adjustments-minus","category":"System","tags":[],"variants":{"outline":"f804"}},"adjustments-off":{"name":"adjustments-off","category":"System","tags":["equalizer","sliders","controls","settings","filter"],"variants":{"outline":"f0a8"}},"adjustments-pause":{"name":"adjustments-pause","category":"System","tags":[],"variants":{"outline":"f805"}},"adjustments-pin":{"name":"adjustments-pin","category":"System","tags":[],"variants":{"outline":"f806"}},"adjustments-plus":{"name":"adjustments-plus","category":"System","tags":[],"variants":{"outline":"f807"}},"adjustments-question":{"name":"adjustments-question","category":"System","tags":[],"variants":{"outline":"f808"}},"adjustments-search":{"name":"adjustments-search","category":"System","tags":[],"variants":{"outline":"f809"}},"adjustments-share":{"name":"adjustments-share","category":"System","tags":[],"variants":{"outline":"f80a"}},"adjustments-star":{"name":"adjustments-star","category":"System","tags":[],"variants":{"outline":"f80b"}},"adjustments-up":{"name":"adjustments-up","category":"System","tags":[],"variants":{"outline":"f80c"}},"adjustments-x":{"name":"adjustments-x","category":"System","tags":[],"variants":{"outline":"f80d"}},"adjustments":{"name":"adjustments","category":"System","tags":["equalizer","sliders","controls","settings","filter"],"variants":{"outline":"ea03","filled":"f6ec"}},"aerial-lift":{"name":"aerial-lift","category":"Vehicles","tags":["cable","car","gondola","mountains","ski","tramway"],"variants":{"outline":"edfe"}},"affiliate":{"name":"affiliate","category":"","tags":["network","connection","collaboration","people","connect","organization","networking"],"variants":{"outline":"edff","filled":"f6ed"}},"ai":{"name":"ai","category":"","tags":["artificial intelligence","letters","text","technology","robot","automatic","character"],"variants":{"outline":"fee7"}},"air-balloon":{"name":"air-balloon","category":"Vehicles","tags":["travel","adventure","attraction","fly","transport"],"variants":{"outline":"f4a6"}},"air-conditioning-disabled":{"name":"air-conditioning-disabled","category":"","tags":["cold","home","cooling","hot","off"],"variants":{"outline":"f542"}},"air-conditioning":{"name":"air-conditioning","category":"","tags":["cold","ice","home","cooling","heating","hot"],"variants":{"outline":"f3a2"}},"air-traffic-control":{"name":"air-traffic-control","category":"Map","tags":[],"variants":{"outline":"fb01"}},"alarm-average":{"name":"alarm-average","category":"System","tags":["notification","metric","ringing","mean","alertness","time","clockwork","signal","bell","chime"],"variants":{"outline":"fc9e"}},"alarm-minus":{"name":"alarm-minus","category":"System","tags":["alarm","bell","notification","delete","remove"],"variants":{"outline":"f630","filled":"f70a"}},"alarm-off":{"name":"alarm-off","category":"System","tags":["time","watch","clock","ring"],"variants":{"outline":"f0a9"}},"alarm-plus":{"name":"alarm-plus","category":"System","tags":["alarm","bell","notification","add","new"],"variants":{"outline":"f631","filled":"f70b"}},"alarm-snooze":{"name":"alarm-snooze","category":"System","tags":["alarm","bell","notification","sleep","nap"],"variants":{"outline":"f632","filled":"f70c"}},"alarm":{"name":"alarm","category":"System","tags":["time","watch","clock","ring"],"variants":{"outline":"ea04","filled":"f709"}},"album-off":{"name":"album-off","category":"","tags":["photos","photography","gallery","music","image"],"variants":{"outline":"f3b9"}},"album":{"name":"album","category":"","tags":["photos","photography","gallery","music","image"],"variants":{"outline":"f022"}},"alert-circle-off":{"name":"alert-circle-off","category":"System","tags":["warning","danger","caution","risk"],"variants":{"outline":"fc65"}},"alert-circle":{"name":"alert-circle","category":"System","tags":["warning","danger","caution","risk"],"variants":{"outline":"ea05","filled":"f6ee"}},"alert-hexagon-off":{"name":"alert-hexagon-off","category":"System","tags":[],"variants":{"outline":"fc66"}},"alert-hexagon":{"name":"alert-hexagon","category":"System","tags":[],"variants":{"outline":"f80e","filled":"fa34"}},"alert-octagon":{"name":"alert-octagon","category":"System","tags":["warning","danger","caution","risk"],"variants":{"outline":"ecc6","filled":"f6ef"}},"alert-small-off":{"name":"alert-small-off","category":"System","tags":[],"variants":{"outline":"fc67"}},"alert-small":{"name":"alert-small","category":"System","tags":[],"variants":{"outline":"f80f"}},"alert-square-rounded-off":{"name":"alert-square-rounded-off","category":"System","tags":[],"variants":{"outline":"fc68"}},"alert-square-rounded":{"name":"alert-square-rounded","category":"System","tags":[],"variants":{"outline":"f810","filled":"fa36"}},"alert-square":{"name":"alert-square","category":"System","tags":[],"variants":{"outline":"f811","filled":"fa35"}},"alert-triangle-off":{"name":"alert-triangle-off","category":"System","tags":["warning","danger","caution","risk"],"variants":{"outline":"fc69"}},"alert-triangle":{"name":"alert-triangle","category":"System","tags":["warning","danger","caution","risk"],"variants":{"outline":"ea06","filled":"f6f0"}},"alien":{"name":"alien","category":"","tags":["universe","extraterrestrial","ufo","space","galaxy","planet"],"variants":{"outline":"ebde","filled":"f70d"}},"align-box-bottom-center":{"name":"align-box-bottom-center","category":"Text","tags":["text","type","down","south"],"variants":{"outline":"f530","filled":"f70e"}},"align-box-bottom-left":{"name":"align-box-bottom-left","category":"Text","tags":["text","type","west","corner"],"variants":{"outline":"f531","filled":"f70f"}},"align-box-bottom-right":{"name":"align-box-bottom-right","category":"Text","tags":["text","type","east","corner"],"variants":{"outline":"f532","filled":"f710"}},"align-box-center-bottom":{"name":"align-box-center-bottom","category":"Text","tags":[],"variants":{"outline":"facb"}},"align-box-center-middle":{"name":"align-box-center-middle","category":"Text","tags":["text","type","line","horizontal"],"variants":{"outline":"f79f","filled":"f7d4"}},"align-box-center-stretch":{"name":"align-box-center-stretch","category":"Text","tags":[],"variants":{"outline":"facc"}},"align-box-center-top":{"name":"align-box-center-top","category":"Text","tags":[],"variants":{"outline":"facd"}},"align-box-left-bottom":{"name":"align-box-left-bottom","category":"Text","tags":["text","type","west","down","south","corner"],"variants":{"outline":"f533","filled":"f711"}},"align-box-left-middle":{"name":"align-box-left-middle","category":"Text","tags":["text","type","west"],"variants":{"outline":"f534","filled":"f712"}},"align-box-left-stretch":{"name":"align-box-left-stretch","category":"Text","tags":[],"variants":{"outline":"face"}},"align-box-left-top":{"name":"align-box-left-top","category":"Text","tags":["text","type","west","up","north","corner"],"variants":{"outline":"f535","filled":"f713"}},"align-box-right-bottom":{"name":"align-box-right-bottom","category":"Text","tags":["text","type","east","down","south","corner"],"variants":{"outline":"f536","filled":"f714"}},"align-box-right-middle":{"name":"align-box-right-middle","category":"Text","tags":["text","type","east"],"variants":{"outline":"f537","filled":"f7d5"}},"align-box-right-stretch":{"name":"align-box-right-stretch","category":"Text","tags":[],"variants":{"outline":"facf"}},"align-box-right-top":{"name":"align-box-right-top","category":"Text","tags":["text","type","east","up","north","corner"],"variants":{"outline":"f538","filled":"f715"}},"align-box-top-center":{"name":"align-box-top-center","category":"Text","tags":["text","type","up","north"],"variants":{"outline":"f539","filled":"f716"}},"align-box-top-left":{"name":"align-box-top-left","category":"Text","tags":["text","type","up","north","east","corner"],"variants":{"outline":"f53a","filled":"f717"}},"align-box-top-right":{"name":"align-box-top-right","category":"Text","tags":["text","type","up","north","west","corner"],"variants":{"outline":"f53b","filled":"f718"}},"align-center":{"name":"align-center","category":"Text","tags":["text","alignment","position"],"variants":{"outline":"ea07"}},"align-justified":{"name":"align-justified","category":"Text","tags":["text","alignment","position"],"variants":{"outline":"ea08"}},"align-left-2":{"name":"align-left-2","category":"Text","tags":["text","alignment","position"],"variants":{"outline":"ff00"}},"align-left":{"name":"align-left","category":"Text","tags":["text","alignment","position"],"variants":{"outline":"ea09"}},"align-right-2":{"name":"align-right-2","category":"Text","tags":["text","alignment","position"],"variants":{"outline":"feff"}},"align-right":{"name":"align-right","category":"Text","tags":["text","alignment","position"],"variants":{"outline":"ea0a"}},"alpha":{"name":"alpha","category":"Letters","tags":["letter","alphabet","greek","math"],"variants":{"outline":"f543"}},"alphabet-arabic":{"name":"alphabet-arabic","category":"Text","tags":[],"variants":{"outline":"ff2f"}},"alphabet-bangla":{"name":"alphabet-bangla","category":"Text","tags":["language","alphabet","bangla","bengali"],"variants":{"outline":"ff2e"}},"alphabet-cyrillic":{"name":"alphabet-cyrillic","category":"Text","tags":["russia","letters","language"],"variants":{"outline":"f1df"}},"alphabet-greek":{"name":"alphabet-greek","category":"Text","tags":["letters","language","alpha","beta"],"variants":{"outline":"f1e0"}},"alphabet-hebrew":{"name":"alphabet-hebrew","category":"Text","tags":["language","alphabet","hebrew","jewish"],"variants":{"outline":"ff2d"}},"alphabet-korean":{"name":"alphabet-korean","category":"Text","tags":["language","alphabet","korean"],"variants":{"outline":"ff2c"}},"alphabet-latin":{"name":"alphabet-latin","category":"Text","tags":["letters","language","rome"],"variants":{"outline":"f1e1"}},"alphabet-thai":{"name":"alphabet-thai","category":"Text","tags":["language","alphabet","thailand"],"variants":{"outline":"ff2b"}},"alt":{"name":"alt","category":"","tags":["alternative","substitute","replacement","variant","different","alternate","variation","stand-in","option","choice"],"variants":{"outline":"fc54"}},"ambulance":{"name":"ambulance","category":"Vehicles","tags":["vehicle","car","hospital","ward","doctor","rescuer"],"variants":{"outline":"ebf5"}},"ampersand":{"name":"ampersand","category":"Math","tags":["and","also","besides","moreover"],"variants":{"outline":"f229"}},"analyze-off":{"name":"analyze-off","category":"","tags":["analytics","data","statistics","graph"],"variants":{"outline":"f3ba"}},"analyze":{"name":"analyze","category":"","tags":["analytics","data","statistics","graph"],"variants":{"outline":"f3a3","filled":"f719"}},"anchor-off":{"name":"anchor-off","category":"Map","tags":["hold","ship","harbor","docks"],"variants":{"outline":"f0f7"}},"anchor":{"name":"anchor","category":"Map","tags":["hold","ship","harbor","docks"],"variants":{"outline":"eb76"}},"angle":{"name":"angle","category":"Design","tags":["geometry","math","degrees"],"variants":{"outline":"ef20"}},"ankh":{"name":"ankh","category":"Symbols","tags":["egypt","religion","cultures","community"],"variants":{"outline":"f1cd"}},"antenna-bars-1":{"name":"antenna-bars-1","category":"Devices","tags":["signal","wireless","wi-fi","quality"],"variants":{"outline":"ecc7"}},"antenna-bars-2":{"name":"antenna-bars-2","category":"Devices","tags":["signal","wireless","wi-fi","quality"],"variants":{"outline":"ecc8"}},"antenna-bars-3":{"name":"antenna-bars-3","category":"Devices","tags":["signal","wireless","wi-fi","quality"],"variants":{"outline":"ecc9"}},"antenna-bars-4":{"name":"antenna-bars-4","category":"Devices","tags":["signal","wireless","wi-fi","quality"],"variants":{"outline":"ecca"}},"antenna-bars-5":{"name":"antenna-bars-5","category":"Devices","tags":["signal","wireless","wi-fi","quality"],"variants":{"outline":"eccb"}},"antenna-bars-off":{"name":"antenna-bars-off","category":"Devices","tags":["signal","wireless","wi-fi","quality"],"variants":{"outline":"f0aa"}},"antenna-off":{"name":"antenna-off","category":"Devices","tags":["reach","tv","network","connetion","signal","communication"],"variants":{"outline":"f3bb"}},"antenna":{"name":"antenna","category":"Devices","tags":["reach","tv","network","connetion","signal","communication"],"variants":{"outline":"f094"}},"aperture-off":{"name":"aperture-off","category":"Photography","tags":["hole","opening","vent"],"variants":{"outline":"f3bc"}},"aperture":{"name":"aperture","category":"Photography","tags":["hole","opening","vent"],"variants":{"outline":"eb58"}},"api-app-off":{"name":"api-app-off","category":"Development","tags":["development","software","developer","platform"],"variants":{"outline":"f0ab"}},"api-app":{"name":"api-app","category":"Development","tags":["development","software","developer","platform"],"variants":{"outline":"effc"}},"api-off":{"name":"api-off","category":"Development","tags":["programming","coding","program","code","configuration"],"variants":{"outline":"f0f8"}},"api":{"name":"api","category":"Development","tags":["programming","coding","program","code","configuration"],"variants":{"outline":"effd"}},"app-window":{"name":"app-window","category":"","tags":["browser","page","website","web","interface"],"variants":{"outline":"efe6","filled":"f71a"}},"apple":{"name":"apple","category":"Food","tags":["fruit","healthy","diet","fitness"],"variants":{"outline":"ef21"}},"apps-off":{"name":"apps-off","category":"Development","tags":["application","add-on","user","download","mobile"],"variants":{"outline":"f0ac"}},"apps":{"name":"apps","category":"Development","tags":["application","add-on","user","download","mobile"],"variants":{"outline":"ebb6","filled":"f6f1"}},"archery-arrow":{"name":"archery-arrow","category":"","tags":["bow","target","shoot","sports","archer","hunting","bullseye","flight","quiver","precision"],"variants":{"outline":"fc55"}},"archive-off":{"name":"archive-off","category":"Document","tags":["box","index","records","old","collect"],"variants":{"outline":"f0ad"}},"archive":{"name":"archive","category":"Document","tags":["box","index","records","old","collect"],"variants":{"outline":"ea0b","filled":"fa82"}},"armchair-2-off":{"name":"armchair-2-off","category":"","tags":["seat","chair","sofa","home","furniture"],"variants":{"outline":"f3bd"}},"armchair-2":{"name":"armchair-2","category":"","tags":["seat","chair","sofa","home","furniture"],"variants":{"outline":"efe7"}},"armchair-off":{"name":"armchair-off","category":"","tags":["seat","chair","sofa","home","furniture"],"variants":{"outline":"f3be"}},"armchair":{"name":"armchair","category":"","tags":["seat","chair","sofa","home","furniture"],"variants":{"outline":"ef9e"}},"arrow-autofit-content":{"name":"arrow-autofit-content","category":"Arrows","tags":["direction","east","west"],"variants":{"outline":"ef31","filled":"f6f2"}},"arrow-autofit-down":{"name":"arrow-autofit-down","category":"Arrows","tags":["direction","south"],"variants":{"outline":"ef32"}},"arrow-autofit-height":{"name":"arrow-autofit-height","category":"Arrows","tags":["direction","north","up","down","south"],"variants":{"outline":"ef33"}},"arrow-autofit-left":{"name":"arrow-autofit-left","category":"Arrows","tags":["direction","west"],"variants":{"outline":"ef34"}},"arrow-autofit-right":{"name":"arrow-autofit-right","category":"Arrows","tags":["direction","east","west"],"variants":{"outline":"ef35"}},"arrow-autofit-up":{"name":"arrow-autofit-up","category":"Arrows","tags":["direction","north"],"variants":{"outline":"ef36"}},"arrow-autofit-width":{"name":"arrow-autofit-width","category":"Arrows","tags":["direction","east","west"],"variants":{"outline":"ef37"}},"arrow-back-up-double":{"name":"arrow-back-up-double","category":"Arrows","tags":[],"variants":{"outline":"f9ec"}},"arrow-back-up":{"name":"arrow-back-up","category":"Arrows","tags":["pointer","return","revert","reverse","undo","left"],"variants":{"outline":"eb77"}},"arrow-back":{"name":"arrow-back","category":"Arrows","tags":["pointer","return","revert","reverse","undo","left"],"variants":{"outline":"ea0c"}},"arrow-badge-down":{"name":"arrow-badge-down","category":"Arrows","tags":["army","badge","military","rank","soldier","war","south","bottom"],"variants":{"outline":"f60b","filled":"f7d6"}},"arrow-badge-left":{"name":"arrow-badge-left","category":"Arrows","tags":["army","badge","military","rank","soldier","war","west"],"variants":{"outline":"f60c","filled":"f7d7"}},"arrow-badge-right":{"name":"arrow-badge-right","category":"Arrows","tags":["army","badge","military","rank","soldier","war","east"],"variants":{"outline":"f60d","filled":"f7d8"}},"arrow-badge-up":{"name":"arrow-badge-up","category":"Arrows","tags":["army","badge","military","rank","soldier","war","north"],"variants":{"outline":"f60e","filled":"f7d9"}},"arrow-bar-both":{"name":"arrow-bar-both","category":"Arrows","tags":[],"variants":{"outline":"fadd"}},"arrow-bar-down":{"name":"arrow-bar-down","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ea0d"}},"arrow-bar-left":{"name":"arrow-bar-left","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ea0e"}},"arrow-bar-right":{"name":"arrow-bar-right","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ea0f"}},"arrow-bar-to-down":{"name":"arrow-bar-to-down","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ec88"}},"arrow-bar-to-left":{"name":"arrow-bar-to-left","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ec89"}},"arrow-bar-to-right":{"name":"arrow-bar-to-right","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ec8a"}},"arrow-bar-to-up":{"name":"arrow-bar-to-up","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ec8b"}},"arrow-bar-up":{"name":"arrow-bar-up","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ea10"}},"arrow-bear-left-2":{"name":"arrow-bear-left-2","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f044"}},"arrow-bear-left":{"name":"arrow-bear-left","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f045"}},"arrow-bear-right-2":{"name":"arrow-bear-right-2","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f046"}},"arrow-bear-right":{"name":"arrow-bear-right","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f047"}},"arrow-big-down-line":{"name":"arrow-big-down-line","category":"Arrows","tags":["direction","south"],"variants":{"outline":"efe8","filled":"f6c7"}},"arrow-big-down-lines":{"name":"arrow-big-down-lines","category":"Arrows","tags":["direction","south"],"variants":{"outline":"efe9","filled":"f6c8"}},"arrow-big-down":{"name":"arrow-big-down","category":"Arrows","tags":["direction","south"],"variants":{"outline":"edda","filled":"f6c6"}},"arrow-big-left-line":{"name":"arrow-big-left-line","category":"Arrows","tags":["direction","west"],"variants":{"outline":"efea","filled":"f6ca"}},"arrow-big-left-lines":{"name":"arrow-big-left-lines","category":"Arrows","tags":["direction","west"],"variants":{"outline":"efeb","filled":"f6cb"}},"arrow-big-left":{"name":"arrow-big-left","category":"Arrows","tags":["direction","west"],"variants":{"outline":"eddb","filled":"f6c9"}},"arrow-big-right-line":{"name":"arrow-big-right-line","category":"Arrows","tags":["direction","east","west"],"variants":{"outline":"efec","filled":"f6cd"}},"arrow-big-right-lines":{"name":"arrow-big-right-lines","category":"Arrows","tags":["direction","east","west"],"variants":{"outline":"efed","filled":"f6ce"}},"arrow-big-right":{"name":"arrow-big-right","category":"Arrows","tags":["direction","east","west"],"variants":{"outline":"eddc","filled":"f6cc"}},"arrow-big-up-line":{"name":"arrow-big-up-line","category":"Arrows","tags":["direction","north"],"variants":{"outline":"efee","filled":"f6d0"}},"arrow-big-up-lines":{"name":"arrow-big-up-lines","category":"Arrows","tags":["direction","north"],"variants":{"outline":"efef","filled":"f6d1"}},"arrow-big-up":{"name":"arrow-big-up","category":"Arrows","tags":["direction","north"],"variants":{"outline":"eddd","filled":"f6cf"}},"arrow-bounce":{"name":"arrow-bounce","category":"Arrows","tags":["direction","cursor","up","pointer","move"],"variants":{"outline":"f3a4"}},"arrow-capsule":{"name":"arrow-capsule","category":"Arrows","tags":[],"variants":{"outline":"fade"}},"arrow-curve-left":{"name":"arrow-curve-left","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f048"}},"arrow-curve-right":{"name":"arrow-curve-right","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f049"}},"arrow-down-bar":{"name":"arrow-down-bar","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ed98"}},"arrow-down-circle":{"name":"arrow-down-circle","category":"Arrows","tags":["proceed","swipe","below","bottom"],"variants":{"outline":"ea11"}},"arrow-down-from-arc":{"name":"arrow-down-from-arc","category":"","tags":[],"variants":{"outline":"fd86"}},"arrow-down-left-circle":{"name":"arrow-down-left-circle","category":"Arrows","tags":["corner","bottom","point"],"variants":{"outline":"ea12"}},"arrow-down-left":{"name":"arrow-down-left","category":"Arrows","tags":["corner","bottom","point"],"variants":{"outline":"ea13"}},"arrow-down-rhombus":{"name":"arrow-down-rhombus","category":"Arrows","tags":["proceed","swipe","below","shape","bottom","south"],"variants":{"outline":"f61d"}},"arrow-down-right-circle":{"name":"arrow-down-right-circle","category":"Arrows","tags":["corner","bottom","point"],"variants":{"outline":"ea14"}},"arrow-down-right":{"name":"arrow-down-right","category":"Arrows","tags":["corner","bottom","point"],"variants":{"outline":"ea15"}},"arrow-down-square":{"name":"arrow-down-square","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ed9a"}},"arrow-down-tail":{"name":"arrow-down-tail","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ed9b"}},"arrow-down-to-arc":{"name":"arrow-down-to-arc","category":"","tags":[],"variants":{"outline":"fd87"}},"arrow-down":{"name":"arrow-down","category":"Arrows","tags":["proceed","swipe","below","bottom"],"variants":{"outline":"ea16"}},"arrow-elbow-left":{"name":"arrow-elbow-left","category":"Arrows","tags":[],"variants":{"outline":"f9ed"}},"arrow-elbow-right":{"name":"arrow-elbow-right","category":"Arrows","tags":[],"variants":{"outline":"f9ee"}},"arrow-fork":{"name":"arrow-fork","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f04a"}},"arrow-forward-up-double":{"name":"arrow-forward-up-double","category":"Arrows","tags":[],"variants":{"outline":"f9ef"}},"arrow-forward-up":{"name":"arrow-forward-up","category":"Arrows","tags":["point","turn","next","redo","right"],"variants":{"outline":"eb78"}},"arrow-forward":{"name":"arrow-forward","category":"Arrows","tags":["point","turn","next","redo","right"],"variants":{"outline":"ea17"}},"arrow-guide":{"name":"arrow-guide","category":"Arrows","tags":["direction","west","bend","navigation"],"variants":{"outline":"f22a"}},"arrow-iteration":{"name":"arrow-iteration","category":"Arrows","tags":["direction","loop","right","east"],"variants":{"outline":"f578"}},"arrow-left-bar":{"name":"arrow-left-bar","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ed9c"}},"arrow-left-circle":{"name":"arrow-left-circle","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ea18"}},"arrow-left-from-arc":{"name":"arrow-left-from-arc","category":"","tags":[],"variants":{"outline":"fd88"}},"arrow-left-rhombus":{"name":"arrow-left-rhombus","category":"Arrows","tags":["proceed","swipe","below","shape","west"],"variants":{"outline":"f61e"}},"arrow-left-right":{"name":"arrow-left-right","category":"Arrows","tags":["direction","west","east"],"variants":{"outline":"f04b"}},"arrow-left-square":{"name":"arrow-left-square","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ed9d"}},"arrow-left-tail":{"name":"arrow-left-tail","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ed9e"}},"arrow-left-to-arc":{"name":"arrow-left-to-arc","category":"","tags":[],"variants":{"outline":"fd89"}},"arrow-left":{"name":"arrow-left","category":"Arrows","tags":["back","swipe","return"],"variants":{"outline":"ea19"}},"arrow-loop-left-2":{"name":"arrow-loop-left-2","category":"Arrows","tags":["direction","west"],"variants":{"outline":"f04c"}},"arrow-loop-left":{"name":"arrow-loop-left","category":"Arrows","tags":["drag","move","turn"],"variants":{"outline":"ed9f"}},"arrow-loop-right-2":{"name":"arrow-loop-right-2","category":"Arrows","tags":["direction","east"],"variants":{"outline":"f04d"}},"arrow-loop-right":{"name":"arrow-loop-right","category":"Arrows","tags":["drag","move","turn"],"variants":{"outline":"eda0"}},"arrow-merge-alt-left":{"name":"arrow-merge-alt-left","category":"Arrows","tags":["merge-left","shift-left","combine-left","direction-left","join-left","move-left","alt-left-arrow","leftward","left-shift","left-merge"],"variants":{"outline":"fc9f"}},"arrow-merge-alt-right":{"name":"arrow-merge-alt-right","category":"Arrows","tags":["merge-right","shift-right","combine-right","direction-right","join-right","move-right","alt-right-arrow","rightward","right-shift","right-merge"],"variants":{"outline":"fca0"}},"arrow-merge-both":{"name":"arrow-merge-both","category":"Arrows","tags":["direction","up","north","higher","right","left"],"variants":{"outline":"f23b"}},"arrow-merge-left":{"name":"arrow-merge-left","category":"Arrows","tags":["direction","up","north","higher"],"variants":{"outline":"f23c"}},"arrow-merge-right":{"name":"arrow-merge-right","category":"Arrows","tags":["direction","up","north","higher"],"variants":{"outline":"f23d"}},"arrow-merge":{"name":"arrow-merge","category":"Arrows","tags":["direction","north","up"],"variants":{"outline":"f04e"}},"arrow-move-down":{"name":"arrow-move-down","category":"Arrows","tags":["direction","south","bottom"],"variants":{"outline":"f2ba"}},"arrow-move-left":{"name":"arrow-move-left","category":"Arrows","tags":["direction","west"],"variants":{"outline":"f2bb"}},"arrow-move-right":{"name":"arrow-move-right","category":"Arrows","tags":["direction","east"],"variants":{"outline":"f2bc"}},"arrow-move-up":{"name":"arrow-move-up","category":"Arrows","tags":["direction","north","top"],"variants":{"outline":"f2bd"}},"arrow-narrow-down":{"name":"arrow-narrow-down","category":"Arrows","tags":["bottom","proceed","swipe","next"],"variants":{"outline":"ea1a"}},"arrow-narrow-left":{"name":"arrow-narrow-left","category":"Arrows","tags":["back","previous","pointer","point"],"variants":{"outline":"ea1b"}},"arrow-narrow-right":{"name":"arrow-narrow-right","category":"Arrows","tags":["next","proceed","point","pointer"],"variants":{"outline":"ea1c"}},"arrow-narrow-up":{"name":"arrow-narrow-up","category":"Arrows","tags":["top","point"],"variants":{"outline":"ea1d"}},"arrow-ramp-left-2":{"name":"arrow-ramp-left-2","category":"Arrows","tags":["direction","west"],"variants":{"outline":"f04f"}},"arrow-ramp-left-3":{"name":"arrow-ramp-left-3","category":"Arrows","tags":["direction","west"],"variants":{"outline":"f050"}},"arrow-ramp-left":{"name":"arrow-ramp-left","category":"Arrows","tags":["direction","side","turn"],"variants":{"outline":"ed3c"}},"arrow-ramp-right-2":{"name":"arrow-ramp-right-2","category":"Arrows","tags":["direction","east"],"variants":{"outline":"f051"}},"arrow-ramp-right-3":{"name":"arrow-ramp-right-3","category":"Arrows","tags":["direction","east"],"variants":{"outline":"f052"}},"arrow-ramp-right":{"name":"arrow-ramp-right","category":"Arrows","tags":["direction","side","turn"],"variants":{"outline":"ed3d"}},"arrow-right-bar":{"name":"arrow-right-bar","category":"Arrows","tags":["drag","move"],"variants":{"outline":"eda1"}},"arrow-right-circle":{"name":"arrow-right-circle","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ea1e"}},"arrow-right-from-arc":{"name":"arrow-right-from-arc","category":"","tags":[],"variants":{"outline":"fd8a"}},"arrow-right-rhombus":{"name":"arrow-right-rhombus","category":"Arrows","tags":["proceed","swipe","below","shape","east"],"variants":{"outline":"f61f"}},"arrow-right-square":{"name":"arrow-right-square","category":"Arrows","tags":["direction","east"],"variants":{"outline":"eda2"}},"arrow-right-tail":{"name":"arrow-right-tail","category":"Arrows","tags":["direction","east"],"variants":{"outline":"eda3"}},"arrow-right-to-arc":{"name":"arrow-right-to-arc","category":"","tags":[],"variants":{"outline":"fd8b"}},"arrow-right":{"name":"arrow-right","category":"Arrows","tags":["next","proceed","swipe"],"variants":{"outline":"ea1f"}},"arrow-rotary-first-left":{"name":"arrow-rotary-first-left","category":"Arrows","tags":["direction","south"],"variants":{"outline":"f053"}},"arrow-rotary-first-right":{"name":"arrow-rotary-first-right","category":"Arrows","tags":["direction","south"],"variants":{"outline":"f054"}},"arrow-rotary-last-left":{"name":"arrow-rotary-last-left","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f055"}},"arrow-rotary-last-right":{"name":"arrow-rotary-last-right","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f056"}},"arrow-rotary-left":{"name":"arrow-rotary-left","category":"Arrows","tags":["direction","west"],"variants":{"outline":"f057"}},"arrow-rotary-right":{"name":"arrow-rotary-right","category":"Arrows","tags":["direction","east"],"variants":{"outline":"f058"}},"arrow-rotary-straight":{"name":"arrow-rotary-straight","category":"Arrows","tags":["direction","north"],"variants":{"outline":"f059"}},"arrow-roundabout-left":{"name":"arrow-roundabout-left","category":"Arrows","tags":["direction","east","traffic","circle"],"variants":{"outline":"f22b"}},"arrow-roundabout-right":{"name":"arrow-roundabout-right","category":"Arrows","tags":["direction","west","traffic","circle"],"variants":{"outline":"f22c"}},"arrow-sharp-turn-left":{"name":"arrow-sharp-turn-left","category":"Arrows","tags":["direction","north","down"],"variants":{"outline":"f05a"}},"arrow-sharp-turn-right":{"name":"arrow-sharp-turn-right","category":"Arrows","tags":["direction","south","down"],"variants":{"outline":"f05b"}},"arrow-up-bar":{"name":"arrow-up-bar","category":"Arrows","tags":["direction","north"],"variants":{"outline":"eda4"}},"arrow-up-circle":{"name":"arrow-up-circle","category":"Arrows","tags":["top","point"],"variants":{"outline":"ea20"}},"arrow-up-from-arc":{"name":"arrow-up-from-arc","category":"","tags":[],"variants":{"outline":"fd8c"}},"arrow-up-left-circle":{"name":"arrow-up-left-circle","category":"Arrows","tags":["top","corner","point"],"variants":{"outline":"ea21"}},"arrow-up-left":{"name":"arrow-up-left","category":"Arrows","tags":["top","corner","point"],"variants":{"outline":"ea22"}},"arrow-up-rhombus":{"name":"arrow-up-rhombus","category":"Arrows","tags":["proceed","swipe","below","shape","top","north"],"variants":{"outline":"f620"}},"arrow-up-right-circle":{"name":"arrow-up-right-circle","category":"Arrows","tags":["top","corner","point"],"variants":{"outline":"ea23"}},"arrow-up-right":{"name":"arrow-up-right","category":"Arrows","tags":["top","corner","point"],"variants":{"outline":"ea24"}},"arrow-up-square":{"name":"arrow-up-square","category":"Arrows","tags":["direction","north"],"variants":{"outline":"eda6"}},"arrow-up-tail":{"name":"arrow-up-tail","category":"Arrows","tags":["direction","north"],"variants":{"outline":"eda7"}},"arrow-up-to-arc":{"name":"arrow-up-to-arc","category":"","tags":[],"variants":{"outline":"fd8d"}},"arrow-up":{"name":"arrow-up","category":"Arrows","tags":["top","point"],"variants":{"outline":"ea25"}},"arrow-wave-left-down":{"name":"arrow-wave-left-down","category":"Arrows","tags":["direction","south"],"variants":{"outline":"eda8"}},"arrow-wave-left-up":{"name":"arrow-wave-left-up","category":"Arrows","tags":["direction","north"],"variants":{"outline":"eda9"}},"arrow-wave-right-down":{"name":"arrow-wave-right-down","category":"Arrows","tags":["direction","south"],"variants":{"outline":"edaa"}},"arrow-wave-right-up":{"name":"arrow-wave-right-up","category":"Arrows","tags":["direction","north"],"variants":{"outline":"edab"}},"arrow-zig-zag":{"name":"arrow-zig-zag","category":"Arrows","tags":["direction","cursor","pointer","turn","move"],"variants":{"outline":"f4a7"}},"arrows-cross":{"name":"arrows-cross","category":"Arrows","tags":["direction","north","south"],"variants":{"outline":"effe"}},"arrows-diagonal-2":{"name":"arrows-diagonal-2","category":"Arrows","tags":["zoom","corners","stretch"],"variants":{"outline":"ea26"}},"arrows-diagonal-minimize-2":{"name":"arrows-diagonal-minimize-2","category":"Arrows","tags":["direction","south","north"],"variants":{"outline":"ef38"}},"arrows-diagonal-minimize":{"name":"arrows-diagonal-minimize","category":"Arrows","tags":["direction","south","north"],"variants":{"outline":"ef39"}},"arrows-diagonal":{"name":"arrows-diagonal","category":"Arrows","tags":["zoom","corners","stretch"],"variants":{"outline":"ea27"}},"arrows-diff":{"name":"arrows-diff","category":"Arrows","tags":["direction","right","left","west","east"],"variants":{"outline":"f296"}},"arrows-double-ne-sw":{"name":"arrows-double-ne-sw","category":"Arrows","tags":["direction","north","south"],"variants":{"outline":"edde"}},"arrows-double-nw-se":{"name":"arrows-double-nw-se","category":"Arrows","tags":["direction","north","south"],"variants":{"outline":"eddf"}},"arrows-double-se-nw":{"name":"arrows-double-se-nw","category":"Arrows","tags":["direction","north","south"],"variants":{"outline":"ede0"}},"arrows-double-sw-ne":{"name":"arrows-double-sw-ne","category":"Arrows","tags":["direction","north","south"],"variants":{"outline":"ede1"}},"arrows-down-up":{"name":"arrows-down-up","category":"Arrows","tags":["direction","north","south"],"variants":{"outline":"edac"}},"arrows-down":{"name":"arrows-down","category":"Arrows","tags":["direction","south"],"variants":{"outline":"edad"}},"arrows-exchange-2":{"name":"arrows-exchange-2","category":"Arrows","tags":["direction","west","east"],"variants":{"outline":"f1f3"}},"arrows-exchange":{"name":"arrows-exchange","category":"Arrows","tags":["direction","west","east"],"variants":{"outline":"f1f4"}},"arrows-horizontal":{"name":"arrows-horizontal","category":"Arrows","tags":["zoom","stretch","left","right"],"variants":{"outline":"eb59"}},"arrows-join-2":{"name":"arrows-join-2","category":"Arrows","tags":["direction","east"],"variants":{"outline":"edae"}},"arrows-join":{"name":"arrows-join","category":"Arrows","tags":["direction","east"],"variants":{"outline":"edaf"}},"arrows-left-down":{"name":"arrows-left-down","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ee00"}},"arrows-left-right":{"name":"arrows-left-right","category":"Arrows","tags":["direction","east","west"],"variants":{"outline":"edb0"}},"arrows-left":{"name":"arrows-left","category":"Arrows","tags":["direction","west"],"variants":{"outline":"edb1"}},"arrows-maximize":{"name":"arrows-maximize","category":"Arrows","tags":["fullscreen","expand"],"variants":{"outline":"ea28"}},"arrows-minimize":{"name":"arrows-minimize","category":"Arrows","tags":["fullscreen","exit","close"],"variants":{"outline":"ea29"}},"arrows-move-horizontal":{"name":"arrows-move-horizontal","category":"Arrows","tags":["direction","west","east","left","right"],"variants":{"outline":"f22d"}},"arrows-move-vertical":{"name":"arrows-move-vertical","category":"Arrows","tags":["direction","up","north","south","down","higher","lower"],"variants":{"outline":"f22e"}},"arrows-move":{"name":"arrows-move","category":"Arrows","tags":["direction","navigation","left","right","up","down","north","south","west","east","higher","lower"],"variants":{"outline":"f22f"}},"arrows-random":{"name":"arrows-random","category":"Arrows","tags":["direction","north","south","west","east"],"variants":{"outline":"f095"}},"arrows-right-down":{"name":"arrows-right-down","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ee01"}},"arrows-right-left":{"name":"arrows-right-left","category":"Arrows","tags":["direction","east","west"],"variants":{"outline":"edb2"}},"arrows-right":{"name":"arrows-right","category":"Arrows","tags":["direction","east"],"variants":{"outline":"edb3"}},"arrows-shuffle-2":{"name":"arrows-shuffle-2","category":"Arrows","tags":["direction","random","cross","mix","music"],"variants":{"outline":"efff"}},"arrows-shuffle":{"name":"arrows-shuffle","category":"Arrows","tags":["direction","random","cross","mix","music"],"variants":{"outline":"f000"}},"arrows-sort":{"name":"arrows-sort","category":"Arrows","tags":["top","bottom","parallel","order"],"variants":{"outline":"eb5a"}},"arrows-split-2":{"name":"arrows-split-2","category":"Arrows","tags":["direction","navigation","east"],"variants":{"outline":"edb4"}},"arrows-split":{"name":"arrows-split","category":"Arrows","tags":["direction","navigation","east"],"variants":{"outline":"edb5"}},"arrows-transfer-down":{"name":"arrows-transfer-down","category":"Arrows","tags":["direction","south","bottom"],"variants":{"outline":"f2cc"}},"arrows-transfer-up":{"name":"arrows-transfer-up","category":"Arrows","tags":["direction","north","top"],"variants":{"outline":"f2cd"}},"arrows-up-down":{"name":"arrows-up-down","category":"Arrows","tags":["direction","north","south"],"variants":{"outline":"edb6"}},"arrows-up-left":{"name":"arrows-up-left","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ee02"}},"arrows-up-right":{"name":"arrows-up-right","category":"Arrows","tags":["drag","move"],"variants":{"outline":"ee03"}},"arrows-up":{"name":"arrows-up","category":"Arrows","tags":["direction","north"],"variants":{"outline":"edb7"}},"arrows-vertical":{"name":"arrows-vertical","category":"Arrows","tags":["expand","stretch","top","bottom"],"variants":{"outline":"eb5b"}},"artboard-off":{"name":"artboard-off","category":"Design","tags":["graphics","drawing","design","art","canvas"],"variants":{"outline":"f0ae"}},"artboard":{"name":"artboard","category":"Design","tags":["graphics","drawing","design","art","canvas"],"variants":{"outline":"ea2a","filled":"fa83"}},"article-off":{"name":"article-off","category":"","tags":["news","newspaper","media","blog"],"variants":{"outline":"f3bf"}},"article":{"name":"article","category":"","tags":["news","newspaper","media","blog"],"variants":{"outline":"f1e2","filled":"f7da"}},"aspect-ratio-off":{"name":"aspect-ratio-off","category":"Media","tags":["size","dimension","width","height","orientation"],"variants":{"outline":"f0af"}},"aspect-ratio":{"name":"aspect-ratio","category":"Media","tags":["size","dimension","width","height","orientation"],"variants":{"outline":"ed30","filled":"f7db"}},"assembly-off":{"name":"assembly-off","category":"Development","tags":["assembly","engineering","manufacturing","production","robotics"],"variants":{"outline":"f3c0"}},"assembly":{"name":"assembly","category":"Development","tags":["assembly","engineering","manufacturing","production","robotics"],"variants":{"outline":"f24d","filled":"fe9e"}},"asset":{"name":"asset","category":"Development","tags":["assembly","engineering","manufacturing","production","robotics"],"variants":{"outline":"f1ce","filled":"fe9d"}},"asterisk-simple":{"name":"asterisk-simple","category":"Text","tags":["star","password","security"],"variants":{"outline":"efd4"}},"asterisk":{"name":"asterisk","category":"Text","tags":["star","password","security"],"variants":{"outline":"efd5"}},"at-off":{"name":"at-off","category":"Text","tags":["email","message","mention","sign","@"],"variants":{"outline":"f0b0"}},"at":{"name":"at","category":"Text","tags":["email","message","mention","sign","@"],"variants":{"outline":"ea2b"}},"atom-2":{"name":"atom-2","category":"","tags":["unit","element","part","electrons","protons","neutrons"],"variants":{"outline":"ebdf","filled":"f71b"}},"atom-off":{"name":"atom-off","category":"","tags":["unit","element","part","electrons"],"variants":{"outline":"f0f9"}},"atom":{"name":"atom","category":"","tags":["unit","element","part","electrons"],"variants":{"outline":"eb79"}},"augmented-reality-2":{"name":"augmented-reality-2","category":"","tags":["technology","dimensional","geometry"],"variants":{"outline":"f37e"}},"augmented-reality-off":{"name":"augmented-reality-off","category":"","tags":["technology","dimensional","geometry"],"variants":{"outline":"f3c1"}},"augmented-reality":{"name":"augmented-reality","category":"","tags":["technology","dimensional","geometry"],"variants":{"outline":"f023"}},"auth-2fa":{"name":"auth-2fa","category":"","tags":["login","password","verification","code","two-step"],"variants":{"outline":"eca0"}},"automatic-gearbox":{"name":"automatic-gearbox","category":"Vehicles","tags":[],"variants":{"outline":"fc89"}},"automation":{"name":"automation","category":"","tags":[],"variants":{"outline":"fef8"}},"avocado":{"name":"avocado","category":"","tags":[],"variants":{"outline":"fd8e"}},"award-off":{"name":"award-off","category":"","tags":["prize","reward","competition","contest","win"],"variants":{"outline":"f0fa"}},"award":{"name":"award","category":"","tags":["prize","reward","competition","contest","win"],"variants":{"outline":"ea2c","filled":"f71c"}},"axe":{"name":"axe","category":"","tags":["blade","wood","tool","hatchet"],"variants":{"outline":"ef9f"}},"axis-x":{"name":"axis-x","category":"Arrows","tags":["math","geometry"],"variants":{"outline":"ef45"}},"axis-y":{"name":"axis-y","category":"Arrows","tags":["math","geometry"],"variants":{"outline":"ef46"}},"baby-bottle":{"name":"baby-bottle","category":"Health","tags":["kid","milk","child","food","drink","feeding"],"variants":{"outline":"f5d2"}},"baby-carriage":{"name":"baby-carriage","category":"Health","tags":["child","infant","cradle","pram"],"variants":{"outline":"f05d","filled":"fe9c"}},"background":{"name":"background","category":"","tags":["backdrop","setting","context","environment","scene","ambient","surroundings","scape","contextual","atmosphere"],"variants":{"outline":"fd2c"}},"backhoe":{"name":"backhoe","category":"Vehicles","tags":["rear","equipment","digger","excavation","tractor","loader","construction","site","excavator"],"variants":{"outline":"ed86"}},"backpack-off":{"name":"backpack-off","category":"","tags":["education","school","learning","adventure","travel"],"variants":{"outline":"f3c2"}},"backpack":{"name":"backpack","category":"","tags":["education","school","learning","adventure","travel"],"variants":{"outline":"ef47"}},"backslash":{"name":"backslash","category":"Math","tags":[],"variants":{"outline":"fab9"}},"backspace":{"name":"backspace","category":"Text","tags":["delete","remove","eliminate"],"variants":{"outline":"ea2d","filled":"f7dc"}},"badge-3d":{"name":"badge-3d","category":"Badges","tags":["shape","movie","glasses","film"],"variants":{"outline":"f555","filled":"fe9b"}},"badge-4k":{"name":"badge-4k","category":"Badges","tags":["shape","high","resolution","video","display"],"variants":{"outline":"f556","filled":"fe9a"}},"badge-8k":{"name":"badge-8k","category":"Badges","tags":["shape","high","resolution","video","display"],"variants":{"outline":"f557","filled":"fe99"}},"badge-ad-off":{"name":"badge-ad-off","category":"","tags":[],"variants":{"outline":"fd8f"}},"badge-ad":{"name":"badge-ad","category":"Badges","tags":["shape","marketing","media","promotion","advertising","advertisement"],"variants":{"outline":"f558","filled":"fe98"}},"badge-ar":{"name":"badge-ar","category":"Badges","tags":["shape","agumented","reality","techonoly"],"variants":{"outline":"f559","filled":"fe97"}},"badge-cc":{"name":"badge-cc","category":"Badges","tags":["shape","accessiblity","subtitles","youtube","netflix"],"variants":{"outline":"f55a","filled":"fe96"}},"badge-hd":{"name":"badge-hd","category":"Badges","tags":["shape","video","display","resolution","movie"],"variants":{"outline":"f55b","filled":"fe95"}},"badge-off":{"name":"badge-off","category":"","tags":["army","badge","military","rank","soldier","war"],"variants":{"outline":"f0fb"}},"badge-sd":{"name":"badge-sd","category":"Badges","tags":["shape","card","memory","sim","phone"],"variants":{"outline":"f55c","filled":"fe94"}},"badge-tm":{"name":"badge-tm","category":"Badges","tags":["shape","brand","copyright","logo","product"],"variants":{"outline":"f55d","filled":"fe93"}},"badge-vo":{"name":"badge-vo","category":"Badges","tags":["shape","mic","film","netflix","voice","video"],"variants":{"outline":"f55e","filled":"fe92"}},"badge-vr":{"name":"badge-vr","category":"Badges","tags":["shape","technology","virtual","reality","device"],"variants":{"outline":"f55f","filled":"fe91"}},"badge-wc":{"name":"badge-wc","category":"Badges","tags":["shape","toilet","restroom","male","female"],"variants":{"outline":"f560","filled":"fe90"}},"badge":{"name":"badge","category":"","tags":["army","badge","military","rank","soldier","war"],"variants":{"outline":"efc2","filled":"f667"}},"badges-off":{"name":"badges-off","category":"","tags":["army","badge","military","rank","soldier","war"],"variants":{"outline":"f0fc"}},"badges":{"name":"badges","category":"","tags":["army","badge","military","rank","soldier","war"],"variants":{"outline":"efc3","filled":"f7dd"}},"baguette":{"name":"baguette","category":"Food","tags":["bread","french","breakfast","bakery","loaf"],"variants":{"outline":"f3a5"}},"ball-american-football-off":{"name":"ball-american-football-off","category":"Sport","tags":["sport","game","sportsman","play","match","pitch"],"variants":{"outline":"f3c3"}},"ball-american-football":{"name":"ball-american-football","category":"Sport","tags":["sport","game","sportsman","play","match","pitch"],"variants":{"outline":"ee04"}},"ball-baseball":{"name":"ball-baseball","category":"Sport","tags":["sport","game","competition","pitch"],"variants":{"outline":"efa0"}},"ball-basketball":{"name":"ball-basketball","category":"Sport","tags":["game","round","quarter","basket","nba"],"variants":{"outline":"ec28"}},"ball-bowling":{"name":"ball-bowling","category":"Sport","tags":["round","strike","spare","pin"],"variants":{"outline":"ec29"}},"ball-football-off":{"name":"ball-football-off","category":"Sport","tags":["sport","game","sportsman","play","match","pitch"],"variants":{"outline":"ee05"}},"ball-football":{"name":"ball-football","category":"Sport","tags":["sport","game","sportsman","play","match","pitch"],"variants":{"outline":"ee06"}},"ball-tennis":{"name":"ball-tennis","category":"Sport","tags":["game","set","match","court","racket"],"variants":{"outline":"ec2a"}},"ball-volleyball":{"name":"ball-volleyball","category":"Sport","tags":["point","set","match","attacker","ace","setter","serve"],"variants":{"outline":"ec2b"}},"balloon-off":{"name":"balloon-off","category":"","tags":["party","birthday","decoration"],"variants":{"outline":"f0fd"}},"balloon":{"name":"balloon","category":"","tags":["party","birthday","decoration"],"variants":{"outline":"ef3a","filled":"fa84"}},"ballpen-off":{"name":"ballpen-off","category":"Text","tags":["write","school","education","stationery","text"],"variants":{"outline":"f0b1"}},"ballpen":{"name":"ballpen","category":"Text","tags":["write","school","education","stationery","text"],"variants":{"outline":"f06e","filled":"fa85"}},"ban":{"name":"ban","category":"","tags":["no","reject","restriction","prohibited"],"variants":{"outline":"ea2e"}},"bandage-off":{"name":"bandage-off","category":"Health","tags":["patch","wound","cut","pain"],"variants":{"outline":"f3c4"}},"bandage":{"name":"bandage","category":"Health","tags":["patch","wound","cut","pain"],"variants":{"outline":"eb7a","filled":"f7de"}},"barbell-off":{"name":"barbell-off","category":"Sport","tags":["weight","gym","fitness","powerlift"],"variants":{"outline":"f0b2"}},"barbell":{"name":"barbell","category":"Sport","tags":["weight","gym","fitness","powerlift"],"variants":{"outline":"eff0","filled":"fe8f"}},"barcode-off":{"name":"barcode-off","category":"","tags":["product","shop","scan","supermarket"],"variants":{"outline":"f0b3"}},"barcode":{"name":"barcode","category":"","tags":["product","shop","scan","supermarket"],"variants":{"outline":"ebc6"}},"barrel-off":{"name":"barrel-off","category":"","tags":["beer","wine","fuel","tank","cask"],"variants":{"outline":"f0fe"}},"barrel":{"name":"barrel","category":"","tags":["beer","wine","fuel","tank","cask"],"variants":{"outline":"f0b4"}},"barrier-block-off":{"name":"barrier-block-off","category":"","tags":["construction","stop","traffic","barricade","street"],"variants":{"outline":"f0b5"}},"barrier-block":{"name":"barrier-block","category":"","tags":["construction","stop","traffic","barricade","street"],"variants":{"outline":"f00e","filled":"fe8e"}},"baseline-density-large":{"name":"baseline-density-large","category":"Text","tags":["large","sizeable","oversized","big","bulky","massive","huge","gigantic","substantial","enormous"],"variants":{"outline":"f9f0"}},"baseline-density-medium":{"name":"baseline-density-medium","category":"Text","tags":["medium","average","moderate","middle","intermediate","standard","midsize","usual","typical","regular"],"variants":{"outline":"f9f1"}},"baseline-density-small":{"name":"baseline-density-small","category":"Text","tags":["small","tiny","little","miniature","compact","petite","mini","micro","diminutive","wee"],"variants":{"outline":"f9f2"}},"baseline":{"name":"baseline","category":"Text","tags":["align","arrow","bottom","format","vertical"],"variants":{"outline":"f024"}},"basket-bolt":{"name":"basket-bolt","category":"","tags":[],"variants":{"outline":"fb43"}},"basket-cancel":{"name":"basket-cancel","category":"","tags":[],"variants":{"outline":"fb44"}},"basket-check":{"name":"basket-check","category":"","tags":[],"variants":{"outline":"fb45"}},"basket-code":{"name":"basket-code","category":"","tags":[],"variants":{"outline":"fb46"}},"basket-cog":{"name":"basket-cog","category":"","tags":[],"variants":{"outline":"fb47"}},"basket-discount":{"name":"basket-discount","category":"","tags":[],"variants":{"outline":"fb48"}},"basket-dollar":{"name":"basket-dollar","category":"","tags":[],"variants":{"outline":"fb49"}},"basket-down":{"name":"basket-down","category":"","tags":[],"variants":{"outline":"fb4a"}},"basket-exclamation":{"name":"basket-exclamation","category":"","tags":[],"variants":{"outline":"fb4b"}},"basket-heart":{"name":"basket-heart","category":"","tags":[],"variants":{"outline":"fb4c"}},"basket-minus":{"name":"basket-minus","category":"","tags":[],"variants":{"outline":"fb4d"}},"basket-off":{"name":"basket-off","category":"E-commerce","tags":["shop","store","online","shopping"],"variants":{"outline":"f0b6"}},"basket-pause":{"name":"basket-pause","category":"","tags":[],"variants":{"outline":"fb4e"}},"basket-pin":{"name":"basket-pin","category":"","tags":[],"variants":{"outline":"fb4f"}},"basket-plus":{"name":"basket-plus","category":"","tags":[],"variants":{"outline":"fb50"}},"basket-question":{"name":"basket-question","category":"","tags":[],"variants":{"outline":"fb51"}},"basket-search":{"name":"basket-search","category":"","tags":[],"variants":{"outline":"fb52"}},"basket-share":{"name":"basket-share","category":"","tags":[],"variants":{"outline":"fb53"}},"basket-star":{"name":"basket-star","category":"","tags":[],"variants":{"outline":"fb54"}},"basket-up":{"name":"basket-up","category":"","tags":[],"variants":{"outline":"fb55"}},"basket-x":{"name":"basket-x","category":"","tags":[],"variants":{"outline":"fb56"}},"basket":{"name":"basket","category":"E-commerce","tags":["shop","store","online","shopping"],"variants":{"outline":"ebe1","filled":"f7df"}},"bat":{"name":"bat","category":"Animals","tags":["animal","halloween","vampire","scary","blood"],"variants":{"outline":"f284"}},"bath-off":{"name":"bath-off","category":"","tags":["water","clean","hygiene","bathroom","tub"],"variants":{"outline":"f0ff"}},"bath":{"name":"bath","category":"","tags":["water","clean","hygiene","bathroom","tub"],"variants":{"outline":"ef48","filled":"f71d"}},"battery-1":{"name":"battery-1","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ea2f","filled":"f71e"}},"battery-2":{"name":"battery-2","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ea30","filled":"f71f"}},"battery-3":{"name":"battery-3","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ea31","filled":"f720"}},"battery-4":{"name":"battery-4","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ea32","filled":"f721"}},"battery-automotive":{"name":"battery-automotive","category":"Vehicles","tags":["vehicle","charge","motor","current","car","electricity","electric","power"],"variants":{"outline":"ee07"}},"battery-charging-2":{"name":"battery-charging-2","category":"Devices","tags":["charge","energy","power","electricity"],"variants":{"outline":"ef3b"}},"battery-charging":{"name":"battery-charging","category":"Devices","tags":["charge","energy","power","electricity"],"variants":{"outline":"ea33"}},"battery-eco":{"name":"battery-eco","category":"Devices","tags":["ecology","charge","energy","power","electricity"],"variants":{"outline":"ef3c"}},"battery-exclamation":{"name":"battery-exclamation","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ff1d"}},"battery-off":{"name":"battery-off","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ed1c"}},"battery-vertical-1":{"name":"battery-vertical-1","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ff1c"}},"battery-vertical-2":{"name":"battery-vertical-2","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ff1b"}},"battery-vertical-3":{"name":"battery-vertical-3","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ff1a"}},"battery-vertical-4":{"name":"battery-vertical-4","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ff19"}},"battery-vertical-charging-2":{"name":"battery-vertical-charging-2","category":"Devices","tags":["charge","energy","power","electricity"],"variants":{"outline":"ff18"}},"battery-vertical-charging":{"name":"battery-vertical-charging","category":"Devices","tags":["charge","energy","power","electricity"],"variants":{"outline":"ff17"}},"battery-vertical-eco":{"name":"battery-vertical-eco","category":"Devices","tags":["ecology","charge","energy","power","electricity"],"variants":{"outline":"ff16"}},"battery-vertical-exclamation":{"name":"battery-vertical-exclamation","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ff15"}},"battery-vertical-off":{"name":"battery-vertical-off","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ff14"}},"battery-vertical":{"name":"battery-vertical","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ff13"}},"battery":{"name":"battery","category":"Devices","tags":["energy","power","electricity"],"variants":{"outline":"ea34","filled":"f668"}},"beach-off":{"name":"beach-off","category":"Map","tags":["sand","sun","umbrella","vacation","travel"],"variants":{"outline":"f0b7"}},"beach":{"name":"beach","category":"Map","tags":["sand","sun","umbrella","vacation","travel"],"variants":{"outline":"ef3d"}},"bed-flat":{"name":"bed-flat","category":"","tags":["mattress","sofa","couch","futon","sleeping","restful","horizontal","recline","lying","horizontal-bed"],"variants":{"outline":"fca1","filled":"fe8d"}},"bed-off":{"name":"bed-off","category":"Map","tags":["sleep","night","bedroom","rest"],"variants":{"outline":"f100"}},"bed":{"name":"bed","category":"Map","tags":["furniture","sleeping","comfortable","bedroom","mattress","resting","relax","sleep","futon","cozy"],"variants":{"outline":"eb5c","filled":"f7e0"}},"beer-off":{"name":"beer-off","category":"Food","tags":["alcohol","drink","beverage","bar","pub"],"variants":{"outline":"f101"}},"beer":{"name":"beer","category":"Food","tags":["alcohol","drink","beverage","bar","pub"],"variants":{"outline":"efa1","filled":"f7e1"}},"bell-bolt":{"name":"bell-bolt","category":"System","tags":[],"variants":{"outline":"f812"}},"bell-cancel":{"name":"bell-cancel","category":"System","tags":[],"variants":{"outline":"f813"}},"bell-check":{"name":"bell-check","category":"System","tags":[],"variants":{"outline":"f814"}},"bell-code":{"name":"bell-code","category":"System","tags":[],"variants":{"outline":"f815"}},"bell-cog":{"name":"bell-cog","category":"System","tags":[],"variants":{"outline":"f816"}},"bell-dollar":{"name":"bell-dollar","category":"System","tags":[],"variants":{"outline":"f817"}},"bell-down":{"name":"bell-down","category":"System","tags":[],"variants":{"outline":"f818"}},"bell-exclamation":{"name":"bell-exclamation","category":"System","tags":[],"variants":{"outline":"f819"}},"bell-heart":{"name":"bell-heart","category":"System","tags":[],"variants":{"outline":"f81a"}},"bell-minus":{"name":"bell-minus","category":"System","tags":["notification","alarm","alert","remove","ring"],"variants":{"outline":"ede2","filled":"f722"}},"bell-off":{"name":"bell-off","category":"System","tags":["alarm","sound","notification"],"variants":{"outline":"ece9"}},"bell-pause":{"name":"bell-pause","category":"System","tags":[],"variants":{"outline":"f81b"}},"bell-pin":{"name":"bell-pin","category":"System","tags":[],"variants":{"outline":"f81c"}},"bell-plus":{"name":"bell-plus","category":"System","tags":["alarm","notification","alert","set"],"variants":{"outline":"ede3","filled":"f723"}},"bell-question":{"name":"bell-question","category":"System","tags":[],"variants":{"outline":"f81d"}},"bell-ringing-2":{"name":"bell-ringing-2","category":"System","tags":["alarm","sound","notification"],"variants":{"outline":"ede4","filled":"f724"}},"bell-ringing":{"name":"bell-ringing","category":"System","tags":["alarm","sound","notification"],"variants":{"outline":"ed07","filled":"f725"}},"bell-school":{"name":"bell-school","category":"","tags":["alarm","education","alert","sound","notification","study"],"variants":{"outline":"f05e"}},"bell-search":{"name":"bell-search","category":"System","tags":[],"variants":{"outline":"f81e"}},"bell-share":{"name":"bell-share","category":"System","tags":[],"variants":{"outline":"f81f"}},"bell-star":{"name":"bell-star","category":"System","tags":[],"variants":{"outline":"f820"}},"bell-up":{"name":"bell-up","category":"System","tags":[],"variants":{"outline":"f821"}},"bell-x":{"name":"bell-x","category":"System","tags":["alarm","ring","sound","alert","disabled"],"variants":{"outline":"ede5","filled":"f726"}},"bell-z":{"name":"bell-z","category":"System","tags":["alarm","bell","clock","date","snooze","time"],"variants":{"outline":"eff1","filled":"f727"}},"bell":{"name":"bell","category":"System","tags":["alarm","sound","notification"],"variants":{"outline":"ea35","filled":"f669"}},"beta":{"name":"beta","category":"Letters","tags":["letter","alphabet","greek","math"],"variants":{"outline":"f544"}},"bible":{"name":"bible","category":"","tags":["religion","holy","christian","miracle","church"],"variants":{"outline":"efc4"}},"bike-off":{"name":"bike-off","category":"Vehicles","tags":["cycling","bicycle","sport","wheel"],"variants":{"outline":"f0b8"}},"bike":{"name":"bike","category":"Vehicles","tags":["cycling","bicycle","sport","wheel"],"variants":{"outline":"ea36"}},"binary-off":{"name":"binary-off","category":"Computers","tags":["binary"],"variants":{"outline":"f3c5"}},"binary-tree-2":{"name":"binary-tree-2","category":"Computers","tags":["data","diversity","it","math"],"variants":{"outline":"f5d3","filled":"ff65"}},"binary-tree":{"name":"binary-tree","category":"Computers","tags":["data","diversity","it","math"],"variants":{"outline":"f5d4","filled":"ff64"}},"binary":{"name":"binary","category":"Computers","tags":["binary"],"variants":{"outline":"ee08"}},"binoculars":{"name":"binoculars","category":"","tags":["birds","explorer","field glasses","magnifying eye glasses","observe","view","watch"],"variants":{"outline":"fefe","filled":"ff0b"}},"biohazard-off":{"name":"biohazard-off","category":"Symbols","tags":["danger","radioactive","toxic","microbe","virus","biotoxin"],"variants":{"outline":"f0b9"}},"biohazard":{"name":"biohazard","category":"Symbols","tags":["danger","radioactive","toxic","microbe","virus","biotoxin"],"variants":{"outline":"ecb8","filled":"fe8c"}},"blade":{"name":"blade","category":"","tags":["razor","beard","barber","cut"],"variants":{"outline":"f4bd","filled":"f7e2"}},"bleach-chlorine":{"name":"bleach-chlorine","category":"Laundry","tags":["clothing","washing","chemical","laundry","detergent","clean"],"variants":{"outline":"f2f0"}},"bleach-no-chlorine":{"name":"bleach-no-chlorine","category":"Laundry","tags":["clothing","washing","chemical","laundry"],"variants":{"outline":"f2f1"}},"bleach-off":{"name":"bleach-off","category":"Laundry","tags":["clothing","washing","chemical","laundry"],"variants":{"outline":"f2f2"}},"bleach":{"name":"bleach","category":"Laundry","tags":["clothing","washing","chemical","laundry"],"variants":{"outline":"f2f3"}},"blend-mode":{"name":"blend-mode","category":"Design","tags":[],"variants":{"outline":"feb0"}},"blender":{"name":"blender","category":"","tags":["mixer","kitchen","appliance","blend","food","smoothie","processing","mixing","grind","blending"],"variants":{"outline":"fca2"}},"blob":{"name":"blob","category":"","tags":[],"variants":{"outline":"feaf","filled":"feb1"}},"blockquote":{"name":"blockquote","category":"Text","tags":["citation","quotation","saying","text","section","style","styling","css"],"variants":{"outline":"ee09"}},"bluetooth-connected":{"name":"bluetooth-connected","category":"Devices","tags":["wireless","connection","connect"],"variants":{"outline":"ecea"}},"bluetooth-off":{"name":"bluetooth-off","category":"Devices","tags":["wireless","connection","connect"],"variants":{"outline":"eceb"}},"bluetooth-x":{"name":"bluetooth-x","category":"Devices","tags":["multimedia","technology","disabled","connection","communication"],"variants":{"outline":"f081"}},"bluetooth":{"name":"bluetooth","category":"Devices","tags":["wireless","connection","connect"],"variants":{"outline":"ea37"}},"blur-off":{"name":"blur-off","category":"Design","tags":["edit","photo","photography","tool"],"variants":{"outline":"f3c6"}},"blur":{"name":"blur","category":"Design","tags":["edit","photo","photography","tool"],"variants":{"outline":"ef8c"}},"bmp":{"name":"bmp","category":"Extensions","tags":["format","filetype","file","document"],"variants":{"outline":"f3a6"}},"body-scan":{"name":"body-scan","category":"System","tags":["medical","health","biometric","wellness","check-up","diagnostic","physical","anatomy","examination","body-health"],"variants":{"outline":"fca3"}},"bold-off":{"name":"bold-off","category":"Text","tags":["font","style","boldface"],"variants":{"outline":"f0ba"}},"bold":{"name":"bold","category":"Text","tags":["font","style","boldface"],"variants":{"outline":"eb7b"}},"bolt-off":{"name":"bolt-off","category":"","tags":["energy","power","electricity","storm"],"variants":{"outline":"ecec"}},"bolt":{"name":"bolt","category":"","tags":["energy","power","electricity","storm"],"variants":{"outline":"ea38"}},"bomb":{"name":"bomb","category":"","tags":["explosion","weapon","military","war"],"variants":{"outline":"f59c","filled":"fa86"}},"bone-off":{"name":"bone-off","category":"Food","tags":["skeleton","human","dog","body"],"variants":{"outline":"f0bb"}},"bone":{"name":"bone","category":"Food","tags":["skeleton","human","dog","body"],"variants":{"outline":"edb8","filled":"fe8b"}},"bong-off":{"name":"bong-off","category":"","tags":["smoke","smoking","cannabis","marijuana","drugs"],"variants":{"outline":"f3c7"}},"bong":{"name":"bong","category":"","tags":["smoke","smoking","cannabis","marijuana","drugs"],"variants":{"outline":"f3a7"}},"book-2":{"name":"book-2","category":"Document","tags":["read","dictionary","magazine","library","booklet","novel"],"variants":{"outline":"efc5"}},"book-download":{"name":"book-download","category":"Document","tags":["education","e-book","digital"],"variants":{"outline":"f070"}},"book-off":{"name":"book-off","category":"Document","tags":["read","dictionary","magazine","library","booklet","novel"],"variants":{"outline":"f0bc"}},"book-upload":{"name":"book-upload","category":"Document","tags":["e-book","e-learning","education","reading"],"variants":{"outline":"f071"}},"book":{"name":"book","category":"Document","tags":["read","dictionary","magazine","library","booklet","novel"],"variants":{"outline":"ea39","filled":"fa87"}},"bookmark-ai":{"name":"bookmark-ai","category":"","tags":[],"variants":{"outline":"fc8a"}},"bookmark-edit":{"name":"bookmark-edit","category":"Document","tags":[],"variants":{"outline":"fa5e"}},"bookmark-minus":{"name":"bookmark-minus","category":"Document","tags":[],"variants":{"outline":"fa5f"}},"bookmark-off":{"name":"bookmark-off","category":"Document","tags":["read","clip","marker","tag"],"variants":{"outline":"eced"}},"bookmark-plus":{"name":"bookmark-plus","category":"Document","tags":[],"variants":{"outline":"fa60"}},"bookmark-question":{"name":"bookmark-question","category":"Document","tags":[],"variants":{"outline":"fa61"}},"bookmark":{"name":"bookmark","category":"Document","tags":["read","clip","marker","tag"],"variants":{"outline":"ea3a","filled":"fa88"}},"bookmarks-off":{"name":"bookmarks-off","category":"Document","tags":["read","clip","marker","tag"],"variants":{"outline":"f0bd"}},"bookmarks":{"name":"bookmarks","category":"Document","tags":["read","clip","marker","tag"],"variants":{"outline":"ed08","filled":"fb1f"}},"books-off":{"name":"books-off","category":"Document","tags":["education","learning","reading","school","library"],"variants":{"outline":"f0be"}},"books":{"name":"books","category":"Document","tags":["education","learning","reading","school","library"],"variants":{"outline":"eff2"}},"boom":{"name":"boom","category":"","tags":[],"variants":{"outline":"fdbe","filled":"fe8a"}},"border-all":{"name":"border-all","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea3b"}},"border-bottom-plus":{"name":"border-bottom-plus","category":"","tags":[],"variants":{"outline":"fdbd"}},"border-bottom":{"name":"border-bottom","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea3c"}},"border-corner-ios":{"name":"border-corner-ios","category":"","tags":[],"variants":{"outline":"fd98"}},"border-corner-pill":{"name":"border-corner-pill","category":"Design","tags":[],"variants":{"outline":"fd62"}},"border-corner-rounded":{"name":"border-corner-rounded","category":"Design","tags":[],"variants":{"outline":"fd63"}},"border-corner-square":{"name":"border-corner-square","category":"Design","tags":[],"variants":{"outline":"fd64"}},"border-corners":{"name":"border-corners","category":"Design","tags":[],"variants":{"outline":"f7a0"}},"border-horizontal":{"name":"border-horizontal","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea3d"}},"border-inner":{"name":"border-inner","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea3e"}},"border-left-plus":{"name":"border-left-plus","category":"","tags":[],"variants":{"outline":"fdbc"}},"border-left":{"name":"border-left","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea3f"}},"border-none":{"name":"border-none","category":"Design","tags":["table"],"variants":{"outline":"ea40"}},"border-outer":{"name":"border-outer","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea41"}},"border-radius":{"name":"border-radius","category":"Design","tags":["corner","rounded","line"],"variants":{"outline":"eb7c"}},"border-right-plus":{"name":"border-right-plus","category":"","tags":[],"variants":{"outline":"fdbb"}},"border-right":{"name":"border-right","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea42"}},"border-sides":{"name":"border-sides","category":"Design","tags":[],"variants":{"outline":"f7a1"}},"border-style-2":{"name":"border-style-2","category":"Design","tags":["google","excel","sheets"],"variants":{"outline":"ef22"}},"border-style":{"name":"border-style","category":"Design","tags":["google","excel","sheets"],"variants":{"outline":"ee0a"}},"border-top-plus":{"name":"border-top-plus","category":"","tags":[],"variants":{"outline":"fdba"}},"border-top":{"name":"border-top","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea43"}},"border-vertical":{"name":"border-vertical","category":"Design","tags":["table","side","line"],"variants":{"outline":"ea44"}},"bottle-off":{"name":"bottle-off","category":"Food","tags":["water","drink","beer","energy","wine"],"variants":{"outline":"f3c8"}},"bottle":{"name":"bottle","category":"Food","tags":["water","drink","beer","energy","wine"],"variants":{"outline":"ef0b","filled":"fa89"}},"bounce-left":{"name":"bounce-left","category":"Design","tags":["ball","west","motion","jump"],"variants":{"outline":"f59d","filled":"fb20"}},"bounce-right":{"name":"bounce-right","category":"Design","tags":["ball","east","motion","jump"],"variants":{"outline":"f59e","filled":"fb21"}},"bow":{"name":"bow","category":"Sport","tags":["arrow","archer","hunt","hunter"],"variants":{"outline":"f096","filled":"fe89"}},"bowl-chopsticks":{"name":"bowl-chopsticks","category":"","tags":[],"variants":{"outline":"fd90","filled":"fe88"}},"bowl-spoon":{"name":"bowl-spoon","category":"","tags":[],"variants":{"outline":"fd91","filled":"fe87"}},"bowl":{"name":"bowl","category":"Food","tags":["food","soup","kitchen","vessel"],"variants":{"outline":"f4fa","filled":"fb22"}},"box-align-bottom-left":{"name":"box-align-bottom-left","category":"Design","tags":["cube","side","down","south-west"],"variants":{"outline":"f2ce","filled":"fa8b"}},"box-align-bottom-right":{"name":"box-align-bottom-right","category":"Design","tags":["cube","side","down","south-east"],"variants":{"outline":"f2cf","filled":"fa8c"}},"box-align-bottom":{"name":"box-align-bottom","category":"Design","tags":["rectangle","side","down","south"],"variants":{"outline":"f2a8","filled":"fa8a"}},"box-align-left":{"name":"box-align-left","category":"Design","tags":["rectangle side","west"],"variants":{"outline":"f2a9","filled":"fa8d"}},"box-align-right":{"name":"box-align-right","category":"Design","tags":["rectangle","side","east"],"variants":{"outline":"f2aa","filled":"fa8e"}},"box-align-top-left":{"name":"box-align-top-left","category":"Design","tags":["cube","side","up","north-west"],"variants":{"outline":"f2d0","filled":"fa90"}},"box-align-top-right":{"name":"box-align-top-right","category":"Design","tags":["cube","side","up","north-east"],"variants":{"outline":"f2d1","filled":"fa91"}},"box-align-top":{"name":"box-align-top","category":"Design","tags":["rectangle","side","up","north"],"variants":{"outline":"f2ab","filled":"fa8f"}},"box-margin":{"name":"box-margin","category":"Design","tags":["css","cascading","style","section","space","text","content","outside","container"],"variants":{"outline":"ee0b"}},"box-model-2-off":{"name":"box-model-2-off","category":"Design","tags":["css","cascading","style","section","element","square","website","container"],"variants":{"outline":"f3c9"}},"box-model-2":{"name":"box-model-2","category":"Design","tags":["css","cascading","style","section","element","square","website","container"],"variants":{"outline":"ef23"}},"box-model-off":{"name":"box-model-off","category":"Design","tags":["css","cascading","style","section","element","square","website","container"],"variants":{"outline":"f3ca"}},"box-model":{"name":"box-model","category":"Design","tags":["css","cascading","style","section","element","square","website","container"],"variants":{"outline":"ee0c"}},"box-multiple-0":{"name":"box-multiple-0","category":"Numbers","tags":["css","cascading","style","sheet","background","section","zero","website","layer"],"variants":{"outline":"ee0d"}},"box-multiple-1":{"name":"box-multiple-1","category":"Numbers","tags":["css","cascading","style","sheet","background","section","one","website","layer"],"variants":{"outline":"ee0e"}},"box-multiple-2":{"name":"box-multiple-2","category":"Numbers","tags":["css","cascading","style","sheet","background","section","two","website","layer"],"variants":{"outline":"ee0f"}},"box-multiple-3":{"name":"box-multiple-3","category":"Numbers","tags":["css","cascading","style","sheet","background","section","three","website","layer"],"variants":{"outline":"ee10"}},"box-multiple-4":{"name":"box-multiple-4","category":"Numbers","tags":["css","cascading","style","sheet","background","section","four","website","layer"],"variants":{"outline":"ee11"}},"box-multiple-5":{"name":"box-multiple-5","category":"Numbers","tags":["css","cascading","style","sheet","background","section","five","website","layer"],"variants":{"outline":"ee12"}},"box-multiple-6":{"name":"box-multiple-6","category":"Numbers","tags":["css","cascading","style","sheet","background","section","six","website","layer"],"variants":{"outline":"ee13"}},"box-multiple-7":{"name":"box-multiple-7","category":"Numbers","tags":["css","cascading","style","sheet","background","section","seven","website","layer"],"variants":{"outline":"ee14"}},"box-multiple-8":{"name":"box-multiple-8","category":"Numbers","tags":["css","cascading","style","sheet","background","section","eight","website","layer"],"variants":{"outline":"ee15"}},"box-multiple-9":{"name":"box-multiple-9","category":"Numbers","tags":["css","cascading","style","sheet","background","section","nine","website","layer"],"variants":{"outline":"ee16"}},"box-multiple":{"name":"box-multiple","category":"","tags":["css","cascading","style","sheet","background","section","website","layer"],"variants":{"outline":"ee17"}},"box-off":{"name":"box-off","category":"","tags":["cube","app","application","package","container"],"variants":{"outline":"f102"}},"box-padding":{"name":"box-padding","category":"Design","tags":["css","cascading","style","section","space","text","content","website","container","inside"],"variants":{"outline":"ee18"}},"box":{"name":"box","category":"","tags":["cube","app","application","package","container"],"variants":{"outline":"ea45"}},"braces-off":{"name":"braces-off","category":"Math","tags":["punctuation","additional","information"],"variants":{"outline":"f0bf"}},"braces":{"name":"braces","category":"Math","tags":["punctuation","additional","information"],"variants":{"outline":"ebcc"}},"brackets-angle-off":{"name":"brackets-angle-off","category":"","tags":[],"variants":{"outline":"fcb1"}},"brackets-angle":{"name":"brackets-angle","category":"","tags":[],"variants":{"outline":"fcb2"}},"brackets-contain-end":{"name":"brackets-contain-end","category":"Math","tags":["word","regex","find"],"variants":{"outline":"f1e3"}},"brackets-contain-start":{"name":"brackets-contain-start","category":"Math","tags":["word","regex","find"],"variants":{"outline":"f1e4"}},"brackets-contain":{"name":"brackets-contain","category":"Math","tags":["word","regex","find"],"variants":{"outline":"f1e5"}},"brackets-off":{"name":"brackets-off","category":"Math","tags":["punctuation","additional","information"],"variants":{"outline":"f0c0"}},"brackets":{"name":"brackets","category":"Math","tags":["punctuation","additional","information"],"variants":{"outline":"ebcd"}},"braille":{"name":"braille","category":"","tags":["blind","alphabet","disability","letters","read"],"variants":{"outline":"f545"}},"brain":{"name":"brain","category":"","tags":["mind","human","iq","inteligence","organ"],"variants":{"outline":"f59f"}},"brand-4chan":{"name":"brand-4chan","category":"Brand","tags":["bulletin","board","music","photography","image","share"],"variants":{"outline":"f494"}},"brand-abstract":{"name":"brand-abstract","category":"Brand","tags":["design","software","web","ux"],"variants":{"outline":"f495"}},"brand-adobe-after-effect":{"name":"brand-adobe-after-effect","category":"Brand","tags":[],"variants":{"outline":"ff2a"}},"brand-adobe-illustrator":{"name":"brand-adobe-illustrator","category":"Brand","tags":[],"variants":{"outline":"ff29"}},"brand-adobe-indesign":{"name":"brand-adobe-indesign","category":"Brand","tags":[],"variants":{"outline":"ff28"}},"brand-adobe-photoshop":{"name":"brand-adobe-photoshop","category":"Brand","tags":[],"variants":{"outline":"ff27"}},"brand-adobe-premier":{"name":"brand-adobe-premier","category":"Brand","tags":[],"variants":{"outline":"ff26"}},"brand-adobe-xd":{"name":"brand-adobe-xd","category":"Brand","tags":[],"variants":{"outline":"ff25"}},"brand-adobe":{"name":"brand-adobe","category":"Brand","tags":["photoshop","illustrator","indesign"],"variants":{"outline":"f0dc"}},"brand-adonis-js":{"name":"brand-adonis-js","category":"Brand","tags":["framework","web","app","typescript"],"variants":{"outline":"f496"}},"brand-airbnb":{"name":"brand-airbnb","category":"Brand","tags":["flat","apartment","holiday","vacation","city","break","book"],"variants":{"outline":"ed68"}},"brand-airtable":{"name":"brand-airtable","category":"Brand","tags":["creation of","sharing","database","interface"],"variants":{"outline":"ef6a"}},"brand-algolia":{"name":"brand-algolia","category":"Brand","tags":["web","browser","software","efficient","ai"],"variants":{"outline":"f390"}},"brand-alipay":{"name":"brand-alipay","category":"Brand","tags":["pay","china","electronically","alibaba"],"variants":{"outline":"f7a2"}},"brand-alpine-js":{"name":"brand-alpine-js","category":"Brand","tags":["javascript","programming","coding"],"variants":{"outline":"f324"}},"brand-amazon":{"name":"brand-amazon","category":"Brand","tags":["shopping","online","media","shop","ecommerce"],"variants":{"outline":"f230"}},"brand-amd":{"name":"brand-amd","category":"Brand","tags":["electronics","computer","components","processors"],"variants":{"outline":"f653"}},"brand-amigo":{"name":"brand-amigo","category":"Brand","tags":[],"variants":{"outline":"f5f9"}},"brand-among-us":{"name":"brand-among-us","category":"Brand","tags":["game","crewmate","impostor"],"variants":{"outline":"f205"}},"brand-android":{"name":"brand-android","category":"Brand","tags":["os","company","system","interface","software","logo"],"variants":{"outline":"ec16"}},"brand-angular":{"name":"brand-angular","category":"Brand","tags":["programming","coding","typescript"],"variants":{"outline":"ef6b"}},"brand-ansible":{"name":"brand-ansible","category":"Brand","tags":[],"variants":{"outline":"fa70"}},"brand-ao3":{"name":"brand-ao3","category":"Brand","tags":["open","source","make","webstie","fanfiction"],"variants":{"outline":"f5e8"}},"brand-appgallery":{"name":"brand-appgallery","category":"Brand","tags":["games","apps","online","store","video"],"variants":{"outline":"f231"}},"brand-apple-arcade":{"name":"brand-apple-arcade","category":"Brand","tags":["technology","video","game","service","macos","device","play","online"],"variants":{"outline":"ed69"}},"brand-apple-news":{"name":"brand-apple-news","category":"Brand","tags":[],"variants":{"outline":"ff24"}},"brand-apple-podcast":{"name":"brand-apple-podcast","category":"Brand","tags":["audio","software","music","ios","tvos"],"variants":{"outline":"f1e6"}},"brand-apple":{"name":"brand-apple","category":"Brand","tags":["os","company","system","interface","software","devices","logo"],"variants":{"outline":"ec17","filled":"fd74"}},"brand-appstore":{"name":"brand-appstore","category":"Brand","tags":["shop","online","application","logo"],"variants":{"outline":"ed24"}},"brand-arc":{"name":"brand-arc","category":"Brand","tags":[],"variants":{"outline":"feae"}},"brand-asana":{"name":"brand-asana","category":"Brand","tags":["task","management","project management","manage","collaborate","collaboration","team","teamwork","technology"],"variants":{"outline":"edc5"}},"brand-astro":{"name":"brand-astro","category":"Brand","tags":[],"variants":{"outline":"fdb9"}},"brand-auth0":{"name":"brand-auth0","category":"Brand","tags":[],"variants":{"outline":"fcb3"}},"brand-aws":{"name":"brand-aws","category":"Brand","tags":[],"variants":{"outline":"fa4c"}},"brand-azure":{"name":"brand-azure","category":"Brand","tags":["microsoft","azure","cloud","computing","technology","services","software","platform","it","digital"],"variants":{"outline":"fa4d"}},"brand-backbone":{"name":"brand-backbone","category":"Brand","tags":["javascript","programmers","creation","websites"],"variants":{"outline":"f325"}},"brand-badoo":{"name":"brand-badoo","category":"Brand","tags":["website","communication","chat","social media"],"variants":{"outline":"f206"}},"brand-baidu":{"name":"brand-baidu","category":"Brand","tags":["china","ai","network","company"],"variants":{"outline":"f5e9"}},"brand-bandcamp":{"name":"brand-bandcamp","category":"Brand","tags":["music","website","music company","audio"],"variants":{"outline":"f207"}},"brand-bandlab":{"name":"brand-bandlab","category":"Brand","tags":["make","music","online","cloud","webstie"],"variants":{"outline":"f5fa"}},"brand-beats":{"name":"brand-beats","category":"Brand","tags":["music","audio","headphones","audio equipment"],"variants":{"outline":"f208"}},"brand-behance":{"name":"brand-behance","category":"Brand","tags":["logo","website","adobe","project","views","marks","platform","designer"],"variants":{"outline":"ec6e"}},"brand-bilibili":{"name":"brand-bilibili","category":"Brand","tags":["china","platform","streaming","video"],"variants":{"outline":"f6d2"}},"brand-binance":{"name":"brand-binance","category":"Brand","tags":["website","crypto","cryptocurrency","exchange"],"variants":{"outline":"f5a0"}},"brand-bing":{"name":"brand-bing","category":"Brand","tags":["search","result","find","engine","internet","microsoft","web","technology"],"variants":{"outline":"edc6"}},"brand-bitbucket":{"name":"brand-bitbucket","category":"Brand","tags":["version","control","repository","hosting","atlassian","source","code","development","git","technology"],"variants":{"outline":"edc7"}},"brand-blackberry":{"name":"brand-blackberry","category":"Brand","tags":["phone","mobile","system","operating","os","electronics"],"variants":{"outline":"f568"}},"brand-blender":{"name":"brand-blender","category":"Brand","tags":["software","graphic","3d","animation"],"variants":{"outline":"f326"}},"brand-blogger":{"name":"brand-blogger","category":"Brand","tags":["media","blogging","internet","social","site"],"variants":{"outline":"f35a"}},"brand-bluesky":{"name":"brand-bluesky","category":"Brand","tags":[],"variants":{"outline":"fd75"}},"brand-booking":{"name":"brand-booking","category":"Brand","tags":["flat","apartment","holiday","vacation","city","break","book","rent"],"variants":{"outline":"edc8"}},"brand-bootstrap":{"name":"brand-bootstrap","category":"Brand","tags":["programming","coding","HTML","hardware","javascript","js"],"variants":{"outline":"ef3e"}},"brand-bulma":{"name":"brand-bulma","category":"Brand","tags":["programming","coding","html","css"],"variants":{"outline":"f327"}},"brand-bumble":{"name":"brand-bumble","category":"Brand","tags":["app","dating","social","media","communication"],"variants":{"outline":"f5fb"}},"brand-bunpo":{"name":"brand-bunpo","category":"Brand","tags":["learn","japanese","app","grammatic"],"variants":{"outline":"f4cf"}},"brand-c-sharp":{"name":"brand-c-sharp","category":"Brand","tags":["coding","programming","files","language"],"variants":{"outline":"f003"}},"brand-cake":{"name":"brand-cake","category":"Brand","tags":[],"variants":{"outline":"f7a3"}},"brand-cakephp":{"name":"brand-cakephp","category":"Brand","tags":["framework","make","app","web","php"],"variants":{"outline":"f7af"}},"brand-campaignmonitor":{"name":"brand-campaignmonitor","category":"Brand","tags":["technology","e-mail","site","cm","group"],"variants":{"outline":"f328"}},"brand-carbon":{"name":"brand-carbon","category":"Brand","tags":[],"variants":{"outline":"f348"}},"brand-cashapp":{"name":"brand-cashapp","category":"Brand","tags":["payment","finance","mobile","app","money","transfer"],"variants":{"outline":"f391"}},"brand-chrome":{"name":"brand-chrome","category":"Brand","tags":["browser","internet","web","logo"],"variants":{"outline":"ec18"}},"brand-cinema-4d":{"name":"brand-cinema-4d","category":"Brand","tags":[],"variants":{"outline":"fa71"}},"brand-citymapper":{"name":"brand-citymapper","category":"Brand","tags":["app","transport","public","software"],"variants":{"outline":"f5fc"}},"brand-cloudflare":{"name":"brand-cloudflare","category":"Brand","tags":["cloudflare","web","security","content","delivery","ddos","protection","network","internet","performance","firewall","cdn","website"],"variants":{"outline":"fa4e"}},"brand-codecov":{"name":"brand-codecov","category":"Brand","tags":["coding","analysis","archive","merge"],"variants":{"outline":"f329"}},"brand-codepen":{"name":"brand-codepen","category":"Brand","tags":["logo","community","internet","codes","programing","programmer","source","website","platform","designer"],"variants":{"outline":"ec6f"}},"brand-codesandbox":{"name":"brand-codesandbox","category":"Brand","tags":["online","code","editor","prototyping","prototype","web","app","programming","integrated","development","environment","technology"],"variants":{"outline":"ed6a"}},"brand-cohost":{"name":"brand-cohost","category":"Brand","tags":["web","website","app","social","nodes","network","community","communication","user","post","images","photos","comment","feedback"],"variants":{"outline":"f5d5"}},"brand-coinbase":{"name":"brand-coinbase","category":"Brand","tags":["cryptocurrencies","bitcoin","ethereum","traded company"],"variants":{"outline":"f209"}},"brand-comedy-central":{"name":"brand-comedy-central","category":"Brand","tags":["tv","serial","films","stand-up","skits"],"variants":{"outline":"f217"}},"brand-coreos":{"name":"brand-coreos","category":"Brand","tags":["operating","system","linux","programmers"],"variants":{"outline":"f5fd"}},"brand-couchdb":{"name":"brand-couchdb","category":"Brand","tags":["document","engine","database","json"],"variants":{"outline":"f60f"}},"brand-couchsurfing":{"name":"brand-couchsurfing","category":"Brand","tags":["app","website","accommodation","lodging"],"variants":{"outline":"f392"}},"brand-cpp":{"name":"brand-cpp","category":"Brand","tags":["code","programming","language","coding"],"variants":{"outline":"f5fe"}},"brand-craft":{"name":"brand-craft","category":"Brand","tags":[],"variants":{"outline":"fa72"}},"brand-crunchbase":{"name":"brand-crunchbase","category":"Brand","tags":[],"variants":{"outline":"f7e3"}},"brand-css3":{"name":"brand-css3","category":"Brand","tags":["cascading","style","sheet","programming","development","web","website","technology"],"variants":{"outline":"ed6b"}},"brand-ctemplar":{"name":"brand-ctemplar","category":"Brand","tags":["e-mail","file","sharing","encryption","app","mobile"],"variants":{"outline":"f4d0"}},"brand-cucumber":{"name":"brand-cucumber","category":"Brand","tags":["software","tool","gherkin","programming","ruby","javascript"],"variants":{"outline":"ef6c"}},"brand-cupra":{"name":"brand-cupra","category":"Brand","tags":["car","seat","sport","formentor","ateca","leon"],"variants":{"outline":"f4d1"}},"brand-cypress":{"name":"brand-cypress","category":"Brand","tags":["test","automation","user","interface","javascript"],"variants":{"outline":"f333"}},"brand-d3":{"name":"brand-d3","category":"Brand","tags":["data","charts","javascript","js"],"variants":{"outline":"f24e"}},"brand-databricks":{"name":"brand-databricks","category":"Brand","tags":["databricks","data","analytics","big","science","machine","learning","platform","engineering","processing","ai"],"variants":{"outline":"fc41"}},"brand-days-counter":{"name":"brand-days-counter","category":"Brand","tags":["app","mobile","highlights","days","birthday"],"variants":{"outline":"f4d2"}},"brand-dcos":{"name":"brand-dcos","category":"Brand","tags":["os","operating","system","cloud","services","networking"],"variants":{"outline":"f32a"}},"brand-debian":{"name":"brand-debian","category":"Brand","tags":["operating system","linux","computer","gnu"],"variants":{"outline":"ef57"}},"brand-deezer":{"name":"brand-deezer","category":"Brand","tags":["music","media","sound","singer"],"variants":{"outline":"f78b"}},"brand-deliveroo":{"name":"brand-deliveroo","category":"Brand","tags":["food","online","delivery","supplier"],"variants":{"outline":"f4d3"}},"brand-deno":{"name":"brand-deno","category":"Brand","tags":["software","javascript","programming","typescript"],"variants":{"outline":"f24f"}},"brand-denodo":{"name":"brand-denodo","category":"Brand","tags":["data","managment","cloud","delivery"],"variants":{"outline":"f610"}},"brand-deviantart":{"name":"brand-deviantart","category":"Brand","tags":["logo","community","internet","works","designer","project","presenting","artist","discussion","website","platform"],"variants":{"outline":"ecfb"}},"brand-digg":{"name":"brand-digg","category":"Brand","tags":[],"variants":{"outline":"fa73"}},"brand-dingtalk":{"name":"brand-dingtalk","category":"Brand","tags":["platform","communication","company","mobile"],"variants":{"outline":"f5ea"}},"brand-discord":{"name":"brand-discord","category":"Brand","tags":["app","application","logo","communication","talks","gamers","freeware","platform"],"variants":{"outline":"ece3","filled":"f7e4"}},"brand-disney":{"name":"brand-disney","category":"Brand","tags":["films","castle","serials","magic","fantasia"],"variants":{"outline":"f20a"}},"brand-disqus":{"name":"brand-disqus","category":"Brand","tags":["comment","blog","service","website","online","platform","social","networking","technology"],"variants":{"outline":"edc9"}},"brand-django":{"name":"brand-django","category":"Brand","tags":["creation","web","application","framework"],"variants":{"outline":"f349"}},"brand-docker":{"name":"brand-docker","category":"Brand","tags":["app","development","hub","platform","software","developer","programming","programmer","virtualization","technology"],"variants":{"outline":"edca"}},"brand-doctrine":{"name":"brand-doctrine","category":"Brand","tags":["database","programming","library","php"],"variants":{"outline":"ef6d"}},"brand-dolby-digital":{"name":"brand-dolby-digital","category":"Brand","tags":["cinema","technology","sound","home"],"variants":{"outline":"f4d4"}},"brand-douban":{"name":"brand-douban","category":"Brand","tags":["china","social","network","film","books","music"],"variants":{"outline":"f5ff"}},"brand-dribbble":{"name":"brand-dribbble","category":"Brand","tags":["logo","website","community","project","platform","self-promotion","designer","portfolio"],"variants":{"outline":"ec19","filled":"f7e5"}},"brand-drops":{"name":"brand-drops","category":"Brand","tags":["education","learning","language","word","game","design"],"variants":{"outline":"f4d5"}},"brand-drupal":{"name":"brand-drupal","category":"Brand","tags":["software","content","management","creation","application"],"variants":{"outline":"f393"}},"brand-edge":{"name":"brand-edge","category":"Brand","tags":["browser","internet","web","logo","explorer"],"variants":{"outline":"ecfc"}},"brand-elastic":{"name":"brand-elastic","category":"Brand","tags":["software","analysis","data","search"],"variants":{"outline":"f611"}},"brand-electronic-arts":{"name":"brand-electronic-arts","category":"Brand","tags":[],"variants":{"outline":"fa74"}},"brand-ember":{"name":"brand-ember","category":"Brand","tags":["library","javascript","web","app","framework"],"variants":{"outline":"f497"}},"brand-envato":{"name":"brand-envato","category":"Brand","tags":["community","creative","resources","tools"],"variants":{"outline":"f394"}},"brand-etsy":{"name":"brand-etsy","category":"Brand","tags":["online","marketplace","make","sell","buy"],"variants":{"outline":"f654"}},"brand-evernote":{"name":"brand-evernote","category":"Brand","tags":["app","organisation","notes","storage","archiving"],"variants":{"outline":"f600"}},"brand-facebook":{"name":"brand-facebook","category":"Brand","tags":["logo","app","application","community","social","communication","website","user","post","images","photos","comment","feedback","fb"],"variants":{"outline":"ec1a","filled":"f7e6"}},"brand-feedly":{"name":"brand-feedly","category":"Brand","tags":["feedly","rss","reader","news","aggregator","content","discovery","information","consumption","feed","newsfeed","app"],"variants":{"outline":"fa75"}},"brand-figma":{"name":"brand-figma","category":"Brand","tags":["logo","editor","graphic","image","implement","prototyping"],"variants":{"outline":"ec93"}},"brand-filezilla":{"name":"brand-filezilla","category":"Brand","tags":[],"variants":{"outline":"fa76"}},"brand-finder":{"name":"brand-finder","category":"Brand","tags":["software","files","manager","macos","osx","programming"],"variants":{"outline":"f218"}},"brand-firebase":{"name":"brand-firebase","category":"Brand","tags":["development","coding","programming","mobile apps"],"variants":{"outline":"ef6e"}},"brand-firefox":{"name":"brand-firefox","category":"Brand","tags":["browser","internet","web","logo"],"variants":{"outline":"ecfd"}},"brand-fiverr":{"name":"brand-fiverr","category":"Brand","tags":["marketplace","creative","proffesional","services"],"variants":{"outline":"f7a4"}},"brand-flickr":{"name":"brand-flickr","category":"Brand","tags":["logo","website","house","facilitate","sharing","digital","photos","images"],"variants":{"outline":"ecfe"}},"brand-flightradar24":{"name":"brand-flightradar24","category":"Brand","tags":["plane","route","fly","height","speed","statistisc"],"variants":{"outline":"f4d6"}},"brand-flipboard":{"name":"brand-flipboard","category":"Brand","tags":["news","newspapper","social","media"],"variants":{"outline":"f20b"}},"brand-flutter":{"name":"brand-flutter","category":"Brand","tags":["tools","programmer","creation","aplication"],"variants":{"outline":"f395"}},"brand-fortnite":{"name":"brand-fortnite","category":"Brand","tags":["games","online","battle","multiplayer","gun","weapon","building"],"variants":{"outline":"f260"}},"brand-foursquare":{"name":"brand-foursquare","category":"Brand","tags":["logo","website","community","social","network"],"variants":{"outline":"ecff"}},"brand-framer-motion":{"name":"brand-framer-motion","category":"Brand","tags":["library","builder","website","developers"],"variants":{"outline":"f78c"}},"brand-framer":{"name":"brand-framer","category":"Brand","tags":["logo","application","app","prototyping","prototype","animations"],"variants":{"outline":"ec1b"}},"brand-funimation":{"name":"brand-funimation","category":"Brand","tags":["dubbing","japan","anime","stream","website"],"variants":{"outline":"f655"}},"brand-gatsby":{"name":"brand-gatsby","category":"Brand","tags":["framework","webpage","creation","software"],"variants":{"outline":"f396"}},"brand-git":{"name":"brand-git","category":"Brand","tags":["programming","coding","software","perl","boume shell"],"variants":{"outline":"ef6f"}},"brand-github-copilot":{"name":"brand-github-copilot","category":"Brand","tags":["ai","artificial","intelligence","autocomplete","coding"],"variants":{"outline":"f4a8"}},"brand-github":{"name":"brand-github","category":"Brand","tags":["logo","website","hosting","project","programming","software","development"],"variants":{"outline":"ec1c","filled":"f7e7"}},"brand-gitlab":{"name":"brand-gitlab","category":"Brand","tags":["logo","website","software","code","programming","programmers"],"variants":{"outline":"ec1d"}},"brand-gmail":{"name":"brand-gmail","category":"Brand","tags":["google","message","mail","communication"],"variants":{"outline":"efa2"}},"brand-golang":{"name":"brand-golang","category":"Brand","tags":["language","programming","app","write","c++","java"],"variants":{"outline":"f78d"}},"brand-google-analytics":{"name":"brand-google-analytics","category":"Brand","tags":["advertising","track","website","traffic","e-commerce","online","technology"],"variants":{"outline":"edcb"}},"brand-google-big-query":{"name":"brand-google-big-query","category":"Brand","tags":["data","analysis","cloud","petabytes","sql"],"variants":{"outline":"f612"}},"brand-google-drive":{"name":"brand-google-drive","category":"Brand","tags":["logo","cloud","disc","documents","sheet","presentation","file","edit"],"variants":{"outline":"ec1e"}},"brand-google-fit":{"name":"brand-google-fit","category":"Brand","tags":["health","tracking","platform","software"],"variants":{"outline":"f297"}},"brand-google-home":{"name":"brand-google-home","category":"Brand","tags":["app","control","devices","speaker"],"variants":{"outline":"f601"}},"brand-google-maps":{"name":"brand-google-maps","category":"Brand","tags":[],"variants":{"outline":"fa4f"}},"brand-google-one":{"name":"brand-google-one","category":"Brand","tags":["data","software","storage","cloud"],"variants":{"outline":"f232"}},"brand-google-photos":{"name":"brand-google-photos","category":"Brand","tags":["gallery","videos","photography","website"],"variants":{"outline":"f20c"}},"brand-google-play":{"name":"brand-google-play","category":"Brand","tags":["logo","application","app","shop","store","online"],"variants":{"outline":"ed25"}},"brand-google-podcasts":{"name":"brand-google-podcasts","category":"Brand","tags":["app","android","ios","discover","listen"],"variants":{"outline":"f656"}},"brand-google":{"name":"brand-google","category":"Brand","tags":["logo","enterprise","browser","internet","web","discover"],"variants":{"outline":"ec1f","filled":"fd1a"}},"brand-grammarly":{"name":"brand-grammarly","category":"Brand","tags":["text","editor","detects","mistakes","grammar"],"variants":{"outline":"f32b"}},"brand-graphql":{"name":"brand-graphql","category":"Brand","tags":["software","communication","server"],"variants":{"outline":"f32c"}},"brand-gravatar":{"name":"brand-gravatar","category":"Brand","tags":["avatar","image","face","blog","comment","represent","online","technology"],"variants":{"outline":"edcc"}},"brand-grindr":{"name":"brand-grindr","category":"Brand","tags":["app","communication","dating","gay","lgbt"],"variants":{"outline":"f20d"}},"brand-guardian":{"name":"brand-guardian","category":"Brand","tags":["news","log","british","article","blog"],"variants":{"outline":"f4fb"}},"brand-gumroad":{"name":"brand-gumroad","category":"Brand","tags":["e-commerce","platform","sell","direct"],"variants":{"outline":"f5d6"}},"brand-hackerrank":{"name":"brand-hackerrank","category":"Brand","tags":[],"variants":{"outline":"ff23"}},"brand-hbo":{"name":"brand-hbo","category":"Brand","tags":["tv","channels","film","movie","serials"],"variants":{"outline":"f657"}},"brand-headlessui":{"name":"brand-headlessui","category":"Brand","tags":["tailwind","css","js","javascript"],"variants":{"outline":"f32d"}},"brand-hexo":{"name":"brand-hexo","category":"Brand","tags":[],"variants":{"outline":"fa50"}},"brand-hipchat":{"name":"brand-hipchat","category":"Brand","tags":["chat","communicate","communication","talk","discuss","app","collaborate","collaboration","technology"],"variants":{"outline":"edcd"}},"brand-html5":{"name":"brand-html5","category":"Brand","tags":["programming","development","web","website","technology","markup","language"],"variants":{"outline":"ed6c"}},"brand-inertia":{"name":"brand-inertia","category":"Brand","tags":["create","app","online","javascript"],"variants":{"outline":"f34a"}},"brand-instagram":{"name":"brand-instagram","category":"Brand","tags":["logo","app","application","images","photos","videos","post","stories","online","community"],"variants":{"outline":"ec20"}},"brand-intercom":{"name":"brand-intercom","category":"Brand","tags":["chat","communcation","software"],"variants":{"outline":"f1cf"}},"brand-itch":{"name":"brand-itch","category":"Brand","tags":[],"variants":{"outline":"fa22"}},"brand-javascript":{"name":"brand-javascript","category":"Brand","tags":["js","language","programming"],"variants":{"outline":"ef0c"}},"brand-juejin":{"name":"brand-juejin","category":"Brand","tags":["development","new","technologies","developers"],"variants":{"outline":"f7b0"}},"brand-kako-talk":{"name":"brand-kako-talk","category":"Brand","tags":["kakao-talk","messaging","communication","chat","social","app","talk","branding","kakao","conversation"],"variants":{"outline":"fd2d"}},"brand-kbin":{"name":"brand-kbin","category":"Brand","tags":[],"variants":{"outline":"fad0"}},"brand-kick":{"name":"brand-kick","category":"Brand","tags":[],"variants":{"outline":"fa23"}},"brand-kickstarter":{"name":"brand-kickstarter","category":"Brand","tags":["crowdfunding","platform","project","creative","idea","business","launch","technology"],"variants":{"outline":"edce"}},"brand-kotlin":{"name":"brand-kotlin","category":"Brand","tags":["programming","language","programmer","development","developer","technology"],"variants":{"outline":"ed6d"}},"brand-laravel":{"name":"brand-laravel","category":"Brand","tags":["framework","software","php","modular","application","building","system"],"variants":{"outline":"f34b"}},"brand-lastfm":{"name":"brand-lastfm","category":"Brand","tags":["radio station","website","music","media player"],"variants":{"outline":"f001"}},"brand-leetcode":{"name":"brand-leetcode","category":"Brand","tags":[],"variants":{"outline":"fa51"}},"brand-letterboxd":{"name":"brand-letterboxd","category":"Brand","tags":[],"variants":{"outline":"fa24"}},"brand-line":{"name":"brand-line","category":"Brand","tags":[],"variants":{"outline":"f7e8"}},"brand-linkedin":{"name":"brand-linkedin","category":"Brand","tags":["logo","website","corporation","work","business","internet"],"variants":{"outline":"ec8c"}},"brand-linktree":{"name":"brand-linktree","category":"Brand","tags":["hyperlinks","social media","freemium service","website"],"variants":{"outline":"f1e7"}},"brand-linqpad":{"name":"brand-linqpad","category":"Brand","tags":["framework","programmers","database"],"variants":{"outline":"f562"}},"brand-livewire":{"name":"brand-livewire","category":"Brand","tags":[],"variants":{"outline":"fd76"}},"brand-loom":{"name":"brand-loom","category":"Brand","tags":["video","messages","osx","record","screen","camera"],"variants":{"outline":"ef70"}},"brand-mailgun":{"name":"brand-mailgun","category":"Brand","tags":["delivery","service","tracking","pickup"],"variants":{"outline":"f32e"}},"brand-mantine":{"name":"brand-mantine","category":"Brand","tags":["creation","web","application","development"],"variants":{"outline":"f32f"}},"brand-mastercard":{"name":"brand-mastercard","category":"Brand","tags":["payment","money","debit","finance"],"variants":{"outline":"ef49"}},"brand-mastodon":{"name":"brand-mastodon","category":"Brand","tags":["web","app","social","nodes","network"],"variants":{"outline":"f250"}},"brand-matrix":{"name":"brand-matrix","category":"Brand","tags":["non","profit","communication","ip","devices"],"variants":{"outline":"f5eb"}},"brand-mcdonalds":{"name":"brand-mcdonalds","category":"Brand","tags":["food","cheeseburger","hamburger","fries","fastfood"],"variants":{"outline":"f251"}},"brand-medium":{"name":"brand-medium","category":"Brand","tags":["logo","website","brand","wordmark","design"],"variants":{"outline":"ec70"}},"brand-meetup":{"name":"brand-meetup","category":"Brand","tags":[],"variants":{"outline":"fc6a"}},"brand-mercedes":{"name":"brand-mercedes","category":"Brand","tags":["car","racing","f1","bus","van"],"variants":{"outline":"f072"}},"brand-messenger":{"name":"brand-messenger","category":"Brand","tags":["logo","app","application","communication","text","messages","communicator","photos","images","videos","giphy"],"variants":{"outline":"ec71"}},"brand-meta":{"name":"brand-meta","category":"Brand","tags":["social media","facebook","fb","instagram","messegner","giphy"],"variants":{"outline":"efb0"}},"brand-metabrainz":{"name":"brand-metabrainz","category":"Brand","tags":["website","database","open-source","musicbrainz","listenbrainz","bookbrainz","critiquebrainz"],"variants":{"outline":"ff12"}},"brand-minecraft":{"name":"brand-minecraft","category":"Brand","tags":[],"variants":{"outline":"faef"}},"brand-miniprogram":{"name":"brand-miniprogram","category":"Brand","tags":[],"variants":{"outline":"f602"}},"brand-mixpanel":{"name":"brand-mixpanel","category":"Brand","tags":["analytics","buisness","software","application"],"variants":{"outline":"f397"}},"brand-monday":{"name":"brand-monday","category":"Brand","tags":["software","application development","cloud base platform"],"variants":{"outline":"f219"}},"brand-mongodb":{"name":"brand-mongodb","category":"Brand","tags":["database","c++","system","open","programmers"],"variants":{"outline":"f613"}},"brand-my-oppo":{"name":"brand-my-oppo","category":"Brand","tags":["mobile","app","services","membership"],"variants":{"outline":"f4d7"}},"brand-mysql":{"name":"brand-mysql","category":"Brand","tags":["opensource","database","system","web","app"],"variants":{"outline":"f614"}},"brand-national-geographic":{"name":"brand-national-geographic","category":"Brand","tags":["institution","scientific","educational","nonprofit"],"variants":{"outline":"f603"}},"brand-nem":{"name":"brand-nem","category":"Brand","tags":["coin","crypto","cryptocurrency","digital"],"variants":{"outline":"f5a1"}},"brand-netbeans":{"name":"brand-netbeans","category":"Brand","tags":["software","programming","tools","java","mobile devices"],"variants":{"outline":"ef71"}},"brand-netease-music":{"name":"brand-netease-music","category":"Brand","tags":["cloud","sound","app","stream","china"],"variants":{"outline":"f604"}},"brand-netflix":{"name":"brand-netflix","category":"Brand","tags":["series","tv","episode","movie","film","media","watch","app","technology"],"variants":{"outline":"edcf"}},"brand-nexo":{"name":"brand-nexo","category":"Brand","tags":["coin","crypto","cryptocurrency","digital"],"variants":{"outline":"f5a2"}},"brand-nextcloud":{"name":"brand-nextcloud","category":"Brand","tags":["software","technology","file","hosting","php","javascript"],"variants":{"outline":"f4d8"}},"brand-nextjs":{"name":"brand-nextjs","category":"Brand","tags":["website creation","web platform","software","web application functions"],"variants":{"outline":"f0dd"}},"brand-nodejs":{"name":"brand-nodejs","category":"Brand","tags":[],"variants":{"outline":"fae0"}},"brand-nord-vpn":{"name":"brand-nord-vpn","category":"Brand","tags":["protects","device","software"],"variants":{"outline":"f37f"}},"brand-notion":{"name":"brand-notion","category":"Brand","tags":["software","note taking","project management","database"],"variants":{"outline":"ef7b"}},"brand-npm":{"name":"brand-npm","category":"Brand","tags":["package","manager","node.js","javascript"],"variants":{"outline":"f569"}},"brand-nuxt":{"name":"brand-nuxt","category":"Brand","tags":["software","app development","library","javascript","js"],"variants":{"outline":"f0de"}},"brand-nytimes":{"name":"brand-nytimes","category":"Brand","tags":["magazines","news","newspapper","website"],"variants":{"outline":"ef8d"}},"brand-oauth":{"name":"brand-oauth","category":"Brand","tags":[],"variants":{"outline":"fa52"}},"brand-office":{"name":"brand-office","category":"Brand","tags":["text","editor","software","word","excel"],"variants":{"outline":"f398"}},"brand-ok-ru":{"name":"brand-ok-ru","category":"Brand","tags":["socialmedia","message","posts"],"variants":{"outline":"f399"}},"brand-onedrive":{"name":"brand-onedrive","category":"Brand","tags":["virtual","disk","microsoft","cloud"],"variants":{"outline":"f5d7"}},"brand-onlyfans":{"name":"brand-onlyfans","category":"Brand","tags":["website","platform","photos","videos","stream","pay"],"variants":{"outline":"f605"}},"brand-open-source":{"name":"brand-open-source","category":"Brand","tags":["software","code","developer","public","licence","technology"],"variants":{"outline":"edd0"}},"brand-openai":{"name":"brand-openai","category":"Brand","tags":["nonprofit","artificial","intelligence","website"],"variants":{"outline":"f78e"}},"brand-openvpn":{"name":"brand-openvpn","category":"Brand","tags":["software","creating","secure","connection"],"variants":{"outline":"f39a"}},"brand-opera":{"name":"brand-opera","category":"Brand","tags":["logo","browser","internet","free","program"],"variants":{"outline":"ec21"}},"brand-pagekit":{"name":"brand-pagekit","category":"Brand","tags":["content","management","system","website","component","modular","technology"],"variants":{"outline":"edd1"}},"brand-parsinta":{"name":"brand-parsinta","category":"Brand","tags":[],"variants":{"outline":"fc42"}},"brand-patreon":{"name":"brand-patreon","category":"Brand","tags":["artist","software","creator","patron","art","subscription","income","earn"],"variants":{"outline":"edd2","filled":"fcff"}},"brand-paypal":{"name":"brand-paypal","category":"Brand","tags":["logo","enterprise","service","payment","internet","businessman","consumer"],"variants":{"outline":"ec22","filled":"f7e9"}},"brand-paypay":{"name":"brand-paypay","category":"Brand","tags":["japan","electronic","payment","services","mobile"],"variants":{"outline":"f5ec"}},"brand-peanut":{"name":"brand-peanut","category":"Brand","tags":["social","app","mobile","women"],"variants":{"outline":"f39b"}},"brand-pepsi":{"name":"brand-pepsi","category":"Brand","tags":["food","cola","coke","drink","bottle","carbonated"],"variants":{"outline":"f261"}},"brand-php":{"name":"brand-php","category":"Brand","tags":["programming","coding","script","format","file"],"variants":{"outline":"ef72"}},"brand-picsart":{"name":"brand-picsart","category":"Brand","tags":["photo","photography","software","video","editing"],"variants":{"outline":"f4d9"}},"brand-pinterest":{"name":"brand-pinterest","category":"Brand","tags":["logo","website","images","materials"],"variants":{"outline":"ec8d"}},"brand-planetscale":{"name":"brand-planetscale","category":"Brand","tags":["mysql","database","developers"],"variants":{"outline":"f78f"}},"brand-pnpm":{"name":"brand-pnpm","category":"Brand","tags":[],"variants":{"outline":"fd77"}},"brand-pocket":{"name":"brand-pocket","category":"Brand","tags":["logo","software","application","app","mobile","device","gathering","storage"],"variants":{"outline":"ed00"}},"brand-polymer":{"name":"brand-polymer","category":"Brand","tags":[],"variants":{"outline":"f498"}},"brand-powershell":{"name":"brand-powershell","category":"Brand","tags":["microsoft","command","interpreter","software","opensource"],"variants":{"outline":"f5ed"}},"brand-printables":{"name":"brand-printables","category":"Brand","tags":[],"variants":{"outline":"fd1b"}},"brand-prisma":{"name":"brand-prisma","category":"Brand","tags":["software","open","source","tools","developer","platform"],"variants":{"outline":"f499"}},"brand-producthunt":{"name":"brand-producthunt","category":"Brand","tags":["technology","product","share","discover","new","novelty","web","geek"],"variants":{"outline":"edd3"}},"brand-pushbullet":{"name":"brand-pushbullet","category":"Brand","tags":["data","transfer","tool","software"],"variants":{"outline":"f330"}},"brand-pushover":{"name":"brand-pushover","category":"Brand","tags":["notifications","push","cloud based","mobile","app"],"variants":{"outline":"f20e"}},"brand-python":{"name":"brand-python","category":"Brand","tags":["logo","language","programming","source"],"variants":{"outline":"ed01"}},"brand-qq":{"name":"brand-qq","category":"Brand","tags":["china","communicator","internet"],"variants":{"outline":"f606"}},"brand-radix-ui":{"name":"brand-radix-ui","category":"Brand","tags":["opensource","library","web","application","high","quality"],"variants":{"outline":"f790"}},"brand-react-native":{"name":"brand-react-native","category":"Brand","tags":["programming","tools","app","javascript","js"],"variants":{"outline":"ef73"}},"brand-react":{"name":"brand-react","category":"Brand","tags":["library","javascript","creation","interface","software"],"variants":{"outline":"f34c"}},"brand-reason":{"name":"brand-reason","category":"Brand","tags":[],"variants":{"outline":"f49a"}},"brand-reddit":{"name":"brand-reddit","category":"Brand","tags":["logo","website","information","link","internet"],"variants":{"outline":"ec8e"}},"brand-redhat":{"name":"brand-redhat","category":"Brand","tags":["software","entrepreneurship","creation"],"variants":{"outline":"f331"}},"brand-redux":{"name":"brand-redux","category":"Brand","tags":["library","javascript","menagment","centralization","application","status"],"variants":{"outline":"f3a8"}},"brand-revolut":{"name":"brand-revolut","category":"Brand","tags":["bank","money","finance","change","currency"],"variants":{"outline":"f4da"}},"brand-rumble":{"name":"brand-rumble","category":"Brand","tags":[],"variants":{"outline":"fad1"}},"brand-rust":{"name":"brand-rust","category":"Brand","tags":[],"variants":{"outline":"fa53"}},"brand-safari":{"name":"brand-safari","category":"Brand","tags":["logo","browser","internet","iphone","ipad","MacBook","compass","apple","discover"],"variants":{"outline":"ec23"}},"brand-samsungpass":{"name":"brand-samsungpass","category":"Brand","tags":["management","storage","personal","information","id","password"],"variants":{"outline":"f4db"}},"brand-sass":{"name":"brand-sass","category":"Brand","tags":["technology","preprocessor","script","language","programming","css","syntax","compile"],"variants":{"outline":"edd4"}},"brand-sentry":{"name":"brand-sentry","category":"Brand","tags":["technology","application","monitoring","error","tracking","software","cloud","development","app"],"variants":{"outline":"edd5"}},"brand-sharik":{"name":"brand-sharik","category":"Brand","tags":["file","sharing","wifi","mobile","hotspot"],"variants":{"outline":"f4dc"}},"brand-shazam":{"name":"brand-shazam","category":"Brand","tags":["app","technology","device","music","sound","play","discover","artist","recognize"],"variants":{"outline":"edd6"}},"brand-shopee":{"name":"brand-shopee","category":"Brand","tags":["shopping","online","media","shop","ecommerce"],"variants":{"outline":"f252"}},"brand-sketch":{"name":"brand-sketch","category":"Brand","tags":["logo","editor","edit","graphic","apple","commercial"],"variants":{"outline":"ec24"}},"brand-skype":{"name":"brand-skype","category":"Brand","tags":["logo","application","app","communication","talks","call","video","internet","camera"],"variants":{"outline":"ed02"}},"brand-slack":{"name":"brand-slack","category":"Brand","tags":["logo","free","internet","service","stuff","electron","app","application","communicator","textual","audio","multimedia"],"variants":{"outline":"ec72"}},"brand-snapchat":{"name":"brand-snapchat","category":"Brand","tags":["logo","app","application","photos","sending","images","mobile","video"],"variants":{"outline":"ec25"}},"brand-snapseed":{"name":"brand-snapseed","category":"Brand","tags":["edit","photo","image","editor","google"],"variants":{"outline":"f253"}},"brand-snowflake":{"name":"brand-snowflake","category":"Brand","tags":["data","cloud","platform","website"],"variants":{"outline":"f615"}},"brand-socket-io":{"name":"brand-socket-io","category":"Brand","tags":["library","javascript","web","app","communication"],"variants":{"outline":"f49b"}},"brand-solidjs":{"name":"brand-solidjs","category":"Brand","tags":["library","framework","developers","programmers","javascript"],"variants":{"outline":"f5ee"}},"brand-soundcloud":{"name":"brand-soundcloud","category":"Brand","tags":["technology","audio","distribution","platform","music","upload","promote","streaming"],"variants":{"outline":"ed6e"}},"brand-spacehey":{"name":"brand-spacehey","category":"Brand","tags":["internet","network","social","website"],"variants":{"outline":"f4fc"}},"brand-speedtest":{"name":"brand-speedtest","category":"Brand","tags":[],"variants":{"outline":"fa77"}},"brand-spotify":{"name":"brand-spotify","category":"Brand","tags":["logo","app","application","platform","music","listening","streaming","podcast"],"variants":{"outline":"ed03","filled":"fe86"}},"brand-stackoverflow":{"name":"brand-stackoverflow","category":"Brand","tags":["social","media","programming","website"],"variants":{"outline":"ef58"}},"brand-stackshare":{"name":"brand-stackshare","category":"Brand","tags":["website","developers","tech","opensource"],"variants":{"outline":"f607"}},"brand-steam":{"name":"brand-steam","category":"Brand","tags":["technology","video","game","digital","distribution","software","player","pc"],"variants":{"outline":"ed6f"}},"brand-stocktwits":{"name":"brand-stocktwits","category":"Brand","tags":[],"variants":{"outline":"fd78"}},"brand-storj":{"name":"brand-storj","category":"Brand","tags":[],"variants":{"outline":"fa54"}},"brand-storybook":{"name":"brand-storybook","category":"Brand","tags":["tool","creation","interface","application"],"variants":{"outline":"f332"}},"brand-storytel":{"name":"brand-storytel","category":"Brand","tags":["audiobook","stream","phone","tablet","digital","subscription","service"],"variants":{"outline":"f608"}},"brand-strava":{"name":"brand-strava","category":"Brand","tags":["run","ride","hike","activity","gps","sport","app"],"variants":{"outline":"f254"}},"brand-stripe":{"name":"brand-stripe","category":"Brand","tags":["technology","payment","processing","money","subscription","finance","financial","software","e-commerce"],"variants":{"outline":"edd7"}},"brand-sublime-text":{"name":"brand-sublime-text","category":"Brand","tags":["software","text","editing","programming"],"variants":{"outline":"ef74"}},"brand-sugarizer":{"name":"brand-sugarizer","category":"Brand","tags":["learning","platform","webstie","child"],"variants":{"outline":"f7a5"}},"brand-supabase":{"name":"brand-supabase","category":"Brand","tags":["opensource","database","software","storage"],"variants":{"outline":"f6d3"}},"brand-superhuman":{"name":"brand-superhuman","category":"Brand","tags":["software","email","productivity","tools"],"variants":{"outline":"f50c"}},"brand-supernova":{"name":"brand-supernova","category":"Brand","tags":["editor","developer","tools","technology","design"],"variants":{"outline":"f49c"}},"brand-surfshark":{"name":"brand-surfshark","category":"Brand","tags":["vpn","security","ip","network","private"],"variants":{"outline":"f255"}},"brand-svelte":{"name":"brand-svelte","category":"Brand","tags":["programming","coding","interface","web app"],"variants":{"outline":"f0df"}},"brand-swift":{"name":"brand-swift","category":"Brand","tags":[],"variants":{"outline":"fa55"}},"brand-symfony":{"name":"brand-symfony","category":"Brand","tags":["framework","php","software","build","web","application"],"variants":{"outline":"f616"}},"brand-tabler":{"name":"brand-tabler","category":"Brand","tags":["logo","website","dashboard","download","open-source","ui"],"variants":{"outline":"ec8f"}},"brand-tailwind":{"name":"brand-tailwind","category":"Brand","tags":["logo","firm","website"],"variants":{"outline":"eca1"}},"brand-taobao":{"name":"brand-taobao","category":"Brand","tags":["china","platform","shopping","online"],"variants":{"outline":"f5ef"}},"brand-teams":{"name":"brand-teams","category":"Brand","tags":["microsoft","technology"],"variants":{"outline":"fadf"}},"brand-ted":{"name":"brand-ted","category":"Brand","tags":["nonprofit","website","scientific","conferences","organised"],"variants":{"outline":"f658"}},"brand-telegram":{"name":"brand-telegram","category":"Brand","tags":["logo","app","application","communicator","internet","cloud","messages","text","images","photos","videos","record","file","send"],"variants":{"outline":"ec26"}},"brand-terraform":{"name":"brand-terraform","category":"Brand","tags":[],"variants":{"outline":"fa56"}},"brand-tether":{"name":"brand-tether","category":"Brand","tags":["coin","crypto","cryptocurrency","digital"],"variants":{"outline":"f5a3"}},"brand-thingiverse":{"name":"brand-thingiverse","category":"Brand","tags":[],"variants":{"outline":"fd1c"}},"brand-threads":{"name":"brand-threads","category":"Brand","tags":[],"variants":{"outline":"fb02"}},"brand-threejs":{"name":"brand-threejs","category":"Brand","tags":["javascript","3d","library","interface","software","make","animation"],"variants":{"outline":"f5f0"}},"brand-tidal":{"name":"brand-tidal","category":"Brand","tags":["technology","subscription","music","podcast","video","streaming","playlist","party","track","song"],"variants":{"outline":"ed70"}},"brand-tiktok":{"name":"brand-tiktok","category":"Brand","tags":["logo","app","application","mobile","video","music"],"variants":{"outline":"ec73","filled":"f7ea"}},"brand-tinder":{"name":"brand-tinder","category":"Brand","tags":["date","dating","app","love","affection","affair","couple","technology","networking","swipe","match"],"variants":{"outline":"ed71"}},"brand-topbuzz":{"name":"brand-topbuzz","category":"Brand","tags":["video","gif","articles","news"],"variants":{"outline":"f50d"}},"brand-torchain":{"name":"brand-torchain","category":"Brand","tags":["coin","crypto","cryptocurrency","digital"],"variants":{"outline":"f5a4"}},"brand-toyota":{"name":"brand-toyota","category":"Brand","tags":["car","transport","transportation"],"variants":{"outline":"f262"}},"brand-trello":{"name":"brand-trello","category":"Brand","tags":["visual","tool","board","kanban"],"variants":{"outline":"f39d"}},"brand-tripadvisor":{"name":"brand-tripadvisor","category":"Brand","tags":["travel","trip","tourism","website"],"variants":{"outline":"f002"}},"brand-tumblr":{"name":"brand-tumblr","category":"Brand","tags":["logo","website","platform","blog","community"],"variants":{"outline":"ed04"}},"brand-twilio":{"name":"brand-twilio","category":"Brand","tags":["communication","answering","calls","messages"],"variants":{"outline":"f617"}},"brand-twitch":{"name":"brand-twitch","category":"Brand","tags":["logo","platform","streaming","streamers","videos","films","chat","subs"],"variants":{"outline":"ed05"}},"brand-twitter":{"name":"brand-twitter","category":"Brand","tags":["logo","app","application","community","social","communication","website","user","post","images","photos","comment","feedback"],"variants":{"outline":"ec27","filled":"f7eb"}},"brand-typescript":{"name":"brand-typescript","category":"Brand","tags":["language","programmers","opensource","javascript"],"variants":{"outline":"f5f1"}},"brand-uber":{"name":"brand-uber","category":"Brand","tags":["taxi","transport","car","food"],"variants":{"outline":"ef75"}},"brand-ubuntu":{"name":"brand-ubuntu","category":"Brand","tags":["os","operating","system","linux","gnu"],"variants":{"outline":"ef59"}},"brand-unity":{"name":"brand-unity","category":"Brand","tags":["engine","creation","3d","2d"],"variants":{"outline":"f49d"}},"brand-unsplash":{"name":"brand-unsplash","category":"Brand","tags":["picture","photo","photography","search","image","stock"],"variants":{"outline":"edd8"}},"brand-upwork":{"name":"brand-upwork","category":"Brand","tags":["freelancer","software","finance"],"variants":{"outline":"f39e"}},"brand-valorant":{"name":"brand-valorant","category":"Brand","tags":["game","fps","videogame","shooter"],"variants":{"outline":"f39f"}},"brand-vercel":{"name":"brand-vercel","category":"Brand","tags":["develop","preview","programmers","build","publish"],"variants":{"outline":"ef24"}},"brand-vimeo":{"name":"brand-vimeo","category":"Brand","tags":["logo","website","sharing","watching","video","users"],"variants":{"outline":"ed06"}},"brand-vinted":{"name":"brand-vinted","category":"Brand","tags":["website","clothes","trading","exchange","sale","shopping"],"variants":{"outline":"f20f"}},"brand-visa":{"name":"brand-visa","category":"Brand","tags":["payment","card","method","pay"],"variants":{"outline":"f380"}},"brand-visual-studio":{"name":"brand-visual-studio","category":"Brand","tags":["software","microsoft","programming","developers","coding"],"variants":{"outline":"ef76"}},"brand-vite":{"name":"brand-vite","category":"Brand","tags":["software","building","tool","programming","web","projects"],"variants":{"outline":"f5f2"}},"brand-vivaldi":{"name":"brand-vivaldi","category":"Brand","tags":["browser","internet","web","free","program"],"variants":{"outline":"f210"}},"brand-vk":{"name":"brand-vk","category":"Brand","tags":["technology","social","media","networking","service","russian"],"variants":{"outline":"ed72"}},"brand-vlc":{"name":"brand-vlc","category":"Brand","tags":[],"variants":{"outline":"fa78"}},"brand-volkswagen":{"name":"brand-volkswagen","category":"Brand","tags":["car","vehicle","transportation","van","traveling"],"variants":{"outline":"f50e"}},"brand-vsco":{"name":"brand-vsco","category":"Brand","tags":["photography","image","application"],"variants":{"outline":"f334"}},"brand-vscode":{"name":"brand-vscode","category":"Brand","tags":["code","editor","software"],"variants":{"outline":"f3a0"}},"brand-vue":{"name":"brand-vue","category":"Brand","tags":["programming","coding","javascript","document","software"],"variants":{"outline":"f0e0"}},"brand-walmart":{"name":"brand-walmart","category":"Brand","tags":["shop","supermarket","food","drinking","groceries","shopping"],"variants":{"outline":"f211"}},"brand-waze":{"name":"brand-waze","category":"Brand","tags":["software","navigation","satellite","mobile","phone"],"variants":{"outline":"f5d8"}},"brand-webflow":{"name":"brand-webflow","category":"Brand","tags":["web","website","creation"],"variants":{"outline":"f2d2"}},"brand-wechat":{"name":"brand-wechat","category":"Brand","tags":["china","communicator","social","media","software"],"variants":{"outline":"f5f3"}},"brand-weibo":{"name":"brand-weibo","category":"Brand","tags":["china","share","messages","internet","service"],"variants":{"outline":"f609"}},"brand-whatsapp":{"name":"brand-whatsapp","category":"Brand","tags":["logo","app","application","communication","text","messages","communicator","photos","images","videos","giphy"],"variants":{"outline":"ec74"}},"brand-wikipedia":{"name":"brand-wikipedia","category":"Brand","tags":[],"variants":{"outline":"fa79"}},"brand-windows":{"name":"brand-windows","category":"Brand","tags":["logo","system","os","computer","microsoft"],"variants":{"outline":"ecd8"}},"brand-windy":{"name":"brand-windy","category":"Brand","tags":["weather","sun","cold","hot","rain","forecast"],"variants":{"outline":"f4dd"}},"brand-wish":{"name":"brand-wish","category":"Brand","tags":["shopping","online","tools","gadgets","toys"],"variants":{"outline":"f212"}},"brand-wix":{"name":"brand-wix","category":"Brand","tags":["logo","maker","web","website"],"variants":{"outline":"f3a1"}},"brand-wordpress":{"name":"brand-wordpress","category":"Brand","tags":["logotype","web","website","glyph","social"],"variants":{"outline":"f2d3"}},"brand-x":{"name":"brand-x","category":"Brand","tags":["twitter"],"variants":{"outline":"fc0f","filled":"fc21"}},"brand-xamarin":{"name":"brand-xamarin","category":"Brand","tags":[],"variants":{"outline":"fa7a"}},"brand-xbox":{"name":"brand-xbox","category":"Brand","tags":["game","console","videogame","controller"],"variants":{"outline":"f298"}},"brand-xdeep":{"name":"brand-xdeep","category":"Brand","tags":[],"variants":{"outline":"fc10"}},"brand-xing":{"name":"brand-xing","category":"Brand","tags":["web","media","network","site","social"],"variants":{"outline":"f21a"}},"brand-yahoo":{"name":"brand-yahoo","category":"Brand","tags":["web","services","technology","inbox","mail","news","search"],"variants":{"outline":"ed73"}},"brand-yandex":{"name":"brand-yandex","category":"Brand","tags":[],"variants":{"outline":"fae1"}},"brand-yarn":{"name":"brand-yarn","category":"Brand","tags":[],"variants":{"outline":"fd79"}},"brand-yatse":{"name":"brand-yatse","category":"Brand","tags":["multimedia","technology","pilot","software","android"],"variants":{"outline":"f213"}},"brand-ycombinator":{"name":"brand-ycombinator","category":"Brand","tags":["startup","accelerator","seed","money","launch","company","business","invest","funding"],"variants":{"outline":"edd9"}},"brand-youtube-kids":{"name":"brand-youtube-kids","category":"Brand","tags":["video","program","young","children","maker","stories","youtuber"],"variants":{"outline":"f214"}},"brand-youtube":{"name":"brand-youtube","category":"Brand","tags":["logo","platform","channel","film","video","youtuber","maker","comments","stream","streamer"],"variants":{"outline":"ec90","filled":"fc22"}},"brand-zalando":{"name":"brand-zalando","category":"Brand","tags":["footwear","shoes","clotches","app","online","shop"],"variants":{"outline":"f49e"}},"brand-zapier":{"name":"brand-zapier","category":"Brand","tags":["automated","create","app","buissnes"],"variants":{"outline":"f49f"}},"brand-zeit":{"name":"brand-zeit","category":"Brand","tags":["consulting","software"],"variants":{"outline":"f335"}},"brand-zhihu":{"name":"brand-zhihu","category":"Brand","tags":["forum","make","question","answers","website"],"variants":{"outline":"f60a"}},"brand-zoom":{"name":"brand-zoom","category":"Brand","tags":["program","video","chat","meetings","online"],"variants":{"outline":"f215"}},"brand-zulip":{"name":"brand-zulip","category":"Brand","tags":["chat","software","phyton","javascript"],"variants":{"outline":"f4de"}},"brand-zwift":{"name":"brand-zwift","category":"Brand","tags":["technology","bike","sport","movement","game"],"variants":{"outline":"f216"}},"bread-off":{"name":"bread-off","category":"Food","tags":["food","breakfast","sandwich","toast","baking"],"variants":{"outline":"f3cb"}},"bread":{"name":"bread","category":"Food","tags":["food","breakfast","sandwich","toast","baking"],"variants":{"outline":"efa3","filled":"fe85"}},"briefcase-2":{"name":"briefcase-2","category":"","tags":["bag","baggage","folder","carrier","documents","suitcase","job","work","luggage"],"variants":{"outline":"fb03","filled":"fe84"}},"briefcase-off":{"name":"briefcase-off","category":"","tags":["bag","baggage","folder","carrier","documents"],"variants":{"outline":"f3cc"}},"briefcase":{"name":"briefcase","category":"","tags":["bag","baggage","folder","carrier","documents","suitcase","job","work","luggage"],"variants":{"outline":"ea46","filled":"fd00"}},"brightness-2":{"name":"brightness-2","category":"Photography","tags":["light","screen","level","daytime","sun"],"variants":{"outline":"ee19"}},"brightness-auto":{"name":"brightness-auto","category":"","tags":[],"variants":{"outline":"fd99","filled":"fe83"}},"brightness-down":{"name":"brightness-down","category":"Photography","tags":["dark","darker","screen"],"variants":{"outline":"eb7d","filled":"fb23"}},"brightness-half":{"name":"brightness-half","category":"Photography","tags":["light","screen","level","daytime","sun"],"variants":{"outline":"ee1a"}},"brightness-off":{"name":"brightness-off","category":"Photography","tags":["light","dark","screen"],"variants":{"outline":"f3cd"}},"brightness-up":{"name":"brightness-up","category":"Photography","tags":["light","screen"],"variants":{"outline":"eb7e","filled":"fb24"}},"brightness":{"name":"brightness","category":"Photography","tags":["light","dark","screen"],"variants":{"outline":"eb7f","filled":"fe82"}},"broadcast-off":{"name":"broadcast-off","category":"Devices","tags":["communication","tv","signal","media","sound","connection","network"],"variants":{"outline":"f1e8"}},"broadcast":{"name":"broadcast","category":"Devices","tags":["communication","tv","signal","media","sound","connection","network"],"variants":{"outline":"f1e9"}},"browser-check":{"name":"browser-check","category":"Devices","tags":["internet","web","display","done","tick"],"variants":{"outline":"efd6"}},"browser-off":{"name":"browser-off","category":"Devices","tags":["internet","web","display"],"variants":{"outline":"f0c1"}},"browser-plus":{"name":"browser-plus","category":"Devices","tags":["internet","web","display","new","add"],"variants":{"outline":"efd7"}},"browser-x":{"name":"browser-x","category":"Devices","tags":["internet","web","display","close"],"variants":{"outline":"efd8"}},"browser":{"name":"browser","category":"Devices","tags":["internet","web","display"],"variants":{"outline":"ebb7"}},"brush-off":{"name":"brush-off","category":"Design","tags":["paint","art","picture","paintbrush","painter","theme"],"variants":{"outline":"f0c2"}},"brush":{"name":"brush","category":"Design","tags":["paint","art","picture","paintbrush","painter","theme"],"variants":{"outline":"ebb8"}},"bubble-minus":{"name":"bubble-minus","category":"Communication","tags":["comment","chat","reply","communication","conversation","faq","message","text"],"variants":{"outline":"febe"}},"bubble-plus":{"name":"bubble-plus","category":"Communication","tags":["comment","chat","reply","communication","conversation","faq","message","text"],"variants":{"outline":"febd"}},"bubble-tea-2":{"name":"bubble-tea-2","category":"","tags":[],"variants":{"outline":"ff52"}},"bubble-tea":{"name":"bubble-tea","category":"","tags":[],"variants":{"outline":"ff51"}},"bubble-text":{"name":"bubble-text","category":"Communication","tags":["comment","chat","reply","communication","conversation","faq","message","text"],"variants":{"outline":"febc"}},"bubble-x":{"name":"bubble-x","category":"Communication","tags":["comment","chat","reply","communication","conversation","faq","message","text"],"variants":{"outline":"febb"}},"bubble":{"name":"bubble","category":"Communication","tags":["comment","chat","reply","communication","conversation","faq","message","text"],"variants":{"outline":"feba","filled":"fec3"}},"bucket-droplet":{"name":"bucket-droplet","category":"Design","tags":["water","liquid","drop","tool","fill"],"variants":{"outline":"f56a"}},"bucket-off":{"name":"bucket-off","category":"Design","tags":["collection","container","water","liquid"],"variants":{"outline":"f103"}},"bucket":{"name":"bucket","category":"Design","tags":["collection","container","water","liquid"],"variants":{"outline":"ea47"}},"bug-off":{"name":"bug-off","category":"Development","tags":["germ","insect","error","nature"],"variants":{"outline":"f0c3"}},"bug":{"name":"bug","category":"Development","tags":["germ","insect","error","nature"],"variants":{"outline":"ea48","filled":"fd01"}},"building-arch":{"name":"building-arch","category":"Buildings","tags":["arc","curve","dome","monument","history","architecture"],"variants":{"outline":"ea49"}},"building-bank":{"name":"building-bank","category":"Buildings","tags":["architecture","city","urban","construction","money","credit","loan","workplace"],"variants":{"outline":"ebe2"}},"building-bridge-2":{"name":"building-bridge-2","category":"Buildings","tags":["architecture","urban","river","overpass","city","countryside"],"variants":{"outline":"ea4a"}},"building-bridge":{"name":"building-bridge","category":"Buildings","tags":["architecture","urban","river","overpass","city","countryside"],"variants":{"outline":"ea4b"}},"building-broadcast-tower":{"name":"building-broadcast-tower","category":"Buildings","tags":["communication","internet","signal"],"variants":{"outline":"f4be","filled":"fe81"}},"building-burj-al-arab":{"name":"building-burj-al-arab","category":"","tags":[],"variants":{"outline":"ff50"}},"building-carousel":{"name":"building-carousel","category":"Buildings","tags":["amusement","park","fair","merry-go-round","fun","entertaianment"],"variants":{"outline":"ed87"}},"building-castle":{"name":"building-castle","category":"Buildings","tags":["king","queen","royal","architecture","medieval","middle","ages","nobility","tower","fortress","fort","fortification","princess","prince"],"variants":{"outline":"ed88"}},"building-church":{"name":"building-church","category":"Buildings","tags":["religion","chapel","sanctuary","temple","cathedral","pray","prayer"],"variants":{"outline":"ea4c"}},"building-circus":{"name":"building-circus","category":"Buildings","tags":["tent","show","carnival","clown"],"variants":{"outline":"f4bf"}},"building-community":{"name":"building-community","category":"Buildings","tags":["place","skyscraper","district neighborhood","area"],"variants":{"outline":"ebf6"}},"building-cottage":{"name":"building-cottage","category":"Buildings","tags":["small","house","countryside","live","farm","rural","outskirts"],"variants":{"outline":"ee1b"}},"building-estate":{"name":"building-estate","category":"Buildings","tags":["office","property","work","architecture"],"variants":{"outline":"f5a5"}},"building-factory-2":{"name":"building-factory-2","category":"Buildings","tags":["goods","manufature","machine","trade","produce","product","worker","industry","industrial","site"],"variants":{"outline":"f082"}},"building-factory":{"name":"building-factory","category":"Buildings","tags":["goods","manufature","machine","trade","produce","product","worker","industry","industrial","site"],"variants":{"outline":"ee1c"}},"building-fortress":{"name":"building-fortress","category":"Buildings","tags":["military","town","defend","attack","stronghold","protect","protection","medieval"],"variants":{"outline":"ed89"}},"building-hospital":{"name":"building-hospital","category":"Buildings","tags":["doctor","sickness","illness","nurse","medication","emergency","treat","surgery"],"variants":{"outline":"ea4d"}},"building-lighthouse":{"name":"building-lighthouse","category":"Buildings","tags":["light","sea","tower","beacon","flash","ship","guide","lightship","leading","watchtower","signal"],"variants":{"outline":"ed8a"}},"building-monument":{"name":"building-monument","category":"Buildings","tags":["history","memorial","commemorative"],"variants":{"outline":"ed26"}},"building-mosque":{"name":"building-mosque","category":"Buildings","tags":[],"variants":{"outline":"fa57"}},"building-off":{"name":"building-off","category":"Buildings","tags":["flat","office","city","urban","scyscraper","architecture","construction"],"variants":{"outline":"fefd"}},"building-pavilion":{"name":"building-pavilion","category":"Buildings","tags":["place","party","residence","ornamentation"],"variants":{"outline":"ebf7"}},"building-skyscraper":{"name":"building-skyscraper","category":"Buildings","tags":["city","urban","office","workplace","corporation","hotel","apartments"],"variants":{"outline":"ec39"}},"building-stadium":{"name":"building-stadium","category":"Buildings","tags":["construciton","estate","football","supporters"],"variants":{"outline":"f641"}},"building-store":{"name":"building-store","category":"Buildings","tags":["shopping","shop","supermarket","market","products","retail","buy","sell"],"variants":{"outline":"ea4e"}},"building-tunnel":{"name":"building-tunnel","category":"Buildings","tags":["train","road","underground","subway"],"variants":{"outline":"f5a6"}},"building-warehouse":{"name":"building-warehouse","category":"Buildings","tags":["store","inventory","stuff","things","machinery"],"variants":{"outline":"ebe3"}},"building-wind-turbine":{"name":"building-wind-turbine","category":"Buildings","tags":["power","ecology","electricy","energy"],"variants":{"outline":"f4c0"}},"building":{"name":"building","category":"Buildings","tags":["flat","office","city","urban","scyscraper","architecture","construction"],"variants":{"outline":"ea4f"}},"buildings":{"name":"buildings","category":"Buildings","tags":["flat","office","city","urban","scyscraper","architecture","construction"],"variants":{"outline":"ff40"}},"bulb-off":{"name":"bulb-off","category":"","tags":["energy","power","electricity","creativity","light","idea"],"variants":{"outline":"ea50"}},"bulb":{"name":"bulb","category":"","tags":["energy","power","electricity","creativity","light","idea"],"variants":{"outline":"ea51","filled":"f66a"}},"bulldozer":{"name":"bulldozer","category":"Vehicles","tags":["tractor","construction","site","build","rear","machine"],"variants":{"outline":"ee1d"}},"burger":{"name":"burger","category":"","tags":[],"variants":{"outline":"fcb4"}},"bus-off":{"name":"bus-off","category":"Vehicles","tags":["vehicle","drive","driver","engine","motor","journey","trip"],"variants":{"outline":"f3ce"}},"bus-stop":{"name":"bus-stop","category":"Vehicles","tags":["transport","station","city","travel"],"variants":{"outline":"f2d4"}},"bus":{"name":"bus","category":"Vehicles","tags":["vehicle","drive","driver","engine","motor","journey","trip"],"variants":{"outline":"ebe4"}},"businessplan":{"name":"businessplan","category":"","tags":["business","money","corporate","document","goal","achieve","manage","roadmap","grow"],"variants":{"outline":"ee1e"}},"butterfly":{"name":"butterfly","category":"Nature","tags":["animal","insect","nature","fly","wings"],"variants":{"outline":"efd9"}},"cactus-off":{"name":"cactus-off","category":"Nature","tags":["plant","desert","spikes","nature","garden"],"variants":{"outline":"f3cf"}},"cactus":{"name":"cactus","category":"Nature","tags":["plant","desert","spikes","nature","garden"],"variants":{"outline":"f21b","filled":"fb25"}},"cake-off":{"name":"cake-off","category":"","tags":["baking","birthday","party","chocolate","sweet"],"variants":{"outline":"f104"}},"cake":{"name":"cake","category":"","tags":["baking","birthday","party","chocolate","sweet"],"variants":{"outline":"f00f"}},"calculator-off":{"name":"calculator-off","category":"Devices","tags":["math","count","add","subtract","multiply","divide","amount"],"variants":{"outline":"f0c4"}},"calculator":{"name":"calculator","category":"Devices","tags":["math","count","add","subtract","multiply","divide","amount"],"variants":{"outline":"eb80","filled":"fb26"}},"calendar-bolt":{"name":"calendar-bolt","category":"System","tags":[],"variants":{"outline":"f822"}},"calendar-cancel":{"name":"calendar-cancel","category":"System","tags":[],"variants":{"outline":"f823"}},"calendar-check":{"name":"calendar-check","category":"System","tags":[],"variants":{"outline":"f824"}},"calendar-clock":{"name":"calendar-clock","category":"","tags":["time-calendar","schedule-clock","appointment","date-time","event-schedule","timing","calendar-clock","agenda","time-management","calendar-event"],"variants":{"outline":"fd2e"}},"calendar-code":{"name":"calendar-code","category":"System","tags":[],"variants":{"outline":"f825"}},"calendar-cog":{"name":"calendar-cog","category":"System","tags":[],"variants":{"outline":"f826"}},"calendar-dollar":{"name":"calendar-dollar","category":"System","tags":[],"variants":{"outline":"f827"}},"calendar-dot":{"name":"calendar-dot","category":"","tags":[],"variants":{"outline":"fd3e"}},"calendar-down":{"name":"calendar-down","category":"System","tags":[],"variants":{"outline":"f828"}},"calendar-due":{"name":"calendar-due","category":"System","tags":["date","deadline","schedule"],"variants":{"outline":"f621"}},"calendar-event":{"name":"calendar-event","category":"System","tags":["date","day","plan","schedule","agenda","calender"],"variants":{"outline":"ea52"}},"calendar-exclamation":{"name":"calendar-exclamation","category":"System","tags":[],"variants":{"outline":"f829"}},"calendar-heart":{"name":"calendar-heart","category":"System","tags":[],"variants":{"outline":"f82a"}},"calendar-minus":{"name":"calendar-minus","category":"System","tags":["date","day","plan","schedule","agenda","calender"],"variants":{"outline":"ebb9"}},"calendar-month":{"name":"calendar-month","category":"","tags":["monthly-calendar","month-view","date-month","monthly-schedule","timeframe","calendar-grid","month","month-planner","monthly","date-grid"],"variants":{"outline":"fd2f"}},"calendar-off":{"name":"calendar-off","category":"System","tags":["date","day","plan","schedule","agenda","calender"],"variants":{"outline":"ee1f"}},"calendar-pause":{"name":"calendar-pause","category":"System","tags":[],"variants":{"outline":"f82b"}},"calendar-pin":{"name":"calendar-pin","category":"System","tags":[],"variants":{"outline":"f82c"}},"calendar-plus":{"name":"calendar-plus","category":"System","tags":["date","day","plan","schedule","agenda","add","calender"],"variants":{"outline":"ebba"}},"calendar-question":{"name":"calendar-question","category":"System","tags":[],"variants":{"outline":"f82d"}},"calendar-repeat":{"name":"calendar-repeat","category":"System","tags":[],"variants":{"outline":"fad2"}},"calendar-sad":{"name":"calendar-sad","category":"","tags":[],"variants":{"outline":"fd1d"}},"calendar-search":{"name":"calendar-search","category":"System","tags":[],"variants":{"outline":"f82e"}},"calendar-share":{"name":"calendar-share","category":"System","tags":[],"variants":{"outline":"f82f"}},"calendar-smile":{"name":"calendar-smile","category":"","tags":[],"variants":{"outline":"fd1e"}},"calendar-star":{"name":"calendar-star","category":"System","tags":[],"variants":{"outline":"f830"}},"calendar-stats":{"name":"calendar-stats","category":"System","tags":["plan","timetable","schedule","meeting","busy","month","year","date","statistics","calender"],"variants":{"outline":"ee20"}},"calendar-time":{"name":"calendar-time","category":"System","tags":["plan","timetable","schedule","meeting","busy","month","year","date","calender"],"variants":{"outline":"ee21"}},"calendar-up":{"name":"calendar-up","category":"System","tags":[],"variants":{"outline":"f831"}},"calendar-user":{"name":"calendar-user","category":"","tags":[],"variants":{"outline":"fd1f"}},"calendar-week":{"name":"calendar-week","category":"","tags":["weekly-calendar","week-view","date-week","weekly-schedule","timeframe","calendar-grid","week","week-planner","weekly","date-grid"],"variants":{"outline":"fd30"}},"calendar-x":{"name":"calendar-x","category":"System","tags":[],"variants":{"outline":"f832"}},"calendar":{"name":"calendar","category":"System","tags":["date","day","plan","schedule","agenda","calender"],"variants":{"outline":"ea53","filled":"fb27"}},"camera-bolt":{"name":"camera-bolt","category":"Media","tags":[],"variants":{"outline":"f833"}},"camera-cancel":{"name":"camera-cancel","category":"Media","tags":[],"variants":{"outline":"f834"}},"camera-check":{"name":"camera-check","category":"Media","tags":[],"variants":{"outline":"f835"}},"camera-code":{"name":"camera-code","category":"Media","tags":[],"variants":{"outline":"f836"}},"camera-cog":{"name":"camera-cog","category":"Media","tags":[],"variants":{"outline":"f837"}},"camera-dollar":{"name":"camera-dollar","category":"Media","tags":[],"variants":{"outline":"f838"}},"camera-down":{"name":"camera-down","category":"Media","tags":[],"variants":{"outline":"f839"}},"camera-exclamation":{"name":"camera-exclamation","category":"Media","tags":[],"variants":{"outline":"f83a"}},"camera-heart":{"name":"camera-heart","category":"Media","tags":[],"variants":{"outline":"f83b"}},"camera-minus":{"name":"camera-minus","category":"Media","tags":["video","photo","aperture"],"variants":{"outline":"ec3a"}},"camera-off":{"name":"camera-off","category":"Media","tags":["video","photo","aperture"],"variants":{"outline":"ecee"}},"camera-pause":{"name":"camera-pause","category":"Media","tags":[],"variants":{"outline":"f83c"}},"camera-pin":{"name":"camera-pin","category":"Media","tags":[],"variants":{"outline":"f83d"}},"camera-plus":{"name":"camera-plus","category":"Media","tags":["video","photo","aperture"],"variants":{"outline":"ec3b"}},"camera-question":{"name":"camera-question","category":"Media","tags":[],"variants":{"outline":"f83e"}},"camera-rotate":{"name":"camera-rotate","category":"Photography","tags":["photo","photography","picture","face","instagram","portrait","digital","smartphone","selfie"],"variants":{"outline":"ee22"}},"camera-search":{"name":"camera-search","category":"Media","tags":[],"variants":{"outline":"f83f"}},"camera-selfie":{"name":"camera-selfie","category":"Photography","tags":["photo","photography","picture","face","instagram","portrait","digital","smartphone"],"variants":{"outline":"ee23"}},"camera-share":{"name":"camera-share","category":"Media","tags":[],"variants":{"outline":"f840"}},"camera-star":{"name":"camera-star","category":"Media","tags":[],"variants":{"outline":"f841"}},"camera-up":{"name":"camera-up","category":"Media","tags":[],"variants":{"outline":"f842"}},"camera-x":{"name":"camera-x","category":"Media","tags":[],"variants":{"outline":"f843"}},"camera":{"name":"camera","category":"Media","tags":["video","photo","aperture"],"variants":{"outline":"ea54","filled":"fa37"}},"camper":{"name":"camper","category":"Vehicles","tags":[],"variants":{"outline":"fa25"}},"campfire":{"name":"campfire","category":"Map","tags":["camping","bonfire","wood","camp","burn","flame"],"variants":{"outline":"f5a7","filled":"fb28"}},"cancel":{"name":"cancel","category":"Shapes","tags":["cancel","no"],"variants":{"outline":"ff11"}},"candle":{"name":"candle","category":"","tags":["light","birthday","decoration","halloween","fire","christmas"],"variants":{"outline":"efc6","filled":"fc23"}},"candy-off":{"name":"candy-off","category":"Food","tags":["sweet","food","sugar","cane","halloween"],"variants":{"outline":"f0c5"}},"candy":{"name":"candy","category":"Food","tags":["sweet","food","sugar","cane","halloween"],"variants":{"outline":"ef0d"}},"cane":{"name":"cane","category":"Health","tags":["candy","christmas","sweet","food","decoration"],"variants":{"outline":"f50f"}},"cannabis":{"name":"cannabis","category":"Nature","tags":["marijuana","weed","drug","cbd","medical"],"variants":{"outline":"f4c1"}},"cap-projecting":{"name":"cap-projecting","category":"Design","tags":[],"variants":{"outline":"ff22"}},"cap-rounded":{"name":"cap-rounded","category":"Design","tags":[],"variants":{"outline":"ff21"}},"cap-straight":{"name":"cap-straight","category":"Design","tags":[],"variants":{"outline":"ff20"}},"capsule-horizontal":{"name":"capsule-horizontal","category":"Shapes","tags":[],"variants":{"outline":"fae2","filled":"fc25"}},"capsule":{"name":"capsule","category":"Shapes","tags":[],"variants":{"outline":"fae3","filled":"fc24"}},"capture-off":{"name":"capture-off","category":"Media","tags":["photo","photographer","sharpen"],"variants":{"outline":"f0c6"}},"capture":{"name":"capture","category":"Media","tags":["photo","photographer","sharpen"],"variants":{"outline":"ec3c","filled":"fb29"}},"car-4wd":{"name":"car-4wd","category":"","tags":[],"variants":{"outline":"fdb8"}},"car-crane":{"name":"car-crane","category":"Vehicles","tags":["transport","truck","machine","lifter"],"variants":{"outline":"ef25"}},"car-crash":{"name":"car-crash","category":"Vehicles","tags":["accident","collision","damage","insurance"],"variants":{"outline":"efa4"}},"car-fan-1":{"name":"car-fan-1","category":"","tags":[],"variants":{"outline":"fdb7"}},"car-fan-2":{"name":"car-fan-2","category":"","tags":[],"variants":{"outline":"fdb6"}},"car-fan-3":{"name":"car-fan-3","category":"","tags":[],"variants":{"outline":"fdb5"}},"car-fan-auto":{"name":"car-fan-auto","category":"","tags":[],"variants":{"outline":"fdb4"}},"car-fan":{"name":"car-fan","category":"","tags":[],"variants":{"outline":"fdb3"}},"car-garage":{"name":"car-garage","category":"","tags":["auto-shop","vehicle-repair","automobile-maintenance","parking-garage","car-storage","automotive","garage-service","car-park","vehicle-maintenance","car-repair"],"variants":{"outline":"fc77"}},"car-off":{"name":"car-off","category":"Vehicles","tags":["vehicle","drive","driver","engine","motor","journey","trip"],"variants":{"outline":"f0c7"}},"car-suv":{"name":"car-suv","category":"Vehicles","tags":["sport-utility","crossover","automobile","suv","off-road","four-wheel-drive","vehicle","transportation","auto","truck"],"variants":{"outline":"fc8b"}},"car-turbine":{"name":"car-turbine","category":"Vehicles","tags":["detail","service","mechanic","part","power"],"variants":{"outline":"f4fd"}},"car":{"name":"car","category":"Vehicles","tags":["vehicle","drive","driver","engine","motor","journey","trip"],"variants":{"outline":"ebbb"}},"carambola":{"name":"carambola","category":"Food","tags":["fruit","starfruit","carambola","tropical","exotic","five","five-pointed","star","healthy","vitamin","nutrition","diet"],"variants":{"outline":"feb9"}},"caravan":{"name":"caravan","category":"Vehicles","tags":["journey","trip","holidays","camping","trailer"],"variants":{"outline":"ec7c"}},"cardboards-off":{"name":"cardboards-off","category":"Devices","tags":["vr","virtual reality","watch","viewer","technology"],"variants":{"outline":"f0c8"}},"cardboards":{"name":"cardboards","category":"Devices","tags":["vr","virtual reality","watch","viewer","technology"],"variants":{"outline":"ed74"}},"cards":{"name":"cards","category":"Design","tags":["game","poker","credit","peyment","casino"],"variants":{"outline":"f510","filled":"fc26"}},"caret-down":{"name":"caret-down","category":"Arrows","tags":["next","bottom","dropdown","show","more"],"variants":{"outline":"eb5d","filled":"fb2a"}},"caret-left-right":{"name":"caret-left-right","category":"","tags":["arrow-horizontal","double-arrow","side-arrow","left-right","horizontal-pointer","directional","horizontal-caret","bidirectional","opposite","horizontal-arrow"],"variants":{"outline":"fc43","filled":"fd02"}},"caret-left":{"name":"caret-left","category":"Arrows","tags":["back","previous"],"variants":{"outline":"eb5e","filled":"fb2b"}},"caret-right":{"name":"caret-right","category":"Arrows","tags":["next","play","more"],"variants":{"outline":"eb5f","filled":"fb2c"}},"caret-up-down":{"name":"caret-up-down","category":"","tags":[],"variants":{"outline":"fc44","filled":"fd03"}},"caret-up":{"name":"caret-up","category":"Arrows","tags":["dropdown","less","up"],"variants":{"outline":"eb60","filled":"fb2d"}},"carousel-horizontal":{"name":"carousel-horizontal","category":"Design","tags":["app","mobile","display","preview"],"variants":{"outline":"f659","filled":"fa92"}},"carousel-vertical":{"name":"carousel-vertical","category":"Design","tags":["app","mobile","display","preview"],"variants":{"outline":"f65a","filled":"fa93"}},"carrot-off":{"name":"carrot-off","category":"Food","tags":["food","healthy","rabbit","vegetable"],"variants":{"outline":"f3d0"}},"carrot":{"name":"carrot","category":"Food","tags":["food","healthy","rabbit","vegetable"],"variants":{"outline":"f21c"}},"cash-banknote-off":{"name":"cash-banknote-off","category":"E-commerce","tags":["money","pay","bank","dollar","pound","yen","business"],"variants":{"outline":"ee24"}},"cash-banknote":{"name":"cash-banknote","category":"E-commerce","tags":["money","pay","bank","dollar","pound","yen","business"],"variants":{"outline":"ee25","filled":"fe80"}},"cash-off":{"name":"cash-off","category":"E-commerce","tags":["currency","payment","money","pay"],"variants":{"outline":"f105"}},"cash-register":{"name":"cash-register","category":"E-commerce","tags":["payment","money","pay","cashier","register","purchase","checkout","transaction"],"variants":{"outline":"fee6"}},"cash":{"name":"cash","category":"E-commerce","tags":["currency","payment","money","pay"],"variants":{"outline":"ea55"}},"cast-off":{"name":"cast-off","category":"Media","tags":["broadcast","stream","mirroring","apple","airplay","chromecast"],"variants":{"outline":"f0c9"}},"cast":{"name":"cast","category":"Media","tags":["broadcast","stream","mirroring","apple","airplay","chromecast"],"variants":{"outline":"ea56"}},"cat":{"name":"cat","category":"Animals","tags":["animal","pet","kitty","cute"],"variants":{"outline":"f65b"}},"category-2":{"name":"category-2","category":"Shapes","tags":["folder","menu","tag","game"],"variants":{"outline":"f1f5"}},"category-minus":{"name":"category-minus","category":"","tags":[],"variants":{"outline":"fd20"}},"category-plus":{"name":"category-plus","category":"","tags":[],"variants":{"outline":"fd21"}},"category":{"name":"category","category":"Shapes","tags":["folder","menu","tag","game"],"variants":{"outline":"f1f6","filled":"fb2e"}},"ce-off":{"name":"ce-off","category":"Symbols","tags":["sign","marking","administration","administrative","conformity","health","safety","environment","protection","standards","product","europe","eea","economic","area","manufacture"],"variants":{"outline":"f0ca"}},"ce":{"name":"ce","category":"Symbols","tags":["sign","marking","administration","administrative","conformity","health","safety","environment","protection","standards","product","europe","eea","economic","area","manufacture"],"variants":{"outline":"ed75"}},"cell-signal-1":{"name":"cell-signal-1","category":"Devices","tags":["mobile","phone","connetcion","wireless","network"],"variants":{"outline":"f083"}},"cell-signal-2":{"name":"cell-signal-2","category":"Devices","tags":["mobile","phone","connetcion","wireless","network"],"variants":{"outline":"f084"}},"cell-signal-3":{"name":"cell-signal-3","category":"Devices","tags":["mobile","phone","connetcion","wireless","network"],"variants":{"outline":"f085"}},"cell-signal-4":{"name":"cell-signal-4","category":"Devices","tags":["mobile","phone","connetcion","wireless","network"],"variants":{"outline":"f086"}},"cell-signal-5":{"name":"cell-signal-5","category":"Devices","tags":["mobile","phone","connetcion","wireless","network"],"variants":{"outline":"f087"}},"cell-signal-off":{"name":"cell-signal-off","category":"Devices","tags":["mobile","phone","connetcion","wireless","network"],"variants":{"outline":"f088"}},"cell":{"name":"cell","category":"","tags":["biology","molecule","chemistry","human","laboratory"],"variants":{"outline":"f05f"}},"certificate-2-off":{"name":"certificate-2-off","category":"Document","tags":["award","license","document","achievement","course","complete"],"variants":{"outline":"f0cb"}},"certificate-2":{"name":"certificate-2","category":"Document","tags":["award","license","document","achievement","course","complete"],"variants":{"outline":"f073"}},"certificate-off":{"name":"certificate-off","category":"Document","tags":["document","official","attest","signature","birth","death","gift","authenticity","seal","course","complete","qualification"],"variants":{"outline":"f0cc"}},"certificate":{"name":"certificate","category":"Document","tags":["document","official","attest","signature","birth","death","gift","authenticity","seal","course","complete","qualification"],"variants":{"outline":"ed76"}},"chair-director":{"name":"chair-director","category":"","tags":["film","seat","furniture","interior"],"variants":{"outline":"f2d5"}},"chalkboard-off":{"name":"chalkboard-off","category":"Document","tags":["school","classroom","education","learn"],"variants":{"outline":"f3d1"}},"chalkboard":{"name":"chalkboard","category":"Document","tags":["school","classroom","education","learn"],"variants":{"outline":"f34d"}},"charging-pile":{"name":"charging-pile","category":"Vehicles","tags":["electric","electricity","hybrid","tesla","station","electronic","point"],"variants":{"outline":"ee26"}},"chart-arcs-3":{"name":"chart-arcs-3","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ee27"}},"chart-arcs":{"name":"chart-arcs","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ee28"}},"chart-area-line":{"name":"chart-area-line","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ea57","filled":"f66c"}},"chart-area":{"name":"chart-area","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ea58","filled":"f66b"}},"chart-arrows-vertical":{"name":"chart-arrows-vertical","category":"Charts","tags":["statistics","data","value","variable","scale","statistical","level","increase","decrease"],"variants":{"outline":"ee29"}},"chart-arrows":{"name":"chart-arrows","category":"Charts","tags":["statistics","data","value","variable","scale","statistical","level","increase","decrease"],"variants":{"outline":"ee2a"}},"chart-bar-off":{"name":"chart-bar-off","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"f3d2"}},"chart-bar-popular":{"name":"chart-bar-popular","category":"","tags":[],"variants":{"outline":"fef7"}},"chart-bar":{"name":"chart-bar","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ea59"}},"chart-bubble":{"name":"chart-bubble","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ec75","filled":"f66d"}},"chart-candle":{"name":"chart-candle","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ea5a","filled":"f66e"}},"chart-circles":{"name":"chart-circles","category":"Charts","tags":["statistics","analysis","analyse","graph"],"variants":{"outline":"ee2b"}},"chart-cohort":{"name":"chart-cohort","category":"","tags":[],"variants":{"outline":"fef6"}},"chart-donut-2":{"name":"chart-donut-2","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ee2c"}},"chart-donut-3":{"name":"chart-donut-3","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ee2d"}},"chart-donut-4":{"name":"chart-donut-4","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ee2e"}},"chart-donut":{"name":"chart-donut","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ea5b","filled":"f66f"}},"chart-dots-2":{"name":"chart-dots-2","category":"Charts","tags":["graph","diagram","analyticks","statistics","data","value","variable","scale","statistical"],"variants":{"outline":"f097"}},"chart-dots-3":{"name":"chart-dots-3","category":"Charts","tags":["graph","diagram","analyticks","statistics","data","value","variable","scale","statistical"],"variants":{"outline":"f098"}},"chart-dots":{"name":"chart-dots","category":"Charts","tags":["statistics","data","value","variable","scale","statistical"],"variants":{"outline":"ee2f","filled":"fd04"}},"chart-funnel":{"name":"chart-funnel","category":"","tags":[],"variants":{"outline":"fef5"}},"chart-grid-dots":{"name":"chart-grid-dots","category":"Charts","tags":["graph","diagram","analytics","statistics","data"],"variants":{"outline":"f4c2","filled":"fd05"}},"chart-histogram":{"name":"chart-histogram","category":"Charts","tags":["graph","diagram","curves","analytics"],"variants":{"outline":"f65c"}},"chart-infographic":{"name":"chart-infographic","category":"Charts","tags":["statistics","data","value","variable","scale","statistical","bar","information","report"],"variants":{"outline":"ee30"}},"chart-line":{"name":"chart-line","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ea5c"}},"chart-pie-2":{"name":"chart-pie-2","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ee31"}},"chart-pie-3":{"name":"chart-pie-3","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ee32"}},"chart-pie-4":{"name":"chart-pie-4","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ee33"}},"chart-pie-off":{"name":"chart-pie-off","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"f3d3"}},"chart-pie":{"name":"chart-pie","category":"Charts","tags":["statistics","diagram","graph","rhythm","data","analysis"],"variants":{"outline":"ea5d","filled":"f670"}},"chart-ppf":{"name":"chart-ppf","category":"Charts","tags":["graph","diagram","curves"],"variants":{"outline":"f618"}},"chart-radar":{"name":"chart-radar","category":"Charts","tags":["statistics","data","value","two","dimensions","variable","report","points"],"variants":{"outline":"ed77"}},"chart-sankey":{"name":"chart-sankey","category":"Charts","tags":["graph","diagram","curves","analytics"],"variants":{"outline":"f619"}},"chart-scatter-3d":{"name":"chart-scatter-3d","category":"","tags":[],"variants":{"outline":"fd92"}},"chart-scatter":{"name":"chart-scatter","category":"","tags":[],"variants":{"outline":"fd93"}},"chart-treemap":{"name":"chart-treemap","category":"Charts","tags":["diagram","analytics","buisness","data"],"variants":{"outline":"f381"}},"check":{"name":"check","category":"System","tags":["tick","yes","confirm"],"variants":{"outline":"ea5e"}},"checkbox":{"name":"checkbox","category":"System","tags":["survey","confirm","tick","yes","to-do"],"variants":{"outline":"eba6"}},"checklist":{"name":"checklist","category":"","tags":["task","delivery","clipboard","document","plan"],"variants":{"outline":"f074"}},"checks":{"name":"checks","category":"System","tags":["tick","yes","confirm"],"variants":{"outline":"ebaa"}},"checkup-list":{"name":"checkup-list","category":"Health","tags":["car","hospital","health","report"],"variants":{"outline":"ef5a"}},"cheese":{"name":"cheese","category":"Food","tags":["food","mouse","cooking","pizza","sandwiches","product","edam","gouda"],"variants":{"outline":"ef26"}},"chef-hat-off":{"name":"chef-hat-off","category":"Food","tags":["cooking","kitchen","restaurant","food","job"],"variants":{"outline":"f3d4"}},"chef-hat":{"name":"chef-hat","category":"Food","tags":["cooking","kitchen","restaurant","food","job"],"variants":{"outline":"f21d"}},"cherry":{"name":"cherry","category":"Nature","tags":["fruit","food","sweet","healthy"],"variants":{"outline":"f511","filled":"f728"}},"chess-bishop":{"name":"chess-bishop","category":"Sport","tags":["game","figure","strategy","pawn"],"variants":{"outline":"f56b","filled":"f729"}},"chess-king":{"name":"chess-king","category":"Sport","tags":["game","figure","strategy","pawn"],"variants":{"outline":"f56c","filled":"f72b"}},"chess-knight":{"name":"chess-knight","category":"Sport","tags":["game","figure","strategy","pawn"],"variants":{"outline":"f56d","filled":"f72c"}},"chess-queen":{"name":"chess-queen","category":"Sport","tags":["game","figure","strategy","pawn"],"variants":{"outline":"f56e","filled":"f72d"}},"chess-rook":{"name":"chess-rook","category":"Sport","tags":["game","figure","strategy","pawn"],"variants":{"outline":"f56f","filled":"f72e"}},"chess":{"name":"chess","category":"Sport","tags":["game","strategy","pawn","figure"],"variants":{"outline":"f382","filled":"f72a"}},"chevron-compact-down":{"name":"chevron-compact-down","category":"Arrows","tags":[],"variants":{"outline":"faf0"}},"chevron-compact-left":{"name":"chevron-compact-left","category":"Arrows","tags":[],"variants":{"outline":"faf1"}},"chevron-compact-right":{"name":"chevron-compact-right","category":"Arrows","tags":[],"variants":{"outline":"faf2"}},"chevron-compact-up":{"name":"chevron-compact-up","category":"Arrows","tags":[],"variants":{"outline":"faf3"}},"chevron-down-left":{"name":"chevron-down-left","category":"Arrows","tags":["move","aside","bottom"],"variants":{"outline":"ed09"}},"chevron-down-right":{"name":"chevron-down-right","category":"Arrows","tags":["move","aside","bottom"],"variants":{"outline":"ed0a"}},"chevron-down":{"name":"chevron-down","category":"Arrows","tags":["move","next","swipe","bottom"],"variants":{"outline":"ea5f"}},"chevron-left-pipe":{"name":"chevron-left-pipe","category":"Arrows","tags":[],"variants":{"outline":"fae4"}},"chevron-left":{"name":"chevron-left","category":"Arrows","tags":["move","previous","back"],"variants":{"outline":"ea60"}},"chevron-right-pipe":{"name":"chevron-right-pipe","category":"Arrows","tags":[],"variants":{"outline":"fae5"}},"chevron-right":{"name":"chevron-right","category":"Arrows","tags":["move","checklist","next"],"variants":{"outline":"ea61"}},"chevron-up-left":{"name":"chevron-up-left","category":"Arrows","tags":["move","aside","top"],"variants":{"outline":"ed0b"}},"chevron-up-right":{"name":"chevron-up-right","category":"Arrows","tags":["move","aside","top"],"variants":{"outline":"ed0c"}},"chevron-up":{"name":"chevron-up","category":"Arrows","tags":["move","top"],"variants":{"outline":"ea62"}},"chevrons-down-left":{"name":"chevrons-down-left","category":"Arrows","tags":["move","aside","bottom"],"variants":{"outline":"ed0d"}},"chevrons-down-right":{"name":"chevrons-down-right","category":"Arrows","tags":["move","aside","bottom"],"variants":{"outline":"ed0e"}},"chevrons-down":{"name":"chevrons-down","category":"Arrows","tags":["move","bottom"],"variants":{"outline":"ea63"}},"chevrons-left":{"name":"chevrons-left","category":"Arrows","tags":["move","back","roll"],"variants":{"outline":"ea64"}},"chevrons-right":{"name":"chevrons-right","category":"Arrows","tags":["move","next","checklist"],"variants":{"outline":"ea65"}},"chevrons-up-left":{"name":"chevrons-up-left","category":"Arrows","tags":["move","aside","top"],"variants":{"outline":"ed0f"}},"chevrons-up-right":{"name":"chevrons-up-right","category":"Arrows","tags":["move","aside","top"],"variants":{"outline":"ed10"}},"chevrons-up":{"name":"chevrons-up","category":"Arrows","tags":["move","top"],"variants":{"outline":"ea66"}},"chisel":{"name":"chisel","category":"","tags":["tool","equipment","work","wood"],"variants":{"outline":"f383"}},"christmas-ball":{"name":"christmas-ball","category":"","tags":["holiday-ball","festive","ornament","decoration","christmas","bauble","celebration","seasonal","holiday","decorative"],"variants":{"outline":"fd31"}},"christmas-tree-off":{"name":"christmas-tree-off","category":"Nature","tags":["holidays","pine","decorate","decoration","gift","present","carol","evergreen","spruce","fir","winter"],"variants":{"outline":"f3d5"}},"christmas-tree":{"name":"christmas-tree","category":"Nature","tags":["holidays","pine","decorate","decoration","gift","present","carol","evergreen","spruce","fir","winter"],"variants":{"outline":"ed78"}},"circle-arrow-down-left":{"name":"circle-arrow-down-left","category":"Arrows","tags":["shape","direction","west","bottom","south"],"variants":{"outline":"f6f6","filled":"f6f5"}},"circle-arrow-down-right":{"name":"circle-arrow-down-right","category":"Arrows","tags":["shape","direction","bottom","south","east"],"variants":{"outline":"f6f8","filled":"f6f7"}},"circle-arrow-down":{"name":"circle-arrow-down","category":"Arrows","tags":["shape","direction","bottom","south"],"variants":{"outline":"f6f9","filled":"f6f4"}},"circle-arrow-left":{"name":"circle-arrow-left","category":"Arrows","tags":["shape","direction","west"],"variants":{"outline":"f6fb","filled":"f6fa"}},"circle-arrow-right":{"name":"circle-arrow-right","category":"Arrows","tags":["shape","direction","east"],"variants":{"outline":"f6fd","filled":"f6fc"}},"circle-arrow-up-left":{"name":"circle-arrow-up-left","category":"Arrows","tags":["shape","direction","north","top","west"],"variants":{"outline":"f700","filled":"f6ff"}},"circle-arrow-up-right":{"name":"circle-arrow-up-right","category":"Arrows","tags":["shape","direction","north","top","east"],"variants":{"outline":"f702","filled":"f701"}},"circle-arrow-up":{"name":"circle-arrow-up","category":"Arrows","tags":["shape","direction","north","top"],"variants":{"outline":"f703","filled":"f6fe"}},"circle-caret-down":{"name":"circle-caret-down","category":"Arrows","tags":["direction","shape","south","bottom"],"variants":{"outline":"f4a9"}},"circle-caret-left":{"name":"circle-caret-left","category":"Arrows","tags":["direction","shape","west"],"variants":{"outline":"f4aa"}},"circle-caret-right":{"name":"circle-caret-right","category":"Arrows","tags":["direction","shape","east"],"variants":{"outline":"f4ab"}},"circle-caret-up":{"name":"circle-caret-up","category":"Arrows","tags":["direction","shape","north","top"],"variants":{"outline":"f4ac"}},"circle-check":{"name":"circle-check","category":"Shapes","tags":["accept","yes","tick","done"],"variants":{"outline":"ea67","filled":"f704"}},"circle-chevron-down":{"name":"circle-chevron-down","category":"Arrows","tags":["shape","south","bottom","direction"],"variants":{"outline":"f622"}},"circle-chevron-left":{"name":"circle-chevron-left","category":"Arrows","tags":["shape","direction","west"],"variants":{"outline":"f623"}},"circle-chevron-right":{"name":"circle-chevron-right","category":"Arrows","tags":["shape","direction","east"],"variants":{"outline":"f624"}},"circle-chevron-up":{"name":"circle-chevron-up","category":"Arrows","tags":["shape","direction","north","top"],"variants":{"outline":"f625"}},"circle-chevrons-down":{"name":"circle-chevrons-down","category":"Arrows","tags":["shape","south","bottom","direction"],"variants":{"outline":"f642"}},"circle-chevrons-left":{"name":"circle-chevrons-left","category":"Arrows","tags":["shape","direction","west"],"variants":{"outline":"f643"}},"circle-chevrons-right":{"name":"circle-chevrons-right","category":"Arrows","tags":["shape","direction","east"],"variants":{"outline":"f644"}},"circle-chevrons-up":{"name":"circle-chevrons-up","category":"Arrows","tags":["shape","direction","north","top"],"variants":{"outline":"f645"}},"circle-dashed-check":{"name":"circle-dashed-check","category":"Shapes","tags":["check","success","done","complete","tick","correct","confirm","approved","verified","valid","yes","circle","dashed"],"variants":{"outline":"feb8"}},"circle-dashed-letter-a":{"name":"circle-dashed-letter-a","category":"Letters","tags":[],"variants":{"outline":"ff9a"}},"circle-dashed-letter-b":{"name":"circle-dashed-letter-b","category":"Letters","tags":[],"variants":{"outline":"ff99"}},"circle-dashed-letter-c":{"name":"circle-dashed-letter-c","category":"Letters","tags":[],"variants":{"outline":"ff98"}},"circle-dashed-letter-d":{"name":"circle-dashed-letter-d","category":"Letters","tags":[],"variants":{"outline":"ff97"}},"circle-dashed-letter-e":{"name":"circle-dashed-letter-e","category":"Letters","tags":[],"variants":{"outline":"ff96"}},"circle-dashed-letter-f":{"name":"circle-dashed-letter-f","category":"Letters","tags":[],"variants":{"outline":"ff95"}},"circle-dashed-letter-g":{"name":"circle-dashed-letter-g","category":"Letters","tags":[],"variants":{"outline":"ff94"}},"circle-dashed-letter-h":{"name":"circle-dashed-letter-h","category":"Letters","tags":[],"variants":{"outline":"ff93"}},"circle-dashed-letter-i":{"name":"circle-dashed-letter-i","category":"Letters","tags":[],"variants":{"outline":"ff92"}},"circle-dashed-letter-j":{"name":"circle-dashed-letter-j","category":"Letters","tags":[],"variants":{"outline":"ff91"}},"circle-dashed-letter-k":{"name":"circle-dashed-letter-k","category":"Letters","tags":[],"variants":{"outline":"ff90"}},"circle-dashed-letter-l":{"name":"circle-dashed-letter-l","category":"Letters","tags":[],"variants":{"outline":"ff8f"}},"circle-dashed-letter-letter-v":{"name":"circle-dashed-letter-letter-v","category":"Letters","tags":[],"variants":{"outline":"ff8e"}},"circle-dashed-letter-m":{"name":"circle-dashed-letter-m","category":"Letters","tags":[],"variants":{"outline":"ff8d"}},"circle-dashed-letter-n":{"name":"circle-dashed-letter-n","category":"Letters","tags":[],"variants":{"outline":"ff8c"}},"circle-dashed-letter-o":{"name":"circle-dashed-letter-o","category":"Letters","tags":[],"variants":{"outline":"ff8b"}},"circle-dashed-letter-p":{"name":"circle-dashed-letter-p","category":"Letters","tags":[],"variants":{"outline":"ff8a"}},"circle-dashed-letter-q":{"name":"circle-dashed-letter-q","category":"Letters","tags":[],"variants":{"outline":"ff89"}},"circle-dashed-letter-r":{"name":"circle-dashed-letter-r","category":"Letters","tags":[],"variants":{"outline":"ff88"}},"circle-dashed-letter-s":{"name":"circle-dashed-letter-s","category":"Letters","tags":[],"variants":{"outline":"ff87"}},"circle-dashed-letter-t":{"name":"circle-dashed-letter-t","category":"Letters","tags":[],"variants":{"outline":"ff86"}},"circle-dashed-letter-u":{"name":"circle-dashed-letter-u","category":"Letters","tags":[],"variants":{"outline":"ff85"}},"circle-dashed-letter-v":{"name":"circle-dashed-letter-v","category":"Letters","tags":[],"variants":{"outline":"ff84"}},"circle-dashed-letter-w":{"name":"circle-dashed-letter-w","category":"Letters","tags":[],"variants":{"outline":"ff83"}},"circle-dashed-letter-x":{"name":"circle-dashed-letter-x","category":"Letters","tags":[],"variants":{"outline":"ff82"}},"circle-dashed-letter-y":{"name":"circle-dashed-letter-y","category":"Letters","tags":[],"variants":{"outline":"ff81"}},"circle-dashed-letter-z":{"name":"circle-dashed-letter-z","category":"Letters","tags":[],"variants":{"outline":"ff80"}},"circle-dashed-minus":{"name":"circle-dashed-minus","category":"Shapes","tags":[],"variants":{"outline":"feb7"}},"circle-dashed-number-0":{"name":"circle-dashed-number-0","category":"Numbers","tags":[],"variants":{"outline":"fc6b"}},"circle-dashed-number-1":{"name":"circle-dashed-number-1","category":"Numbers","tags":[],"variants":{"outline":"fc6c"}},"circle-dashed-number-2":{"name":"circle-dashed-number-2","category":"Numbers","tags":[],"variants":{"outline":"fc6d"}},"circle-dashed-number-3":{"name":"circle-dashed-number-3","category":"Numbers","tags":[],"variants":{"outline":"fc6e"}},"circle-dashed-number-4":{"name":"circle-dashed-number-4","category":"Numbers","tags":[],"variants":{"outline":"fc6f"}},"circle-dashed-number-5":{"name":"circle-dashed-number-5","category":"Numbers","tags":[],"variants":{"outline":"fc70"}},"circle-dashed-number-6":{"name":"circle-dashed-number-6","category":"Numbers","tags":[],"variants":{"outline":"fc71"}},"circle-dashed-number-7":{"name":"circle-dashed-number-7","category":"Numbers","tags":[],"variants":{"outline":"fc72"}},"circle-dashed-number-8":{"name":"circle-dashed-number-8","category":"Numbers","tags":[],"variants":{"outline":"fc73"}},"circle-dashed-number-9":{"name":"circle-dashed-number-9","category":"Numbers","tags":[],"variants":{"outline":"fc74"}},"circle-dashed-percentage":{"name":"circle-dashed-percentage","category":"","tags":[],"variants":{"outline":"fd7a"}},"circle-dashed-plus":{"name":"circle-dashed-plus","category":"Shapes","tags":[],"variants":{"outline":"feb6"}},"circle-dashed-x":{"name":"circle-dashed-x","category":"Shapes","tags":[],"variants":{"outline":"fc75"}},"circle-dashed":{"name":"circle-dashed","category":"Shapes","tags":["shape","line","check"],"variants":{"outline":"ed27"}},"circle-dot":{"name":"circle-dot","category":"Shapes","tags":["crosshair","shape","geometry"],"variants":{"outline":"efb1","filled":"f705"}},"circle-dotted-letter-a":{"name":"circle-dotted-letter-a","category":"Letters","tags":[],"variants":{"outline":"ff7f"}},"circle-dotted-letter-b":{"name":"circle-dotted-letter-b","category":"Letters","tags":[],"variants":{"outline":"ff7e"}},"circle-dotted-letter-c":{"name":"circle-dotted-letter-c","category":"Letters","tags":[],"variants":{"outline":"ff7d"}},"circle-dotted-letter-d":{"name":"circle-dotted-letter-d","category":"Letters","tags":[],"variants":{"outline":"ff7c"}},"circle-dotted-letter-e":{"name":"circle-dotted-letter-e","category":"Letters","tags":[],"variants":{"outline":"ff7b"}},"circle-dotted-letter-f":{"name":"circle-dotted-letter-f","category":"Letters","tags":[],"variants":{"outline":"ff7a"}},"circle-dotted-letter-g":{"name":"circle-dotted-letter-g","category":"Letters","tags":[],"variants":{"outline":"ff79"}},"circle-dotted-letter-h":{"name":"circle-dotted-letter-h","category":"Letters","tags":[],"variants":{"outline":"ff78"}},"circle-dotted-letter-i":{"name":"circle-dotted-letter-i","category":"Letters","tags":[],"variants":{"outline":"ff77"}},"circle-dotted-letter-j":{"name":"circle-dotted-letter-j","category":"Letters","tags":[],"variants":{"outline":"ff76"}},"circle-dotted-letter-k":{"name":"circle-dotted-letter-k","category":"Letters","tags":[],"variants":{"outline":"ff75"}},"circle-dotted-letter-l":{"name":"circle-dotted-letter-l","category":"Letters","tags":[],"variants":{"outline":"ff74"}},"circle-dotted-letter-m":{"name":"circle-dotted-letter-m","category":"Letters","tags":[],"variants":{"outline":"ff73"}},"circle-dotted-letter-n":{"name":"circle-dotted-letter-n","category":"Letters","tags":[],"variants":{"outline":"ff72"}},"circle-dotted-letter-o":{"name":"circle-dotted-letter-o","category":"Letters","tags":[],"variants":{"outline":"ff71"}},"circle-dotted-letter-p":{"name":"circle-dotted-letter-p","category":"Letters","tags":[],"variants":{"outline":"ff70"}},"circle-dotted-letter-q":{"name":"circle-dotted-letter-q","category":"Letters","tags":[],"variants":{"outline":"ff6f"}},"circle-dotted-letter-r":{"name":"circle-dotted-letter-r","category":"Letters","tags":[],"variants":{"outline":"ff6e"}},"circle-dotted-letter-s":{"name":"circle-dotted-letter-s","category":"Letters","tags":[],"variants":{"outline":"ff6d"}},"circle-dotted-letter-t":{"name":"circle-dotted-letter-t","category":"Letters","tags":[],"variants":{"outline":"ff6c"}},"circle-dotted-letter-u":{"name":"circle-dotted-letter-u","category":"Letters","tags":[],"variants":{"outline":"ff6b"}},"circle-dotted-letter-v":{"name":"circle-dotted-letter-v","category":"Letters","tags":[],"variants":{"outline":"ff6a"}},"circle-dotted-letter-w":{"name":"circle-dotted-letter-w","category":"Letters","tags":[],"variants":{"outline":"ff69"}},"circle-dotted-letter-x":{"name":"circle-dotted-letter-x","category":"Letters","tags":[],"variants":{"outline":"ff68"}},"circle-dotted-letter-y":{"name":"circle-dotted-letter-y","category":"Letters","tags":[],"variants":{"outline":"ff67"}},"circle-dotted-letter-z":{"name":"circle-dotted-letter-z","category":"Letters","tags":[],"variants":{"outline":"ff66"}},"circle-dotted":{"name":"circle-dotted","category":"Shapes","tags":["shape","point","check"],"variants":{"outline":"ed28"}},"circle-half-2":{"name":"circle-half-2","category":"Shapes","tags":["shape","split","slash"],"variants":{"outline":"eff3"}},"circle-half-vertical":{"name":"circle-half-vertical","category":"Shapes","tags":["shape","split","slash"],"variants":{"outline":"ee3e"}},"circle-half":{"name":"circle-half","category":"Shapes","tags":["shape","split","slash"],"variants":{"outline":"ee3f"}},"circle-key":{"name":"circle-key","category":"","tags":["shape","lock","door","acsses"],"variants":{"outline":"f633","filled":"f706"}},"circle-letter-a":{"name":"circle-letter-a","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f441","filled":"fe7f"}},"circle-letter-b":{"name":"circle-letter-b","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f442","filled":"fe7e"}},"circle-letter-c":{"name":"circle-letter-c","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f443","filled":"fe7d"}},"circle-letter-d":{"name":"circle-letter-d","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f444","filled":"fe7c"}},"circle-letter-e":{"name":"circle-letter-e","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f445","filled":"fe7b"}},"circle-letter-f":{"name":"circle-letter-f","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f446","filled":"fe7a"}},"circle-letter-g":{"name":"circle-letter-g","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f447","filled":"fe79"}},"circle-letter-h":{"name":"circle-letter-h","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f448","filled":"fe78"}},"circle-letter-i":{"name":"circle-letter-i","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f449","filled":"fe77"}},"circle-letter-j":{"name":"circle-letter-j","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f44a","filled":"fe76"}},"circle-letter-k":{"name":"circle-letter-k","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f44b","filled":"fe75"}},"circle-letter-l":{"name":"circle-letter-l","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f44c","filled":"fe74"}},"circle-letter-m":{"name":"circle-letter-m","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f44d","filled":"fe73"}},"circle-letter-n":{"name":"circle-letter-n","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f44e","filled":"fe72"}},"circle-letter-o":{"name":"circle-letter-o","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f44f","filled":"fe71"}},"circle-letter-p":{"name":"circle-letter-p","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f450","filled":"fe70"}},"circle-letter-q":{"name":"circle-letter-q","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f451","filled":"fe6f"}},"circle-letter-r":{"name":"circle-letter-r","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f452","filled":"fe6e"}},"circle-letter-s":{"name":"circle-letter-s","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f453","filled":"fe6d"}},"circle-letter-t":{"name":"circle-letter-t","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f454","filled":"fe6c"}},"circle-letter-u":{"name":"circle-letter-u","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f455","filled":"fe6b"}},"circle-letter-v":{"name":"circle-letter-v","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f4ad","filled":"fe6a"}},"circle-letter-w":{"name":"circle-letter-w","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f456","filled":"fe69"}},"circle-letter-x":{"name":"circle-letter-x","category":"Letters","tags":["cancel","no"],"variants":{"outline":"f4ae","filled":"fe68"}},"circle-letter-y":{"name":"circle-letter-y","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f457","filled":"fe67"}},"circle-letter-z":{"name":"circle-letter-z","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f458","filled":"fe66"}},"circle-minus-2":{"name":"circle-minus-2","category":"Shapes","tags":[],"variants":{"outline":"fc8c"}},"circle-minus":{"name":"circle-minus","category":"Shapes","tags":["remove","delete"],"variants":{"outline":"ea68"}},"circle-number-0":{"name":"circle-number-0","category":"Numbers","tags":["zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee34","filled":"f72f"}},"circle-number-1":{"name":"circle-number-1","category":"Numbers","tags":["one","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee35","filled":"f730"}},"circle-number-2":{"name":"circle-number-2","category":"Numbers","tags":["two","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee36","filled":"f731"}},"circle-number-3":{"name":"circle-number-3","category":"Numbers","tags":["three","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee37","filled":"f732"}},"circle-number-4":{"name":"circle-number-4","category":"Numbers","tags":["four","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee38","filled":"f733"}},"circle-number-5":{"name":"circle-number-5","category":"Numbers","tags":["five","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee39","filled":"f734"}},"circle-number-6":{"name":"circle-number-6","category":"Numbers","tags":["six","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee3a","filled":"f735"}},"circle-number-7":{"name":"circle-number-7","category":"Numbers","tags":["seven","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee3b","filled":"f736"}},"circle-number-8":{"name":"circle-number-8","category":"Numbers","tags":["eight","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee3c","filled":"f737"}},"circle-number-9":{"name":"circle-number-9","category":"Numbers","tags":["nine","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"ee3d","filled":"f738"}},"circle-off":{"name":"circle-off","category":"Shapes","tags":["off","zero"],"variants":{"outline":"ee40"}},"circle-percentage":{"name":"circle-percentage","category":"","tags":[],"variants":{"outline":"fd7b","filled":"fed5"}},"circle-plus-2":{"name":"circle-plus-2","category":"Shapes","tags":[],"variants":{"outline":"fc8d"}},"circle-plus":{"name":"circle-plus","category":"Shapes","tags":["add","create","new"],"variants":{"outline":"ea69","filled":"fef9"}},"circle-rectangle-off":{"name":"circle-rectangle-off","category":"Shapes","tags":["shape","geometric","geometry","figure"],"variants":{"outline":"f0cd"}},"circle-rectangle":{"name":"circle-rectangle","category":"Shapes","tags":["shape","geometric","geometry","figure"],"variants":{"outline":"f010","filled":"ff63"}},"circle-square":{"name":"circle-square","category":"Shapes","tags":["shape","spot","math"],"variants":{"outline":"ece4"}},"circle-triangle":{"name":"circle-triangle","category":"","tags":["arrow","down","shape","geometry"],"variants":{"outline":"f011"}},"circle-x":{"name":"circle-x","category":"Shapes","tags":["cancel","no"],"variants":{"outline":"ea6a","filled":"f739"}},"circle":{"name":"circle","category":"Shapes","tags":["off","zero"],"variants":{"outline":"ea6b","filled":"f671"}},"circles-relation":{"name":"circles-relation","category":"","tags":["connection","link","shape","hyperlink"],"variants":{"outline":"f4c3"}},"circles":{"name":"circles","category":"Shapes","tags":["shape","marbles","balls","juggle","spots"],"variants":{"outline":"ece5","filled":"f672"}},"circuit-ammeter":{"name":"circuit-ammeter","category":"Electrical","tags":["diagram","electric","electricity"],"variants":{"outline":"f271"}},"circuit-battery":{"name":"circuit-battery","category":"Electrical","tags":["diagram","electric","electricity","power"],"variants":{"outline":"f272"}},"circuit-bulb":{"name":"circuit-bulb","category":"Electrical","tags":["lamp","light","electric","electrical"],"variants":{"outline":"f273"}},"circuit-capacitor-polarized":{"name":"circuit-capacitor-polarized","category":"Electrical","tags":["diagram","electric","electrity"],"variants":{"outline":"f274"}},"circuit-capacitor":{"name":"circuit-capacitor","category":"Electrical","tags":["diagram","electric","electrity"],"variants":{"outline":"f275"}},"circuit-cell-plus":{"name":"circuit-cell-plus","category":"Electrical","tags":["electirc","diagram","electrity","battery","power"],"variants":{"outline":"f276"}},"circuit-cell":{"name":"circuit-cell","category":"Electrical","tags":["electirc","diagram","electrity","battery","power"],"variants":{"outline":"f277"}},"circuit-changeover":{"name":"circuit-changeover","category":"Electrical","tags":["electirc","diagram","electrity","change"],"variants":{"outline":"f278"}},"circuit-diode-zener":{"name":"circuit-diode-zener","category":"Electrical","tags":["electirc","electrity","diagram","digital"],"variants":{"outline":"f279"}},"circuit-diode":{"name":"circuit-diode","category":"Electrical","tags":["diagram","electic","electronic","led"],"variants":{"outline":"f27a"}},"circuit-ground-digital":{"name":"circuit-ground-digital","category":"Electrical","tags":["electirc","electrity","diagram"],"variants":{"outline":"f27b"}},"circuit-ground":{"name":"circuit-ground","category":"Electrical","tags":["electirc","electrity","diagram"],"variants":{"outline":"f27c"}},"circuit-inductor":{"name":"circuit-inductor","category":"Electrical","tags":["electirc","electrity","diagram","coil"],"variants":{"outline":"f27d"}},"circuit-motor":{"name":"circuit-motor","category":"Electrical","tags":["circuity","diagram","electric","electricy"],"variants":{"outline":"f27e"}},"circuit-pushbutton":{"name":"circuit-pushbutton","category":"Electrical","tags":["diagram","electric","electricy","open"],"variants":{"outline":"f27f"}},"circuit-resistor":{"name":"circuit-resistor","category":"Electrical","tags":["diagram","electric","electricy","nema"],"variants":{"outline":"f280"}},"circuit-switch-closed":{"name":"circuit-switch-closed","category":"Electrical","tags":["diagram","electric","electricy","locked"],"variants":{"outline":"f281"}},"circuit-switch-open":{"name":"circuit-switch-open","category":"Electrical","tags":["diagram","electric","electricy","opened"],"variants":{"outline":"f282"}},"circuit-voltmeter":{"name":"circuit-voltmeter","category":"Electrical","tags":["diagram","electric","electricy","component"],"variants":{"outline":"f283"}},"clear-all":{"name":"clear-all","category":"","tags":["app","clear","all","emails","phone"],"variants":{"outline":"ee41"}},"clear-formatting":{"name":"clear-formatting","category":"Text","tags":["text","return","default"],"variants":{"outline":"ebe5"}},"click":{"name":"click","category":"","tags":["select","cursor"],"variants":{"outline":"ebbc"}},"cliff-jumping":{"name":"cliff-jumping","category":"Sport","tags":["rock","fall","movement","motion","trampoline","height"],"variants":{"outline":"fefc"}},"clipboard-check":{"name":"clipboard-check","category":"Document","tags":["copy","yes"],"variants":{"outline":"ea6c"}},"clipboard-copy":{"name":"clipboard-copy","category":"Document","tags":["duplicate","paste","document","task"],"variants":{"outline":"f299"}},"clipboard-data":{"name":"clipboard-data","category":"Document","tags":["document","report","file","list","analytics"],"variants":{"outline":"f563"}},"clipboard-heart":{"name":"clipboard-heart","category":"Document","tags":["medical","health","healthcare","medicine","hospital"],"variants":{"outline":"f34e"}},"clipboard-list":{"name":"clipboard-list","category":"Document","tags":["copy","items"],"variants":{"outline":"ea6d"}},"clipboard-off":{"name":"clipboard-off","category":"Document","tags":["copy","clipboard","paste","document","file","paper","note","text","page","sheet","blank"],"variants":{"outline":"f0ce"}},"clipboard-plus":{"name":"clipboard-plus","category":"Document","tags":["document","file","add","new"],"variants":{"outline":"efb2"}},"clipboard-smile":{"name":"clipboard-smile","category":"","tags":[],"variants":{"outline":"fd9a"}},"clipboard-text":{"name":"clipboard-text","category":"Document","tags":["document","file","report","page","note"],"variants":{"outline":"f089"}},"clipboard-typography":{"name":"clipboard-typography","category":"Document","tags":["document","list","raport","paper"],"variants":{"outline":"f34f"}},"clipboard-x":{"name":"clipboard-x","category":"Document","tags":["copy","no"],"variants":{"outline":"ea6e"}},"clipboard":{"name":"clipboard","category":"Document","tags":["copy","clipboard","paste","document","file","paper","note","text","page","sheet","blank"],"variants":{"outline":"ea6f"}},"clock-12":{"name":"clock-12","category":"System","tags":["time","hour","watch","timepiece","twelve-hour","am/pm","noon","midday","daytime","clock-face"],"variants":{"outline":"fc56"}},"clock-2":{"name":"clock-2","category":"System","tags":["time","watch","timer","alarm","date","hour","schedule"],"variants":{"outline":"f099"}},"clock-24":{"name":"clock-24","category":"System","tags":["time","hour","watch","timepiece","twenty-four-hour","24-hour","military","clock-face","round-clock","day-night"],"variants":{"outline":"fc57"}},"clock-bitcoin":{"name":"clock-bitcoin","category":"","tags":[],"variants":{"outline":"ff3f"}},"clock-bolt":{"name":"clock-bolt","category":"System","tags":[],"variants":{"outline":"f844"}},"clock-cancel":{"name":"clock-cancel","category":"System","tags":["time","delete","remove","close","alarm"],"variants":{"outline":"f546"}},"clock-check":{"name":"clock-check","category":"System","tags":[],"variants":{"outline":"f7c1"}},"clock-code":{"name":"clock-code","category":"System","tags":[],"variants":{"outline":"f845"}},"clock-cog":{"name":"clock-cog","category":"System","tags":[],"variants":{"outline":"f7c2"}},"clock-dollar":{"name":"clock-dollar","category":"System","tags":[],"variants":{"outline":"f846"}},"clock-down":{"name":"clock-down","category":"System","tags":[],"variants":{"outline":"f7c3"}},"clock-edit":{"name":"clock-edit","category":"System","tags":["time","edit","create","alarm"],"variants":{"outline":"f547"}},"clock-exclamation":{"name":"clock-exclamation","category":"System","tags":[],"variants":{"outline":"f847"}},"clock-heart":{"name":"clock-heart","category":"System","tags":[],"variants":{"outline":"f7c4"}},"clock-hour-1":{"name":"clock-hour-1","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f313","filled":"fe65"}},"clock-hour-10":{"name":"clock-hour-10","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f314","filled":"fe64"}},"clock-hour-11":{"name":"clock-hour-11","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f315","filled":"fe63"}},"clock-hour-12":{"name":"clock-hour-12","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f316","filled":"fe62"}},"clock-hour-2":{"name":"clock-hour-2","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f317","filled":"fe61"}},"clock-hour-3":{"name":"clock-hour-3","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f318","filled":"fe60"}},"clock-hour-4":{"name":"clock-hour-4","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f319","filled":"fe5f"}},"clock-hour-5":{"name":"clock-hour-5","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f31a","filled":"fe5e"}},"clock-hour-6":{"name":"clock-hour-6","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f31b","filled":"fe5d"}},"clock-hour-7":{"name":"clock-hour-7","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f31c","filled":"fe5c"}},"clock-hour-8":{"name":"clock-hour-8","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f31d","filled":"fe5b"}},"clock-hour-9":{"name":"clock-hour-9","category":"System","tags":["time","watch","timer","alarm","minutes","seconds"],"variants":{"outline":"f31e","filled":"fe5a"}},"clock-minus":{"name":"clock-minus","category":"System","tags":[],"variants":{"outline":"f848"}},"clock-off":{"name":"clock-off","category":"System","tags":["time","watch","alarm"],"variants":{"outline":"f0cf"}},"clock-pause":{"name":"clock-pause","category":"System","tags":["time","stop","pause","wait","rest","off"],"variants":{"outline":"f548"}},"clock-pin":{"name":"clock-pin","category":"System","tags":[],"variants":{"outline":"f849"}},"clock-play":{"name":"clock-play","category":"System","tags":["time","hour","work","alarm","on"],"variants":{"outline":"f549"}},"clock-plus":{"name":"clock-plus","category":"System","tags":[],"variants":{"outline":"f7c5"}},"clock-question":{"name":"clock-question","category":"System","tags":[],"variants":{"outline":"f7c6"}},"clock-record":{"name":"clock-record","category":"System","tags":["time","watch","alarm","recording"],"variants":{"outline":"f54a"}},"clock-search":{"name":"clock-search","category":"System","tags":[],"variants":{"outline":"f7c7"}},"clock-share":{"name":"clock-share","category":"System","tags":[],"variants":{"outline":"f84a"}},"clock-shield":{"name":"clock-shield","category":"System","tags":[],"variants":{"outline":"f7c8"}},"clock-star":{"name":"clock-star","category":"System","tags":[],"variants":{"outline":"f7c9"}},"clock-stop":{"name":"clock-stop","category":"System","tags":["time","watch","alarm","pause","off"],"variants":{"outline":"f54b"}},"clock-up":{"name":"clock-up","category":"System","tags":[],"variants":{"outline":"f7ca"}},"clock-x":{"name":"clock-x","category":"System","tags":[],"variants":{"outline":"f7cb"}},"clock":{"name":"clock","category":"System","tags":["time","watch","alarm"],"variants":{"outline":"ea70","filled":"f73a"}},"clothes-rack-off":{"name":"clothes-rack-off","category":"","tags":["hanger","furniture","fashion","clothing","stand"],"variants":{"outline":"f3d6"}},"clothes-rack":{"name":"clothes-rack","category":"","tags":["hanger","furniture","fashion","clothing","stand"],"variants":{"outline":"f285"}},"cloud-bitcoin":{"name":"cloud-bitcoin","category":"","tags":[],"variants":{"outline":"ff3e"}},"cloud-bolt":{"name":"cloud-bolt","category":"Weather","tags":[],"variants":{"outline":"f84b"}},"cloud-cancel":{"name":"cloud-cancel","category":"Weather","tags":[],"variants":{"outline":"f84c"}},"cloud-check":{"name":"cloud-check","category":"Weather","tags":[],"variants":{"outline":"f84d"}},"cloud-code":{"name":"cloud-code","category":"Weather","tags":[],"variants":{"outline":"f84e"}},"cloud-cog":{"name":"cloud-cog","category":"Weather","tags":[],"variants":{"outline":"f84f"}},"cloud-computing":{"name":"cloud-computing","category":"Computers","tags":["server","network","data","storage","share","internet"],"variants":{"outline":"f1d0"}},"cloud-data-connection":{"name":"cloud-data-connection","category":"Computers","tags":["media","network","storage","access"],"variants":{"outline":"f1d1"}},"cloud-dollar":{"name":"cloud-dollar","category":"Weather","tags":[],"variants":{"outline":"f850"}},"cloud-down":{"name":"cloud-down","category":"Weather","tags":[],"variants":{"outline":"f851"}},"cloud-download":{"name":"cloud-download","category":"System","tags":["files"],"variants":{"outline":"ea71"}},"cloud-exclamation":{"name":"cloud-exclamation","category":"Weather","tags":[],"variants":{"outline":"f852"}},"cloud-fog":{"name":"cloud-fog","category":"Weather","tags":["weather","online"],"variants":{"outline":"ecd9"}},"cloud-heart":{"name":"cloud-heart","category":"Weather","tags":[],"variants":{"outline":"f853"}},"cloud-lock-open":{"name":"cloud-lock-open","category":"System","tags":["unlock","password","private","pass"],"variants":{"outline":"efda"}},"cloud-lock":{"name":"cloud-lock","category":"System","tags":["security","secure","locked","password"],"variants":{"outline":"efdb"}},"cloud-minus":{"name":"cloud-minus","category":"Weather","tags":[],"variants":{"outline":"f854"}},"cloud-network":{"name":"cloud-network","category":"","tags":[],"variants":{"outline":"fc78"}},"cloud-off":{"name":"cloud-off","category":"Weather","tags":["weather","online"],"variants":{"outline":"ed3e"}},"cloud-pause":{"name":"cloud-pause","category":"Weather","tags":[],"variants":{"outline":"f855"}},"cloud-pin":{"name":"cloud-pin","category":"Weather","tags":[],"variants":{"outline":"f856"}},"cloud-plus":{"name":"cloud-plus","category":"Weather","tags":[],"variants":{"outline":"f857"}},"cloud-question":{"name":"cloud-question","category":"Weather","tags":[],"variants":{"outline":"f858"}},"cloud-rain":{"name":"cloud-rain","category":"Weather","tags":["weather","dry"],"variants":{"outline":"ea72"}},"cloud-search":{"name":"cloud-search","category":"Weather","tags":[],"variants":{"outline":"f859"}},"cloud-share":{"name":"cloud-share","category":"Weather","tags":[],"variants":{"outline":"f85a"}},"cloud-snow":{"name":"cloud-snow","category":"Weather","tags":["weather","blizzard"],"variants":{"outline":"ea73"}},"cloud-star":{"name":"cloud-star","category":"Weather","tags":[],"variants":{"outline":"f85b"}},"cloud-storm":{"name":"cloud-storm","category":"Weather","tags":["weather","lightning"],"variants":{"outline":"ea74"}},"cloud-up":{"name":"cloud-up","category":"Weather","tags":[],"variants":{"outline":"f85c"}},"cloud-upload":{"name":"cloud-upload","category":"System","tags":["files"],"variants":{"outline":"ea75"}},"cloud-x":{"name":"cloud-x","category":"Weather","tags":[],"variants":{"outline":"f85d"}},"cloud":{"name":"cloud","category":"Weather","tags":["weather","online"],"variants":{"outline":"ea76","filled":"f673"}},"clover-2":{"name":"clover-2","category":"Nature","tags":["luck","leaf","patrick","irleand","irish"],"variants":{"outline":"f21e"}},"clover":{"name":"clover","category":"Nature","tags":["luck","leaf","patrick","irleand","irish"],"variants":{"outline":"f1ea"}},"clubs":{"name":"clubs","category":"Shapes","tags":["card","game","casino","gambling","poker"],"variants":{"outline":"eff4","filled":"f674"}},"code-asterisk":{"name":"code-asterisk","category":"Text","tags":["coding","programming","html"],"variants":{"outline":"f312"}},"code-circle-2":{"name":"code-circle-2","category":"Text","tags":["coding","programming","development","shape","technology"],"variants":{"outline":"f4fe","filled":"fed4"}},"code-circle":{"name":"code-circle","category":"Text","tags":["coding","programming","development","shape","technology"],"variants":{"outline":"f4ff","filled":"fed3"}},"code-dots":{"name":"code-dots","category":"Text","tags":["program","script","programmer"],"variants":{"outline":"f61a"}},"code-minus":{"name":"code-minus","category":"Text","tags":["remove","delete","insert","braces"],"variants":{"outline":"ee42"}},"code-off":{"name":"code-off","category":"Text","tags":["brackets","source","programming","command"],"variants":{"outline":"f0d0"}},"code-plus":{"name":"code-plus","category":"Text","tags":["add","insert","braces"],"variants":{"outline":"ee43"}},"code":{"name":"code","category":"Text","tags":["brackets","source","programming","command"],"variants":{"outline":"ea77"}},"coffee-off":{"name":"coffee-off","category":"Food","tags":["espresso","hot","cup","latte","cafe","drink"],"variants":{"outline":"f106"}},"coffee":{"name":"coffee","category":"Food","tags":["espresso","hot","cup","latte","cafe","drink"],"variants":{"outline":"ef0e"}},"coffin":{"name":"coffin","category":"","tags":["halloween","death","scary","horror","cementry"],"variants":{"outline":"f579"}},"coin-bitcoin":{"name":"coin-bitcoin","category":"E-commerce","tags":["money","earn","salary","change"],"variants":{"outline":"f2be","filled":"fd06"}},"coin-euro":{"name":"coin-euro","category":"E-commerce","tags":["money","earn","salary","change"],"variants":{"outline":"f2bf","filled":"fd07"}},"coin-monero":{"name":"coin-monero","category":"E-commerce","tags":["money","earn","salary","change"],"variants":{"outline":"f4a0","filled":"fd09"}},"coin-off":{"name":"coin-off","category":"E-commerce","tags":["money","earn","salary","change","dollar"],"variants":{"outline":"f0d1"}},"coin-pound":{"name":"coin-pound","category":"E-commerce","tags":["money","earn","salary","change"],"variants":{"outline":"f2c0","filled":"fd0a"}},"coin-rupee":{"name":"coin-rupee","category":"E-commerce","tags":["money","earn","salary","change"],"variants":{"outline":"f2c1","filled":"fd0b"}},"coin-taka":{"name":"coin-taka","category":"","tags":[],"variants":{"outline":"fd0d","filled":"fd0c"}},"coin-yen":{"name":"coin-yen","category":"E-commerce","tags":["money","earn","salary","change"],"variants":{"outline":"f2c2","filled":"fd0e"}},"coin-yuan":{"name":"coin-yuan","category":"E-commerce","tags":["money","earn","salary","change"],"variants":{"outline":"f2c3","filled":"fd0f"}},"coin":{"name":"coin","category":"E-commerce","tags":["money","earn","salary","change","dollar"],"variants":{"outline":"eb82","filled":"fd08"}},"coins":{"name":"coins","category":"E-commerce","tags":["money","cash","finance","currency","dollar"],"variants":{"outline":"f65d"}},"color-filter":{"name":"color-filter","category":"Design","tags":["hue","brightness","effects","sotring","tools"],"variants":{"outline":"f5a8"}},"color-picker-off":{"name":"color-picker-off","category":"Design","tags":["timbre","saturation","paint","image","brush","choice","selection","sample"],"variants":{"outline":"f0d2"}},"color-picker":{"name":"color-picker","category":"Design","tags":["timbre","saturation","paint","image","brush","choice","selection","sample"],"variants":{"outline":"ebe6"}},"color-swatch-off":{"name":"color-swatch-off","category":"Design","tags":["sample","choice","selection"],"variants":{"outline":"f0d3"}},"color-swatch":{"name":"color-swatch","category":"Design","tags":["sample","choice","selection"],"variants":{"outline":"eb61"}},"column-insert-left":{"name":"column-insert-left","category":"Database","tags":["database","table","cells","arrow"],"variants":{"outline":"ee44"}},"column-insert-right":{"name":"column-insert-right","category":"Database","tags":["database","table","cells","arrow"],"variants":{"outline":"ee45"}},"column-remove":{"name":"column-remove","category":"Database","tags":[],"variants":{"outline":"faf4"}},"columns-1":{"name":"columns-1","category":"Text","tags":["layout","grid","design","arranegment"],"variants":{"outline":"f6d4"}},"columns-2":{"name":"columns-2","category":"Text","tags":["layout","grid","design","arranegment"],"variants":{"outline":"f6d5"}},"columns-3":{"name":"columns-3","category":"Text","tags":["layout","grid","design","arranegment"],"variants":{"outline":"f6d6"}},"columns-off":{"name":"columns-off","category":"Text","tags":["text","gap","table"],"variants":{"outline":"f0d4"}},"columns":{"name":"columns","category":"Text","tags":["text","gap","table"],"variants":{"outline":"eb83"}},"comet":{"name":"comet","category":"Weather","tags":["space","universe","star","orb","glow","night"],"variants":{"outline":"ec76"}},"command-off":{"name":"command-off","category":"Symbols","tags":["apple","key","keyboard","cmd"],"variants":{"outline":"f3d7"}},"command":{"name":"command","category":"Symbols","tags":["apple","key","keyboard","cmd"],"variants":{"outline":"ea78"}},"compass-off":{"name":"compass-off","category":"Map","tags":["navigation","safari","travel","direction","discover"],"variants":{"outline":"f0d5"}},"compass":{"name":"compass","category":"Map","tags":["navigation","safari","travel","direction","discover"],"variants":{"outline":"ea79","filled":"fd10"}},"components-off":{"name":"components-off","category":"Design","tags":["hardware","technology","electronic","computer","design","ux","figma"],"variants":{"outline":"f0d6"}},"components":{"name":"components","category":"Design","tags":["hardware","technology","electronic","computer","design","ux","figma"],"variants":{"outline":"efa5"}},"cone-2":{"name":"cone-2","category":"Shapes","tags":["geometry","math","object","shape"],"variants":{"outline":"efdc","filled":"fe59"}},"cone-off":{"name":"cone-off","category":"Shapes","tags":["geometry","math","object","shape"],"variants":{"outline":"f3d8"}},"cone-plus":{"name":"cone-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa94"}},"cone":{"name":"cone","category":"Shapes","tags":["geometry","math","object","shape"],"variants":{"outline":"efdd","filled":"fe58"}},"confetti-off":{"name":"confetti-off","category":"","tags":["party","celebrate","streamers","paper","parade","wedding","celebration"],"variants":{"outline":"f3d9"}},"confetti":{"name":"confetti","category":"","tags":["party","celebrate","streamers","paper","parade","wedding","celebration"],"variants":{"outline":"ee46"}},"confucius":{"name":"confucius","category":"Symbols","tags":["culture","religion","philosophy","tradition"],"variants":{"outline":"f58a"}},"container-off":{"name":"container-off","category":"Design","tags":["element","html","block","store","inside"],"variants":{"outline":"f107"}},"container":{"name":"container","category":"Design","tags":["element","html","block","store","inside"],"variants":{"outline":"ee47"}},"contract":{"name":"contract","category":"","tags":[],"variants":{"outline":"fefb"}},"contrast-2-off":{"name":"contrast-2-off","category":"Photography","tags":["edit","paint","photo"],"variants":{"outline":"f3da"}},"contrast-2":{"name":"contrast-2","category":"Photography","tags":["edit","paint","photo"],"variants":{"outline":"efc7","filled":"fe57"}},"contrast-off":{"name":"contrast-off","category":"Photography","tags":["edit","paint","photo"],"variants":{"outline":"f3db"}},"contrast":{"name":"contrast","category":"Photography","tags":["edit","paint","photo"],"variants":{"outline":"ec4e","filled":"fe56"}},"cooker":{"name":"cooker","category":"Food","tags":["kitchen","cook","oven","chef"],"variants":{"outline":"f57a"}},"cookie-man":{"name":"cookie-man","category":"","tags":[],"variants":{"outline":"fdb2","filled":"fe55"}},"cookie-off":{"name":"cookie-off","category":"Food","tags":["food","sweet","cooking","snack","internet","privacy"],"variants":{"outline":"f0d7"}},"cookie":{"name":"cookie","category":"","tags":[],"variants":{"outline":"fdb1","filled":"fe54"}},"copy-check":{"name":"copy-check","category":"","tags":[],"variants":{"outline":"fdb0","filled":"fe53"}},"copy-minus":{"name":"copy-minus","category":"","tags":[],"variants":{"outline":"fdaf","filled":"fe52"}},"copy-off":{"name":"copy-off","category":"Text","tags":["clipboard","clone","duplicate"],"variants":{"outline":"f0d8"}},"copy-plus":{"name":"copy-plus","category":"","tags":[],"variants":{"outline":"fdae","filled":"fe51"}},"copy-x":{"name":"copy-x","category":"","tags":[],"variants":{"outline":"fdad","filled":"fe50"}},"copy":{"name":"copy","category":"Text","tags":["clipboard","clone","duplicate"],"variants":{"outline":"ea7a"}},"copyleft-off":{"name":"copyleft-off","category":"Symbols","tags":["licence","license"],"variants":{"outline":"f0d9"}},"copyleft":{"name":"copyleft","category":"Symbols","tags":["licence","license"],"variants":{"outline":"ec3d","filled":"f73b"}},"copyright-off":{"name":"copyright-off","category":"Symbols","tags":["licence","license"],"variants":{"outline":"f0da"}},"copyright":{"name":"copyright","category":"Symbols","tags":["licence","license"],"variants":{"outline":"ea7b","filled":"f73c"}},"corner-down-left-double":{"name":"corner-down-left-double","category":"Arrows","tags":["arrow","previous","back","return","below","point"],"variants":{"outline":"ee48"}},"corner-down-left":{"name":"corner-down-left","category":"Arrows","tags":["move","arrow"],"variants":{"outline":"ea7c"}},"corner-down-right-double":{"name":"corner-down-right-double","category":"Arrows","tags":["arrow","next","below","forward","point"],"variants":{"outline":"ee49"}},"corner-down-right":{"name":"corner-down-right","category":"Arrows","tags":["move","arrow"],"variants":{"outline":"ea7d"}},"corner-left-down-double":{"name":"corner-left-down-double","category":"Arrows","tags":["arrow","point","below","bottom"],"variants":{"outline":"ee4a"}},"corner-left-down":{"name":"corner-left-down","category":"Arrows","tags":["move","arrow"],"variants":{"outline":"ea7e"}},"corner-left-up-double":{"name":"corner-left-up-double","category":"Arrows","tags":["arrow","point","above","top"],"variants":{"outline":"ee4b"}},"corner-left-up":{"name":"corner-left-up","category":"Arrows","tags":["move","arrow"],"variants":{"outline":"ea7f"}},"corner-right-down-double":{"name":"corner-right-down-double","category":"Arrows","tags":["arrow","point","below","bottom"],"variants":{"outline":"ee4c"}},"corner-right-down":{"name":"corner-right-down","category":"Arrows","tags":["move","arrow"],"variants":{"outline":"ea80"}},"corner-right-up-double":{"name":"corner-right-up-double","category":"Arrows","tags":["arrow","point","above","top"],"variants":{"outline":"ee4d"}},"corner-right-up":{"name":"corner-right-up","category":"Arrows","tags":["move","arrow"],"variants":{"outline":"ea81"}},"corner-up-left-double":{"name":"corner-up-left-double","category":"Arrows","tags":["arrow","point","side","previous","back","return"],"variants":{"outline":"ee4e"}},"corner-up-left":{"name":"corner-up-left","category":"Arrows","tags":["move","arrow"],"variants":{"outline":"ea82"}},"corner-up-right-double":{"name":"corner-up-right-double","category":"Arrows","tags":["arrow","next","above","forward","point"],"variants":{"outline":"ee4f"}},"corner-up-right":{"name":"corner-up-right","category":"Arrows","tags":["move","arrow"],"variants":{"outline":"ea83"}},"cpu-2":{"name":"cpu-2","category":"Devices","tags":["processor","computer","chip","hardware","technology","electronic"],"variants":{"outline":"f075"}},"cpu-off":{"name":"cpu-off","category":"Devices","tags":["processor","computer","chip","hardware","technology","electronic"],"variants":{"outline":"f108"}},"cpu":{"name":"cpu","category":"Devices","tags":["processor","computer","chip","hardware","technology","electronic"],"variants":{"outline":"ef8e"}},"crane-off":{"name":"crane-off","category":"Vehicles","tags":["construction","building","machine","lifting"],"variants":{"outline":"f109"}},"crane":{"name":"crane","category":"Vehicles","tags":["construction","building","machine","lifting"],"variants":{"outline":"ef27"}},"creative-commons-by":{"name":"creative-commons-by","category":"System","tags":["licence","license"],"variants":{"outline":"f21f"}},"creative-commons-nc":{"name":"creative-commons-nc","category":"System","tags":["licence","license"],"variants":{"outline":"f220"}},"creative-commons-nd":{"name":"creative-commons-nd","category":"System","tags":["licence","license"],"variants":{"outline":"f221"}},"creative-commons-off":{"name":"creative-commons-off","category":"System","tags":["licence","license"],"variants":{"outline":"f10a"}},"creative-commons-sa":{"name":"creative-commons-sa","category":"System","tags":["licence","license"],"variants":{"outline":"f222"}},"creative-commons-zero":{"name":"creative-commons-zero","category":"System","tags":["licence","license"],"variants":{"outline":"f223"}},"creative-commons":{"name":"creative-commons","category":"System","tags":["licence","license"],"variants":{"outline":"efb3"}},"credit-card-off":{"name":"credit-card-off","category":"E-commerce","tags":["money","purchase","payment","cc"],"variants":{"outline":"ed11"}},"credit-card-pay":{"name":"credit-card-pay","category":"","tags":["payment-card","credit-pay","card-payment","transaction","credit-transaction","purchase","buy","payment","credit","card"],"variants":{"outline":"fd32"}},"credit-card-refund":{"name":"credit-card-refund","category":"","tags":["refund-card","credit-refund","card-refund","transaction","credit-transaction","return","money-back","credit","refund","card"],"variants":{"outline":"fd33"}},"credit-card":{"name":"credit-card","category":"E-commerce","tags":["money","purchase","payment","cc"],"variants":{"outline":"ea84","filled":"fd11"}},"cricket":{"name":"cricket","category":"Sport","tags":["ball","game","sport"],"variants":{"outline":"f09a"}},"crop-1-1":{"name":"crop-1-1","category":"Design","tags":["square-crop","aspect-ratio-1-1","equal-proportion","image-square","crop-square","box-crop","square-frame","uniform-crop","balanced-crop","equal-crop"],"variants":{"outline":"fd50","filled":"fe4f"}},"crop-16-9":{"name":"crop-16-9","category":"Design","tags":["wide-crop","aspect-ratio-16-9","landscape-crop","wide-screen","video-crop","16-by-9","wide-format","cinematic-crop","panorama","landscape-aspect"],"variants":{"outline":"fd51","filled":"fe4e"}},"crop-3-2":{"name":"crop-3-2","category":"Design","tags":["portrait-crop","aspect-ratio-3-2","vertical-crop","portrait-mode","tall-crop","3-by-2","portrait-format","vertical-aspect","vertical-frame","portrait"],"variants":{"outline":"fd52","filled":"fe4d"}},"crop-5-4":{"name":"crop-5-4","category":"Design","tags":["custom-crop","aspect-ratio-5-4","fixed-crop","image-format","5-by-4","customized-crop","fixed-aspect","dimensional-crop","specific-crop","custom-aspect"],"variants":{"outline":"fd53","filled":"fe4c"}},"crop-7-5":{"name":"crop-7-5","category":"Design","tags":["custom-crop","aspect-ratio-7-5","fixed-crop","image-format","7-by-5","customized-crop","fixed-aspect","dimensional-crop","specific-crop","custom-aspect"],"variants":{"outline":"fd54","filled":"fe4b"}},"crop-landscape":{"name":"crop-landscape","category":"Design","tags":["landscape-crop","aspect-ratio-landscape","wide-crop","landscape-mode","horizontal-crop","landscape-format","wide-aspect","horizontal-frame","landscape"],"variants":{"outline":"fd55","filled":"fe4a"}},"crop-portrait":{"name":"crop-portrait","category":"Design","tags":["portrait-crop","aspect-ratio-portrait","vertical-crop","portrait-mode","tall-crop","portrait-format","vertical-aspect","vertical-frame","portrait"],"variants":{"outline":"fd56","filled":"fe49"}},"crop":{"name":"crop","category":"Design","tags":["photo","image"],"variants":{"outline":"ea85"}},"cross-off":{"name":"cross-off","category":"Symbols","tags":["prayer","church","catholic","jezus","religion"],"variants":{"outline":"f10b"}},"cross":{"name":"cross","category":"Symbols","tags":["prayer","church","catholic","jezus","religion"],"variants":{"outline":"ef8f","filled":"f675"}},"crosshair":{"name":"crosshair","category":"","tags":["reticle","tag","tracer","measurement","target"],"variants":{"outline":"ec3e"}},"crown-off":{"name":"crown-off","category":"","tags":["symbol","queen","king","prince","princess","dynasty","royalty"],"variants":{"outline":"ee50"}},"crown":{"name":"crown","category":"","tags":["symbol","queen","king","prince","princess","dynasty","royalty"],"variants":{"outline":"ed12"}},"crutches-off":{"name":"crutches-off","category":"Health","tags":["hospital","medical","disability","health","leg"],"variants":{"outline":"f10c"}},"crutches":{"name":"crutches","category":"Health","tags":["hospital","medical","disability","health","leg"],"variants":{"outline":"ef5b"}},"crystal-ball":{"name":"crystal-ball","category":"","tags":["magic","fortune","christmas","witch","future"],"variants":{"outline":"f57b"}},"csv":{"name":"csv","category":"Extensions","tags":["file","document","format","type","folder"],"variants":{"outline":"f791"}},"cube-3d-sphere-off":{"name":"cube-3d-sphere-off","category":"","tags":["printing","vector","shape"],"variants":{"outline":"f3b5"}},"cube-3d-sphere":{"name":"cube-3d-sphere","category":"","tags":["printing","vector","shape"],"variants":{"outline":"ecd7"}},"cube-off":{"name":"cube-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa95"}},"cube-plus":{"name":"cube-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa96"}},"cube-send":{"name":"cube-send","category":"","tags":["box","delivery","package","shipping"],"variants":{"outline":"f61b"}},"cube-unfolded":{"name":"cube-unfolded","category":"","tags":["folding","filed","box","unwrapped"],"variants":{"outline":"f61c"}},"cube":{"name":"cube","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa97"}},"cup-off":{"name":"cup-off","category":"Food","tags":["coffee","drink","water","food"],"variants":{"outline":"f10d"}},"cup":{"name":"cup","category":"Food","tags":["coffee","drink","water","food"],"variants":{"outline":"ef28"}},"curling":{"name":"curling","category":"Sport","tags":["game","sport","olympic","winter","snow"],"variants":{"outline":"efc8"}},"curly-loop":{"name":"curly-loop","category":"","tags":["voicemail","power","infinity"],"variants":{"outline":"ecda"}},"currency-afghani":{"name":"currency-afghani","category":"Currencies","tags":["money","coin","cash","commerce","afghanistan"],"variants":{"outline":"f65e"}},"currency-bahraini":{"name":"currency-bahraini","category":"Currencies","tags":["bahraini","bhd","commerce","dinar","money","banknote","pay"],"variants":{"outline":"ee51"}},"currency-baht":{"name":"currency-baht","category":"Currencies","tags":["thb","thai","baht","money","banknote","pay"],"variants":{"outline":"f08a"}},"currency-bitcoin":{"name":"currency-bitcoin","category":"Currencies","tags":["crypto","bitcoin","lightning network","mining","digital","blockchain","p2p","peer","money","banknote","pay"],"variants":{"outline":"ebab"}},"currency-cent":{"name":"currency-cent","category":"Currencies","tags":["cent","coin","money","centavo","penny","banknote","pay"],"variants":{"outline":"ee53"}},"currency-dinar":{"name":"currency-dinar","category":"Currencies","tags":["kwd","dinar","kuwait","money","banknote","pay"],"variants":{"outline":"ee54"}},"currency-dirham":{"name":"currency-dirham","category":"Currencies","tags":["trade","aed","uae","dirham","money","banknote","pay"],"variants":{"outline":"ee55"}},"currency-dogecoin":{"name":"currency-dogecoin","category":"Currencies","tags":["crypto","bitcoin","lightning network","mining","digital","blockchain","p2p","peer","money","banknote","pay"],"variants":{"outline":"ef4b"}},"currency-dollar-australian":{"name":"currency-dollar-australian","category":"Currencies","tags":["dollar","aud","australian","money","banknote","pay"],"variants":{"outline":"ee56"}},"currency-dollar-brunei":{"name":"currency-dollar-brunei","category":"Currencies","tags":["exchange","buisness","commerce"],"variants":{"outline":"f36c"}},"currency-dollar-canadian":{"name":"currency-dollar-canadian","category":"Currencies","tags":["trade","dollar","cad","canadian","money","banknote","pay"],"variants":{"outline":"ee57"}},"currency-dollar-guyanese":{"name":"currency-dollar-guyanese","category":"Currencies","tags":["exchange","buisness","commerce"],"variants":{"outline":"f36d"}},"currency-dollar-off":{"name":"currency-dollar-off","category":"Currencies","tags":["american","us","dollar","usd","sign","bucks","usa","money","banknote","pay"],"variants":{"outline":"f3dc"}},"currency-dollar-singapore":{"name":"currency-dollar-singapore","category":"Currencies","tags":["singapore","dollar","exchange","sgd","money","banknote","pay"],"variants":{"outline":"ee58"}},"currency-dollar-zimbabwean":{"name":"currency-dollar-zimbabwean","category":"Currencies","tags":["exchange","buisness","commerce"],"variants":{"outline":"f36e"}},"currency-dollar":{"name":"currency-dollar","category":"Currencies","tags":["american","us","dollar","usd","sign","bucks","usa","money","banknote","pay"],"variants":{"outline":"eb84"}},"currency-dong":{"name":"currency-dong","category":"Currencies","tags":["vietnam","exchange","finance","money","cash"],"variants":{"outline":"f36f"}},"currency-dram":{"name":"currency-dram","category":"Currencies","tags":["exchange","finance","money","cash","armenia"],"variants":{"outline":"f370"}},"currency-ethereum":{"name":"currency-ethereum","category":"Currencies","tags":["ethereum","digital","crypto","ether","blockchain","money","banknote","pay"],"variants":{"outline":"ee59"}},"currency-euro-off":{"name":"currency-euro-off","category":"Currencies","tags":["euro","eur","trade","finance","europe","eu","money","banknote","pay"],"variants":{"outline":"f3dd"}},"currency-euro":{"name":"currency-euro","category":"Currencies","tags":["euro","eur","trade","finance","europe","eu","money","banknote","pay"],"variants":{"outline":"eb85"}},"currency-florin":{"name":"currency-florin","category":"Currencies","tags":[],"variants":{"outline":"faf5"}},"currency-forint":{"name":"currency-forint","category":"Currencies","tags":["huf","hungarian","business","forint","money","banknote","pay"],"variants":{"outline":"ee5a"}},"currency-frank":{"name":"currency-frank","category":"Currencies","tags":["chf","business","swiss","franc","money","banknote","pay"],"variants":{"outline":"ee5b"}},"currency-guarani":{"name":"currency-guarani","category":"Currencies","tags":["exchange","finance","money","cash","paraguay"],"variants":{"outline":"f371"}},"currency-hryvnia":{"name":"currency-hryvnia","category":"Currencies","tags":["exchange","finance","money","cash","ukraine"],"variants":{"outline":"f372"}},"currency-iranian-rial":{"name":"currency-iranian-rial","category":"Currencies","tags":[],"variants":{"outline":"fa58"}},"currency-kip":{"name":"currency-kip","category":"Currencies","tags":["exchange","finance","money","cash","laos"],"variants":{"outline":"f373"}},"currency-krone-czech":{"name":"currency-krone-czech","category":"Currencies","tags":["czech","czk","koruna","money","banknote","pay"],"variants":{"outline":"ee5c"}},"currency-krone-danish":{"name":"currency-krone-danish","category":"Currencies","tags":["krone","dkk","danish","finance","money","banknote","pay"],"variants":{"outline":"ee5d"}},"currency-krone-swedish":{"name":"currency-krone-swedish","category":"Currencies","tags":["krone","kronor","krona","swedish","icelandic","norwegian","estonian","money","banknote","pay"],"variants":{"outline":"ee5e"}},"currency-lari":{"name":"currency-lari","category":"Currencies","tags":["exchange","finance","money","cash","georgia"],"variants":{"outline":"f374"}},"currency-leu":{"name":"currency-leu","category":"Currencies","tags":["leu","loti","lempira","lek","lilangani","money","banknote","pay"],"variants":{"outline":"ee5f"}},"currency-lira":{"name":"currency-lira","category":"Currencies","tags":["lira","trade","turkish","try","money","banknote","pay"],"variants":{"outline":"ee60"}},"currency-litecoin":{"name":"currency-litecoin","category":"Currencies","tags":["litecoin","crypto","segwit","lightning network","blockchain","p2p","peer","transaction","money","banknote","pay"],"variants":{"outline":"ee61"}},"currency-lyd":{"name":"currency-lyd","category":"Currencies","tags":["exchange","finance","money","cash","libya"],"variants":{"outline":"f375"}},"currency-manat":{"name":"currency-manat","category":"Currencies","tags":["exchange","finance","money","cash","azerbaijan"],"variants":{"outline":"f376"}},"currency-monero":{"name":"currency-monero","category":"Currencies","tags":["exchange","finance","money","cash","cryptocurrency"],"variants":{"outline":"f377"}},"currency-naira":{"name":"currency-naira","category":"Currencies","tags":["naira","ngn","nigerian","trade","money","banknote","pay"],"variants":{"outline":"ee62"}},"currency-nano":{"name":"currency-nano","category":"Currencies","tags":["money","nano","crypto","blockchain","pay","p2p","digital"],"variants":{"outline":"f7a6"}},"currency-off":{"name":"currency-off","category":"Currencies","tags":["target","goal","focus","marketing"],"variants":{"outline":"f3de"}},"currency-paanga":{"name":"currency-paanga","category":"Currencies","tags":["exchange","finance","money","cash","tonga"],"variants":{"outline":"f378"}},"currency-peso":{"name":"currency-peso","category":"Currencies","tags":["money","coin","cash","commerce","mexico"],"variants":{"outline":"f65f"}},"currency-pound-off":{"name":"currency-pound-off","category":"Currencies","tags":["gbp","pound","sterling","british","britain","uk","money","banknote","pay"],"variants":{"outline":"f3df"}},"currency-pound":{"name":"currency-pound","category":"Currencies","tags":["gbp","pound","sterling","british","britain","uk","money","banknote","pay"],"variants":{"outline":"ebac"}},"currency-quetzal":{"name":"currency-quetzal","category":"Currencies","tags":["exchange","finance","money","cash","guatemala"],"variants":{"outline":"f379"}},"currency-real":{"name":"currency-real","category":"Currencies","tags":["brl","brazilian","real","finance","money","banknote","pay"],"variants":{"outline":"ee63"}},"currency-renminbi":{"name":"currency-renminbi","category":"Currencies","tags":["renminbi","cny","chinese","yuan","money","banknote","pay"],"variants":{"outline":"ee64"}},"currency-ripple":{"name":"currency-ripple","category":"Currencies","tags":["ripple","xrp","digital","crypto","money","banknote","pay"],"variants":{"outline":"ee65"}},"currency-riyal":{"name":"currency-riyal","category":"Currencies","tags":["riyal","sar","saudi","money","banknote","pay"],"variants":{"outline":"ee66"}},"currency-rubel":{"name":"currency-rubel","category":"Currencies","tags":["rub","russian","ruble","money","banknote","pay"],"variants":{"outline":"ee67"}},"currency-rufiyaa":{"name":"currency-rufiyaa","category":"Currencies","tags":["exchange","finance","money","cash","maldives"],"variants":{"outline":"f37a"}},"currency-rupee-nepalese":{"name":"currency-rupee-nepalese","category":"Currencies","tags":["exchange","finance","money","cash","nepal"],"variants":{"outline":"f37b"}},"currency-rupee":{"name":"currency-rupee","category":"Currencies","tags":["inr","indian","rupee","exchange","money","banknote","pay"],"variants":{"outline":"ebad"}},"currency-shekel":{"name":"currency-shekel","category":"Currencies","tags":["curency","ils","israeli","shekel","money","banknote","pay"],"variants":{"outline":"ee68"}},"currency-solana":{"name":"currency-solana","category":"Currencies","tags":["crypto","bitcoin","mining","digital","cryptocurrency"],"variants":{"outline":"f4a1"}},"currency-som":{"name":"currency-som","category":"Currencies","tags":["exchange","finance","money","cash","kyrgyzstan"],"variants":{"outline":"f37c"}},"currency-taka":{"name":"currency-taka","category":"Currencies","tags":["trade","bangladesh","bdt","taka","money","banknote","pay"],"variants":{"outline":"ee69"}},"currency-tenge":{"name":"currency-tenge","category":"Currencies","tags":["exchange","finance","money","cash","kazakhstan"],"variants":{"outline":"f37d"}},"currency-tugrik":{"name":"currency-tugrik","category":"Currencies","tags":["tgrg","mnt","tugrik","mongolian","money","banknote","pay"],"variants":{"outline":"ee6a"}},"currency-won":{"name":"currency-won","category":"Currencies","tags":["korean","kpw","north","won","money","banknote","pay"],"variants":{"outline":"ee6b"}},"currency-xrp":{"name":"currency-xrp","category":"","tags":["xrp","cryptocurrency","digital-currency","blockchain","ripple","crypto","virtual-currency","xrp-coin","financial","digital-money"],"variants":{"outline":"fd34"}},"currency-yen-off":{"name":"currency-yen-off","category":"Currencies","tags":["japanese","yen","jpy","chinese","money","banknote","pay"],"variants":{"outline":"f3e0"}},"currency-yen":{"name":"currency-yen","category":"Currencies","tags":["japanese","yen","jpy","chinese","money","banknote","pay"],"variants":{"outline":"ebae"}},"currency-yuan":{"name":"currency-yuan","category":"Currencies","tags":["exchange","finance","money","cash","china"],"variants":{"outline":"f29a"}},"currency-zloty":{"name":"currency-zloty","category":"Currencies","tags":["poland","pln","zloty","polish","money","banknote","pay"],"variants":{"outline":"ee6c"}},"currency":{"name":"currency","category":"Currencies","tags":["target","goal","focus","marketing"],"variants":{"outline":"efa6"}},"current-location-off":{"name":"current-location-off","category":"Map","tags":["localization","maps","navigation","pin","target"],"variants":{"outline":"f10e"}},"current-location":{"name":"current-location","category":"Map","tags":["localization","maps","navigation","pin","target"],"variants":{"outline":"ecef"}},"cursor-off":{"name":"cursor-off","category":"","tags":["editor","indicate","position","input","mouse","type"],"variants":{"outline":"f10f"}},"cursor-text":{"name":"cursor-text","category":"Text","tags":["editor","indicate","position","input","mouse","type"],"variants":{"outline":"ee6d"}},"cut":{"name":"cut","category":"Design","tags":["scissors","divide","hairdresser","sharp"],"variants":{"outline":"ea86"}},"cylinder-off":{"name":"cylinder-off","category":"Shapes","tags":["geometry","gas","tube","object","piston"],"variants":{"outline":"fa98"}},"cylinder-plus":{"name":"cylinder-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa99"}},"cylinder":{"name":"cylinder","category":"Shapes","tags":["geometry","gas","tube","object","piston"],"variants":{"outline":"f54c"}},"dashboard-off":{"name":"dashboard-off","category":"System","tags":["home","car"],"variants":{"outline":"f3e1"}},"dashboard":{"name":"dashboard","category":"System","tags":["home","car"],"variants":{"outline":"ea87"}},"database-cog":{"name":"database-cog","category":"Database","tags":[],"variants":{"outline":"fa10"}},"database-dollar":{"name":"database-dollar","category":"Database","tags":[],"variants":{"outline":"fa11"}},"database-edit":{"name":"database-edit","category":"Database","tags":[],"variants":{"outline":"fa12"}},"database-exclamation":{"name":"database-exclamation","category":"Database","tags":[],"variants":{"outline":"fa13"}},"database-export":{"name":"database-export","category":"Database","tags":["data","backup","file","storage","system"],"variants":{"outline":"ee6e"}},"database-heart":{"name":"database-heart","category":"Database","tags":[],"variants":{"outline":"fa14"}},"database-import":{"name":"database-import","category":"Database","tags":["data","file","storage","backup","system"],"variants":{"outline":"ee6f"}},"database-leak":{"name":"database-leak","category":"Database","tags":[],"variants":{"outline":"fa15"}},"database-minus":{"name":"database-minus","category":"Database","tags":[],"variants":{"outline":"fa16"}},"database-off":{"name":"database-off","category":"Database","tags":["storage","data","memory"],"variants":{"outline":"ee70"}},"database-plus":{"name":"database-plus","category":"Database","tags":[],"variants":{"outline":"fa17"}},"database-search":{"name":"database-search","category":"Database","tags":[],"variants":{"outline":"fa18"}},"database-share":{"name":"database-share","category":"Database","tags":[],"variants":{"outline":"fa19"}},"database-smile":{"name":"database-smile","category":"","tags":[],"variants":{"outline":"fd9b"}},"database-star":{"name":"database-star","category":"Database","tags":[],"variants":{"outline":"fa1a"}},"database-x":{"name":"database-x","category":"Database","tags":[],"variants":{"outline":"fa1b"}},"database":{"name":"database","category":"Database","tags":["storage","data","memory"],"variants":{"outline":"ea88"}},"decimal":{"name":"decimal","category":"Math","tags":["point","fraction","numeric","number","mathematics","decimal-point","decimal-system","fractional","math","dot"],"variants":{"outline":"fa26"}},"deer":{"name":"deer","category":"Animals","tags":["animal","christmas","santa","forest"],"variants":{"outline":"f4c5"}},"delta":{"name":"delta","category":"Letters","tags":["letter","alphabet","greek","math"],"variants":{"outline":"f53c"}},"dental-broken":{"name":"dental-broken","category":"","tags":["tooth","dentist","medical","care","caries"],"variants":{"outline":"f286"}},"dental-off":{"name":"dental-off","category":"Health","tags":["tooth","toothbrush","mouth","hygiene"],"variants":{"outline":"f110"}},"dental":{"name":"dental","category":"Health","tags":["tooth","toothbrush","mouth","hygiene"],"variants":{"outline":"f025"}},"deselect":{"name":"deselect","category":"","tags":["unselect","clear-selection","deselection","unpick","uncheck","deactivate","unmark","remove-selection","untag","unchoose"],"variants":{"outline":"f9f3"}},"desk":{"name":"desk","category":"","tags":["workspace","workstation","table","office-desk","workplace","furniture","desk-setup","desktop","office-furniture","working"],"variants":{"outline":"fd35"}},"details-off":{"name":"details-off","category":"","tags":["geometric","half","shape","highlight","triangle"],"variants":{"outline":"f3e2"}},"details":{"name":"details","category":"","tags":["geometric","half","shape","highlight","triangle"],"variants":{"outline":"ee71"}},"device-airpods-case":{"name":"device-airpods-case","category":"Devices","tags":["music","audio","apple","iphone","wireless","sound"],"variants":{"outline":"f646"}},"device-airpods":{"name":"device-airpods","category":"Devices","tags":["music","iphone","apple","wireless","headphones","sound","earbuds"],"variants":{"outline":"f5a9"}},"device-airtag":{"name":"device-airtag","category":"Devices","tags":[],"variants":{"outline":"fae6"}},"device-analytics":{"name":"device-analytics","category":"Devices","tags":["analyze","analyse","data","traffic","user"],"variants":{"outline":"ee72"}},"device-audio-tape":{"name":"device-audio-tape","category":"Devices","tags":["record","music","radio","cassette","recording","play"],"variants":{"outline":"ee73"}},"device-camera-phone":{"name":"device-camera-phone","category":"Devices","tags":["smartphone","technology","photo","gadget","photography"],"variants":{"outline":"f233"}},"device-cctv-off":{"name":"device-cctv-off","category":"Devices","tags":["closed","circuit","television","video","surveillance","signal","monitor","record"],"variants":{"outline":"f3e3"}},"device-cctv":{"name":"device-cctv","category":"Devices","tags":["closed","circuit","television","video","surveillance","signal","monitor","record"],"variants":{"outline":"ee74"}},"device-computer-camera-off":{"name":"device-computer-camera-off","category":"Devices","tags":["video","meeting","record","recording","webcam"],"variants":{"outline":"ee75"}},"device-computer-camera":{"name":"device-computer-camera","category":"Devices","tags":["video","meeting","record","recording","webcam"],"variants":{"outline":"ee76"}},"device-desktop-analytics":{"name":"device-desktop-analytics","category":"Devices","tags":["monitor","computer","imac","stats","charts"],"variants":{"outline":"ee77"}},"device-desktop-bolt":{"name":"device-desktop-bolt","category":"Devices","tags":[],"variants":{"outline":"f85e"}},"device-desktop-cancel":{"name":"device-desktop-cancel","category":"Devices","tags":[],"variants":{"outline":"f85f"}},"device-desktop-check":{"name":"device-desktop-check","category":"Devices","tags":[],"variants":{"outline":"f860"}},"device-desktop-code":{"name":"device-desktop-code","category":"Devices","tags":[],"variants":{"outline":"f861"}},"device-desktop-cog":{"name":"device-desktop-cog","category":"Devices","tags":[],"variants":{"outline":"f862"}},"device-desktop-dollar":{"name":"device-desktop-dollar","category":"Devices","tags":[],"variants":{"outline":"f863"}},"device-desktop-down":{"name":"device-desktop-down","category":"Devices","tags":[],"variants":{"outline":"f864"}},"device-desktop-exclamation":{"name":"device-desktop-exclamation","category":"Devices","tags":[],"variants":{"outline":"f865"}},"device-desktop-heart":{"name":"device-desktop-heart","category":"Devices","tags":[],"variants":{"outline":"f866"}},"device-desktop-minus":{"name":"device-desktop-minus","category":"Devices","tags":[],"variants":{"outline":"f867"}},"device-desktop-off":{"name":"device-desktop-off","category":"Devices","tags":["monitor","computer","imac"],"variants":{"outline":"ee78"}},"device-desktop-pause":{"name":"device-desktop-pause","category":"Devices","tags":[],"variants":{"outline":"f868"}},"device-desktop-pin":{"name":"device-desktop-pin","category":"Devices","tags":[],"variants":{"outline":"f869"}},"device-desktop-plus":{"name":"device-desktop-plus","category":"Devices","tags":[],"variants":{"outline":"f86a"}},"device-desktop-question":{"name":"device-desktop-question","category":"Devices","tags":[],"variants":{"outline":"f86b"}},"device-desktop-search":{"name":"device-desktop-search","category":"Devices","tags":[],"variants":{"outline":"f86c"}},"device-desktop-share":{"name":"device-desktop-share","category":"Devices","tags":[],"variants":{"outline":"f86d"}},"device-desktop-star":{"name":"device-desktop-star","category":"Devices","tags":[],"variants":{"outline":"f86e"}},"device-desktop-up":{"name":"device-desktop-up","category":"Devices","tags":[],"variants":{"outline":"f86f"}},"device-desktop-x":{"name":"device-desktop-x","category":"Devices","tags":[],"variants":{"outline":"f870"}},"device-desktop":{"name":"device-desktop","category":"Devices","tags":["monitor","computer","imac"],"variants":{"outline":"ea89"}},"device-floppy":{"name":"device-floppy","category":"Devices","tags":["save","file","disk"],"variants":{"outline":"eb62"}},"device-gamepad-2":{"name":"device-gamepad-2","category":"Devices","tags":["game","play","entertainment","console","joystick","joypad","controller"],"variants":{"outline":"f1d2"}},"device-gamepad-3":{"name":"device-gamepad-3","category":"Devices","tags":[],"variants":{"outline":"fc58"}},"device-gamepad":{"name":"device-gamepad","category":"Devices","tags":["game","play","entertainment","console","joystick","joypad","controller"],"variants":{"outline":"eb63"}},"device-heart-monitor":{"name":"device-heart-monitor","category":"Devices","tags":["hospital","rate","healthcare","health"],"variants":{"outline":"f060","filled":"fa38"}},"device-imac-bolt":{"name":"device-imac-bolt","category":"Devices","tags":[],"variants":{"outline":"f871"}},"device-imac-cancel":{"name":"device-imac-cancel","category":"Devices","tags":[],"variants":{"outline":"f872"}},"device-imac-check":{"name":"device-imac-check","category":"Devices","tags":[],"variants":{"outline":"f873"}},"device-imac-code":{"name":"device-imac-code","category":"Devices","tags":[],"variants":{"outline":"f874"}},"device-imac-cog":{"name":"device-imac-cog","category":"Devices","tags":[],"variants":{"outline":"f875"}},"device-imac-dollar":{"name":"device-imac-dollar","category":"Devices","tags":[],"variants":{"outline":"f876"}},"device-imac-down":{"name":"device-imac-down","category":"Devices","tags":[],"variants":{"outline":"f877"}},"device-imac-exclamation":{"name":"device-imac-exclamation","category":"Devices","tags":[],"variants":{"outline":"f878"}},"device-imac-heart":{"name":"device-imac-heart","category":"Devices","tags":[],"variants":{"outline":"f879"}},"device-imac-minus":{"name":"device-imac-minus","category":"Devices","tags":[],"variants":{"outline":"f87a"}},"device-imac-off":{"name":"device-imac-off","category":"Devices","tags":["computer","monitor","apple","desktop","pc"],"variants":{"outline":"f87b"}},"device-imac-pause":{"name":"device-imac-pause","category":"Devices","tags":[],"variants":{"outline":"f87c"}},"device-imac-pin":{"name":"device-imac-pin","category":"Devices","tags":[],"variants":{"outline":"f87d"}},"device-imac-plus":{"name":"device-imac-plus","category":"Devices","tags":[],"variants":{"outline":"f87e"}},"device-imac-question":{"name":"device-imac-question","category":"Devices","tags":[],"variants":{"outline":"f87f"}},"device-imac-search":{"name":"device-imac-search","category":"Devices","tags":[],"variants":{"outline":"f880"}},"device-imac-share":{"name":"device-imac-share","category":"Devices","tags":[],"variants":{"outline":"f881"}},"device-imac-star":{"name":"device-imac-star","category":"Devices","tags":[],"variants":{"outline":"f882"}},"device-imac-up":{"name":"device-imac-up","category":"Devices","tags":[],"variants":{"outline":"f883"}},"device-imac-x":{"name":"device-imac-x","category":"Devices","tags":[],"variants":{"outline":"f884"}},"device-imac":{"name":"device-imac","category":"Devices","tags":["computer","monitor","apple","desktop","pc"],"variants":{"outline":"f7a7"}},"device-ipad-bolt":{"name":"device-ipad-bolt","category":"Devices","tags":[],"variants":{"outline":"f885"}},"device-ipad-cancel":{"name":"device-ipad-cancel","category":"Devices","tags":[],"variants":{"outline":"f886"}},"device-ipad-check":{"name":"device-ipad-check","category":"Devices","tags":[],"variants":{"outline":"f887"}},"device-ipad-code":{"name":"device-ipad-code","category":"Devices","tags":[],"variants":{"outline":"f888"}},"device-ipad-cog":{"name":"device-ipad-cog","category":"Devices","tags":[],"variants":{"outline":"f889"}},"device-ipad-dollar":{"name":"device-ipad-dollar","category":"Devices","tags":[],"variants":{"outline":"f88a"}},"device-ipad-down":{"name":"device-ipad-down","category":"Devices","tags":[],"variants":{"outline":"f88b"}},"device-ipad-exclamation":{"name":"device-ipad-exclamation","category":"Devices","tags":[],"variants":{"outline":"f88c"}},"device-ipad-heart":{"name":"device-ipad-heart","category":"Devices","tags":[],"variants":{"outline":"f88d"}},"device-ipad-horizontal-bolt":{"name":"device-ipad-horizontal-bolt","category":"Devices","tags":[],"variants":{"outline":"f88e"}},"device-ipad-horizontal-cancel":{"name":"device-ipad-horizontal-cancel","category":"Devices","tags":[],"variants":{"outline":"f88f"}},"device-ipad-horizontal-check":{"name":"device-ipad-horizontal-check","category":"Devices","tags":[],"variants":{"outline":"f890"}},"device-ipad-horizontal-code":{"name":"device-ipad-horizontal-code","category":"Devices","tags":[],"variants":{"outline":"f891"}},"device-ipad-horizontal-cog":{"name":"device-ipad-horizontal-cog","category":"Devices","tags":[],"variants":{"outline":"f892"}},"device-ipad-horizontal-dollar":{"name":"device-ipad-horizontal-dollar","category":"Devices","tags":[],"variants":{"outline":"f893"}},"device-ipad-horizontal-down":{"name":"device-ipad-horizontal-down","category":"Devices","tags":[],"variants":{"outline":"f894"}},"device-ipad-horizontal-exclamation":{"name":"device-ipad-horizontal-exclamation","category":"Devices","tags":[],"variants":{"outline":"f895"}},"device-ipad-horizontal-heart":{"name":"device-ipad-horizontal-heart","category":"Devices","tags":[],"variants":{"outline":"f896"}},"device-ipad-horizontal-minus":{"name":"device-ipad-horizontal-minus","category":"Devices","tags":[],"variants":{"outline":"f897"}},"device-ipad-horizontal-off":{"name":"device-ipad-horizontal-off","category":"Devices","tags":["tablet","apple","mobile","technology","ios"],"variants":{"outline":"f898"}},"device-ipad-horizontal-pause":{"name":"device-ipad-horizontal-pause","category":"Devices","tags":[],"variants":{"outline":"f899"}},"device-ipad-horizontal-pin":{"name":"device-ipad-horizontal-pin","category":"Devices","tags":[],"variants":{"outline":"f89a"}},"device-ipad-horizontal-plus":{"name":"device-ipad-horizontal-plus","category":"Devices","tags":[],"variants":{"outline":"f89b"}},"device-ipad-horizontal-question":{"name":"device-ipad-horizontal-question","category":"Devices","tags":[],"variants":{"outline":"f89c"}},"device-ipad-horizontal-search":{"name":"device-ipad-horizontal-search","category":"Devices","tags":[],"variants":{"outline":"f89d"}},"device-ipad-horizontal-share":{"name":"device-ipad-horizontal-share","category":"Devices","tags":[],"variants":{"outline":"f89e"}},"device-ipad-horizontal-star":{"name":"device-ipad-horizontal-star","category":"Devices","tags":[],"variants":{"outline":"f89f"}},"device-ipad-horizontal-up":{"name":"device-ipad-horizontal-up","category":"Devices","tags":[],"variants":{"outline":"f8a0"}},"device-ipad-horizontal-x":{"name":"device-ipad-horizontal-x","category":"Devices","tags":[],"variants":{"outline":"f8a1"}},"device-ipad-horizontal":{"name":"device-ipad-horizontal","category":"Devices","tags":["tablet","apple","mobile","technology","ios"],"variants":{"outline":"f647"}},"device-ipad-minus":{"name":"device-ipad-minus","category":"Devices","tags":[],"variants":{"outline":"f8a2"}},"device-ipad-off":{"name":"device-ipad-off","category":"Devices","tags":["tablet","apple","mobile","technology","ios"],"variants":{"outline":"f8a3"}},"device-ipad-pause":{"name":"device-ipad-pause","category":"Devices","tags":[],"variants":{"outline":"f8a4"}},"device-ipad-pin":{"name":"device-ipad-pin","category":"Devices","tags":[],"variants":{"outline":"f8a5"}},"device-ipad-plus":{"name":"device-ipad-plus","category":"Devices","tags":[],"variants":{"outline":"f8a6"}},"device-ipad-question":{"name":"device-ipad-question","category":"Devices","tags":[],"variants":{"outline":"f8a7"}},"device-ipad-search":{"name":"device-ipad-search","category":"Devices","tags":[],"variants":{"outline":"f8a8"}},"device-ipad-share":{"name":"device-ipad-share","category":"Devices","tags":[],"variants":{"outline":"f8a9"}},"device-ipad-star":{"name":"device-ipad-star","category":"Devices","tags":[],"variants":{"outline":"f8aa"}},"device-ipad-up":{"name":"device-ipad-up","category":"Devices","tags":[],"variants":{"outline":"f8ab"}},"device-ipad-x":{"name":"device-ipad-x","category":"Devices","tags":[],"variants":{"outline":"f8ac"}},"device-ipad":{"name":"device-ipad","category":"Devices","tags":["tablet","apple","mobile","technology","ios"],"variants":{"outline":"f648"}},"device-landline-phone":{"name":"device-landline-phone","category":"Devices","tags":["telephone","call","comunication","digital"],"variants":{"outline":"f649"}},"device-laptop-off":{"name":"device-laptop-off","category":"Devices","tags":["workstation","mac","notebook","portable","screen","computer"],"variants":{"outline":"f061"}},"device-laptop":{"name":"device-laptop","category":"Devices","tags":["workstation","mac","notebook","portable","screen","computer"],"variants":{"outline":"eb64"}},"device-mobile-bolt":{"name":"device-mobile-bolt","category":"Devices","tags":[],"variants":{"outline":"f8ad"}},"device-mobile-cancel":{"name":"device-mobile-cancel","category":"Devices","tags":[],"variants":{"outline":"f8ae"}},"device-mobile-charging":{"name":"device-mobile-charging","category":"Devices","tags":["battery","charge","wireless","cable"],"variants":{"outline":"f224"}},"device-mobile-check":{"name":"device-mobile-check","category":"Devices","tags":[],"variants":{"outline":"f8af"}},"device-mobile-code":{"name":"device-mobile-code","category":"Devices","tags":[],"variants":{"outline":"f8b0"}},"device-mobile-cog":{"name":"device-mobile-cog","category":"Devices","tags":[],"variants":{"outline":"f8b1"}},"device-mobile-dollar":{"name":"device-mobile-dollar","category":"Devices","tags":[],"variants":{"outline":"f8b2"}},"device-mobile-down":{"name":"device-mobile-down","category":"Devices","tags":[],"variants":{"outline":"f8b3"}},"device-mobile-exclamation":{"name":"device-mobile-exclamation","category":"Devices","tags":[],"variants":{"outline":"f8b4"}},"device-mobile-heart":{"name":"device-mobile-heart","category":"Devices","tags":[],"variants":{"outline":"f8b5"}},"device-mobile-message":{"name":"device-mobile-message","category":"Devices","tags":["iphone","phone","smartphone","cellphone","sms","texting","chat","text"],"variants":{"outline":"ee79"}},"device-mobile-minus":{"name":"device-mobile-minus","category":"Devices","tags":[],"variants":{"outline":"f8b6"}},"device-mobile-off":{"name":"device-mobile-off","category":"Devices","tags":["iphone","phone","smartphone","cellphone"],"variants":{"outline":"f062"}},"device-mobile-pause":{"name":"device-mobile-pause","category":"Devices","tags":[],"variants":{"outline":"f8b7"}},"device-mobile-pin":{"name":"device-mobile-pin","category":"Devices","tags":[],"variants":{"outline":"f8b8"}},"device-mobile-plus":{"name":"device-mobile-plus","category":"Devices","tags":[],"variants":{"outline":"f8b9"}},"device-mobile-question":{"name":"device-mobile-question","category":"Devices","tags":[],"variants":{"outline":"f8ba"}},"device-mobile-rotated":{"name":"device-mobile-rotated","category":"Devices","tags":["iphone","phone","smartphone","cellphone"],"variants":{"outline":"ecdb"}},"device-mobile-search":{"name":"device-mobile-search","category":"Devices","tags":[],"variants":{"outline":"f8bb"}},"device-mobile-share":{"name":"device-mobile-share","category":"Devices","tags":[],"variants":{"outline":"f8bc"}},"device-mobile-star":{"name":"device-mobile-star","category":"Devices","tags":[],"variants":{"outline":"f8bd"}},"device-mobile-up":{"name":"device-mobile-up","category":"Devices","tags":[],"variants":{"outline":"f8be"}},"device-mobile-vibration":{"name":"device-mobile-vibration","category":"Devices","tags":["iphone","phone","smartphone","cellphone"],"variants":{"outline":"eb86"}},"device-mobile-x":{"name":"device-mobile-x","category":"Devices","tags":[],"variants":{"outline":"f8bf"}},"device-mobile":{"name":"device-mobile","category":"Devices","tags":["iphone","phone","smartphone","cellphone"],"variants":{"outline":"ea8a","filled":"fa39"}},"device-nintendo-off":{"name":"device-nintendo-off","category":"Devices","tags":["gamepad","technology","game","console","controller"],"variants":{"outline":"f111"}},"device-nintendo":{"name":"device-nintendo","category":"Devices","tags":["gamepad","technology","game","console","controller"],"variants":{"outline":"f026"}},"device-projector":{"name":"device-projector","category":"","tags":[],"variants":{"outline":"fc11"}},"device-remote":{"name":"device-remote","category":"Devices","tags":["control","tv","home","television"],"variants":{"outline":"f792"}},"device-sd-card":{"name":"device-sd-card","category":"Devices","tags":["memory","storage","technology","data"],"variants":{"outline":"f384"}},"device-sim-1":{"name":"device-sim-1","category":"Devices","tags":["card","phone","mobile","smartphone"],"variants":{"outline":"f4af"}},"device-sim-2":{"name":"device-sim-2","category":"Devices","tags":["card","phone","mobile","smartphone"],"variants":{"outline":"f4b0"}},"device-sim-3":{"name":"device-sim-3","category":"Devices","tags":["card","phone","mobile","smartphone"],"variants":{"outline":"f4b1"}},"device-sim":{"name":"device-sim","category":"Devices","tags":["card","phone","mobile","smartphone"],"variants":{"outline":"f4b2"}},"device-speaker-off":{"name":"device-speaker-off","category":"Devices","tags":["sound","music","loud","audio","media"],"variants":{"outline":"f112"}},"device-speaker":{"name":"device-speaker","category":"Devices","tags":["sound","music","loud","audio","media"],"variants":{"outline":"ea8b"}},"device-tablet-bolt":{"name":"device-tablet-bolt","category":"Devices","tags":[],"variants":{"outline":"f8c0"}},"device-tablet-cancel":{"name":"device-tablet-cancel","category":"Devices","tags":[],"variants":{"outline":"f8c1"}},"device-tablet-check":{"name":"device-tablet-check","category":"Devices","tags":[],"variants":{"outline":"f8c2"}},"device-tablet-code":{"name":"device-tablet-code","category":"Devices","tags":[],"variants":{"outline":"f8c3"}},"device-tablet-cog":{"name":"device-tablet-cog","category":"Devices","tags":[],"variants":{"outline":"f8c4"}},"device-tablet-dollar":{"name":"device-tablet-dollar","category":"Devices","tags":[],"variants":{"outline":"f8c5"}},"device-tablet-down":{"name":"device-tablet-down","category":"Devices","tags":[],"variants":{"outline":"f8c6"}},"device-tablet-exclamation":{"name":"device-tablet-exclamation","category":"Devices","tags":[],"variants":{"outline":"f8c7"}},"device-tablet-heart":{"name":"device-tablet-heart","category":"Devices","tags":[],"variants":{"outline":"f8c8"}},"device-tablet-minus":{"name":"device-tablet-minus","category":"Devices","tags":[],"variants":{"outline":"f8c9"}},"device-tablet-off":{"name":"device-tablet-off","category":"Devices","tags":["ipad","mobile","touchscreen","portable"],"variants":{"outline":"f063"}},"device-tablet-pause":{"name":"device-tablet-pause","category":"Devices","tags":[],"variants":{"outline":"f8ca"}},"device-tablet-pin":{"name":"device-tablet-pin","category":"Devices","tags":[],"variants":{"outline":"f8cb"}},"device-tablet-plus":{"name":"device-tablet-plus","category":"Devices","tags":[],"variants":{"outline":"f8cc"}},"device-tablet-question":{"name":"device-tablet-question","category":"Devices","tags":[],"variants":{"outline":"f8cd"}},"device-tablet-search":{"name":"device-tablet-search","category":"Devices","tags":[],"variants":{"outline":"f8ce"}},"device-tablet-share":{"name":"device-tablet-share","category":"Devices","tags":[],"variants":{"outline":"f8cf"}},"device-tablet-star":{"name":"device-tablet-star","category":"Devices","tags":[],"variants":{"outline":"f8d0"}},"device-tablet-up":{"name":"device-tablet-up","category":"Devices","tags":[],"variants":{"outline":"f8d1"}},"device-tablet-x":{"name":"device-tablet-x","category":"Devices","tags":[],"variants":{"outline":"f8d2"}},"device-tablet":{"name":"device-tablet","category":"Devices","tags":["ipad","mobile","touchscreen","portable"],"variants":{"outline":"ea8c","filled":"fa3a"}},"device-tv-off":{"name":"device-tv-off","category":"Devices","tags":["screen","display","movie","film","watch","audio","video","media"],"variants":{"outline":"f064"}},"device-tv-old":{"name":"device-tv-old","category":"Devices","tags":["film","watch","audio","video","media","retro","antenna"],"variants":{"outline":"f1d3"}},"device-tv":{"name":"device-tv","category":"Devices","tags":["screen","display","movie","film","watch","audio","video","media"],"variants":{"outline":"ea8d"}},"device-unknown":{"name":"device-unknown","category":"","tags":[],"variants":{"outline":"fef4"}},"device-usb":{"name":"device-usb","category":"Devices","tags":[],"variants":{"outline":"fc59"}},"device-vision-pro":{"name":"device-vision-pro","category":"Devices","tags":[],"variants":{"outline":"fae7"}},"device-watch-bolt":{"name":"device-watch-bolt","category":"Devices","tags":[],"variants":{"outline":"f8d3"}},"device-watch-cancel":{"name":"device-watch-cancel","category":"Devices","tags":[],"variants":{"outline":"f8d4"}},"device-watch-check":{"name":"device-watch-check","category":"Devices","tags":[],"variants":{"outline":"f8d5"}},"device-watch-code":{"name":"device-watch-code","category":"Devices","tags":[],"variants":{"outline":"f8d6"}},"device-watch-cog":{"name":"device-watch-cog","category":"Devices","tags":[],"variants":{"outline":"f8d7"}},"device-watch-dollar":{"name":"device-watch-dollar","category":"Devices","tags":[],"variants":{"outline":"f8d8"}},"device-watch-down":{"name":"device-watch-down","category":"Devices","tags":[],"variants":{"outline":"f8d9"}},"device-watch-exclamation":{"name":"device-watch-exclamation","category":"Devices","tags":[],"variants":{"outline":"f8da"}},"device-watch-heart":{"name":"device-watch-heart","category":"Devices","tags":[],"variants":{"outline":"f8db"}},"device-watch-minus":{"name":"device-watch-minus","category":"Devices","tags":[],"variants":{"outline":"f8dc"}},"device-watch-off":{"name":"device-watch-off","category":"Devices","tags":["arm","hour","date","minutes","sec.","timer"],"variants":{"outline":"f065"}},"device-watch-pause":{"name":"device-watch-pause","category":"Devices","tags":[],"variants":{"outline":"f8dd"}},"device-watch-pin":{"name":"device-watch-pin","category":"Devices","tags":[],"variants":{"outline":"f8de"}},"device-watch-plus":{"name":"device-watch-plus","category":"Devices","tags":[],"variants":{"outline":"f8df"}},"device-watch-question":{"name":"device-watch-question","category":"Devices","tags":[],"variants":{"outline":"f8e0"}},"device-watch-search":{"name":"device-watch-search","category":"Devices","tags":[],"variants":{"outline":"f8e1"}},"device-watch-share":{"name":"device-watch-share","category":"Devices","tags":[],"variants":{"outline":"f8e2"}},"device-watch-star":{"name":"device-watch-star","category":"Devices","tags":[],"variants":{"outline":"f8e3"}},"device-watch-stats-2":{"name":"device-watch-stats-2","category":"Devices","tags":["steps","pulse","hour","date"],"variants":{"outline":"ef7c"}},"device-watch-stats":{"name":"device-watch-stats","category":"Devices","tags":["steps","pulse","hour","date"],"variants":{"outline":"ef7d"}},"device-watch-up":{"name":"device-watch-up","category":"Devices","tags":[],"variants":{"outline":"f8e4"}},"device-watch-x":{"name":"device-watch-x","category":"Devices","tags":[],"variants":{"outline":"f8e5"}},"device-watch":{"name":"device-watch","category":"Devices","tags":["arm","hour","date","minutes","sec.","timer"],"variants":{"outline":"ebf9"}},"devices-2":{"name":"devices-2","category":"Devices","tags":["computer","monitor","keyboard"],"variants":{"outline":"ed29"}},"devices-bolt":{"name":"devices-bolt","category":"Devices","tags":[],"variants":{"outline":"f8e6"}},"devices-cancel":{"name":"devices-cancel","category":"Devices","tags":[],"variants":{"outline":"f8e7"}},"devices-check":{"name":"devices-check","category":"Devices","tags":[],"variants":{"outline":"f8e8"}},"devices-code":{"name":"devices-code","category":"Devices","tags":[],"variants":{"outline":"f8e9"}},"devices-cog":{"name":"devices-cog","category":"Devices","tags":[],"variants":{"outline":"f8ea"}},"devices-dollar":{"name":"devices-dollar","category":"Devices","tags":[],"variants":{"outline":"f8eb"}},"devices-down":{"name":"devices-down","category":"Devices","tags":[],"variants":{"outline":"f8ec"}},"devices-exclamation":{"name":"devices-exclamation","category":"Devices","tags":[],"variants":{"outline":"f8ed"}},"devices-heart":{"name":"devices-heart","category":"Devices","tags":[],"variants":{"outline":"f8ee"}},"devices-minus":{"name":"devices-minus","category":"Devices","tags":[],"variants":{"outline":"f8ef"}},"devices-off":{"name":"devices-off","category":"Devices","tags":["computer","laptop","notebook","tablet","phone","mobile","mac","iphone"],"variants":{"outline":"f3e4"}},"devices-pause":{"name":"devices-pause","category":"Devices","tags":[],"variants":{"outline":"f8f0"}},"devices-pc-off":{"name":"devices-pc-off","category":"Devices","tags":["computer","monitor","keyboard"],"variants":{"outline":"f113"}},"devices-pc":{"name":"devices-pc","category":"Devices","tags":["computer","monitor","keyboard"],"variants":{"outline":"ee7a"}},"devices-pin":{"name":"devices-pin","category":"Devices","tags":[],"variants":{"outline":"f8f1"}},"devices-plus":{"name":"devices-plus","category":"Devices","tags":[],"variants":{"outline":"f8f2"}},"devices-question":{"name":"devices-question","category":"Devices","tags":[],"variants":{"outline":"f8f3"}},"devices-search":{"name":"devices-search","category":"Devices","tags":[],"variants":{"outline":"f8f4"}},"devices-share":{"name":"devices-share","category":"Devices","tags":[],"variants":{"outline":"f8f5"}},"devices-star":{"name":"devices-star","category":"Devices","tags":[],"variants":{"outline":"f8f6"}},"devices-up":{"name":"devices-up","category":"Devices","tags":[],"variants":{"outline":"f8f7"}},"devices-x":{"name":"devices-x","category":"Devices","tags":[],"variants":{"outline":"f8f8"}},"devices":{"name":"devices","category":"Devices","tags":["computer","laptop","notebook","tablet","phone","mobile","mac","iphone"],"variants":{"outline":"eb87"}},"diabolo-off":{"name":"diabolo-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa9a"}},"diabolo-plus":{"name":"diabolo-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa9b"}},"diabolo":{"name":"diabolo","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa9c"}},"dialpad-off":{"name":"dialpad-off","category":"Devices","tags":["keypad","telephone","phone","call","number"],"variants":{"outline":"f114"}},"dialpad":{"name":"dialpad","category":"Devices","tags":["keypad","telephone","phone","call","number"],"variants":{"outline":"f067","filled":"fa3b"}},"diamond-off":{"name":"diamond-off","category":"","tags":["jewellery","crystal","mineral","jewelry","ring"],"variants":{"outline":"f115"}},"diamond":{"name":"diamond","category":"","tags":["jewellery","crystal","mineral","jewelry","ring"],"variants":{"outline":"eb65","filled":"f73d"}},"diamonds":{"name":"diamonds","category":"Shapes","tags":["gambling","game","casino","cards","poker"],"variants":{"outline":"eff5","filled":"f676"}},"dice-1":{"name":"dice-1","category":"Games","tags":["game","boardgame","roll","throw","cube","numbers","gambling"],"variants":{"outline":"f08b","filled":"f73e"}},"dice-2":{"name":"dice-2","category":"Games","tags":["game","boardgame","roll","throw","cube","numbers","gambling"],"variants":{"outline":"f08c","filled":"f73f"}},"dice-3":{"name":"dice-3","category":"Games","tags":["game","boardgame","roll","throw","cube","numbers","gambling"],"variants":{"outline":"f08d","filled":"f740"}},"dice-4":{"name":"dice-4","category":"Games","tags":["game","boardgame","roll","throw","cube","numbers","gambling"],"variants":{"outline":"f08e","filled":"f741"}},"dice-5":{"name":"dice-5","category":"Games","tags":["game","boardgame","roll","throw","cube","numbers","gambling"],"variants":{"outline":"f08f","filled":"f742"}},"dice-6":{"name":"dice-6","category":"Games","tags":["game","boardgame","roll","throw","cube","numbers","gambling"],"variants":{"outline":"f090","filled":"f743"}},"dice":{"name":"dice","category":"Games","tags":["game","boardgame","roll","throw","cube","numbers","gambling"],"variants":{"outline":"eb66","filled":"f744"}},"dimensions":{"name":"dimensions","category":"Design","tags":["width","height","size","breadth","depth"],"variants":{"outline":"ee7b"}},"direction-arrows":{"name":"direction-arrows","category":"","tags":["arrows","directional","navigate","wayfinding","pointing","route","orientation","arrow-sign","guidance","direction"],"variants":{"outline":"fd36"}},"direction-horizontal":{"name":"direction-horizontal","category":"","tags":["travel","navigation discover","plane"],"variants":{"outline":"ebfa"}},"direction-sign-off":{"name":"direction-sign-off","category":"","tags":["arrow","navigation","forward","right"],"variants":{"outline":"f3e5"}},"direction-sign":{"name":"direction-sign","category":"","tags":["arrow","navigation","forward","right"],"variants":{"outline":"f1f7","filled":"f745"}},"direction":{"name":"direction","category":"","tags":["travel","navigation discover"],"variants":{"outline":"ebfb"}},"directions-off":{"name":"directions-off","category":"Map","tags":["travel","navigation","discover"],"variants":{"outline":"f116"}},"directions":{"name":"directions","category":"Map","tags":["travel","navigation","discover"],"variants":{"outline":"ea8e"}},"disabled-2":{"name":"disabled-2","category":"Health","tags":["wheelchair","accessible","handicapped"],"variants":{"outline":"ebaf"}},"disabled-off":{"name":"disabled-off","category":"Health","tags":["wheelchair","handicapped"],"variants":{"outline":"f117"}},"disabled":{"name":"disabled","category":"Health","tags":["wheelchair","handicapped"],"variants":{"outline":"ea8f"}},"disc-golf":{"name":"disc-golf","category":"Sport","tags":["frisbee","throw","sport","activity"],"variants":{"outline":"f385"}},"disc-off":{"name":"disc-off","category":"Devices","tags":["cd","music","album"],"variants":{"outline":"f118"}},"disc":{"name":"disc","category":"Devices","tags":["cd","music","album"],"variants":{"outline":"ea90"}},"discount-off":{"name":"discount-off","category":"E-commerce","tags":["sale","reduction","price","cost","money","shopping","bargain"],"variants":{"outline":"f3e7"}},"discount":{"name":"discount","category":"E-commerce","tags":["sale","reduction","price","cost","money","shopping","bargain"],"variants":{"outline":"ebbd"}},"divide":{"name":"divide","category":"Math","tags":["separate","element","multiple","apart","separator","parts"],"variants":{"outline":"ed5c"}},"dna-2-off":{"name":"dna-2-off","category":"Health","tags":["genetics","biology","chain","genetic","code","virus","organism"],"variants":{"outline":"f119"}},"dna-2":{"name":"dna-2","category":"Health","tags":["genetics","biology","chain","genetic","code","virus","organism"],"variants":{"outline":"ef5c"}},"dna-off":{"name":"dna-off","category":"Health","tags":["genetics","biology","chain","genetic","code","virus","organism"],"variants":{"outline":"f11a"}},"dna":{"name":"dna","category":"Health","tags":["genetics","biology","chain","genetic","code","virus","organism"],"variants":{"outline":"ee7d"}},"dog-bowl":{"name":"dog-bowl","category":"Food","tags":["pet","food","animal","bone"],"variants":{"outline":"ef29"}},"dog":{"name":"dog","category":"Animals","tags":["pet","animal","cute","bone","home","puppy"],"variants":{"outline":"f660"}},"door-enter":{"name":"door-enter","category":"","tags":["entrance","open","in","entry"],"variants":{"outline":"ef4c"}},"door-exit":{"name":"door-exit","category":"","tags":["out","close","leave"],"variants":{"outline":"ef4d"}},"door-off":{"name":"door-off","category":"","tags":["entrance","home","house","room"],"variants":{"outline":"f11b"}},"door":{"name":"door","category":"","tags":["entrance","home","house","room"],"variants":{"outline":"ef4e"}},"dots-circle-horizontal":{"name":"dots-circle-horizontal","category":"System","tags":["more","options"],"variants":{"outline":"ea91"}},"dots-diagonal-2":{"name":"dots-diagonal-2","category":"System","tags":["hellip","more","ellipsis"],"variants":{"outline":"ea92"}},"dots-diagonal":{"name":"dots-diagonal","category":"System","tags":["hellip","more","ellipsis"],"variants":{"outline":"ea93"}},"dots-vertical":{"name":"dots-vertical","category":"System","tags":["hellip","more","ellipsis"],"variants":{"outline":"ea94"}},"dots":{"name":"dots","category":"System","tags":["hellip","more","ellipsis"],"variants":{"outline":"ea95"}},"download-off":{"name":"download-off","category":"Arrows","tags":["save","arrow"],"variants":{"outline":"f11c"}},"download":{"name":"download","category":"Arrows","tags":["save","arrow"],"variants":{"outline":"ea96"}},"drag-drop-2":{"name":"drag-drop-2","category":"Design","tags":["location","gesture","move"],"variants":{"outline":"eb88"}},"drag-drop":{"name":"drag-drop","category":"Design","tags":["location","gesture","move"],"variants":{"outline":"eb89"}},"drone-off":{"name":"drone-off","category":"Vehicles","tags":["device","fly","aircraft","surveillance","control","autonomous"],"variants":{"outline":"ee7e"}},"drone":{"name":"drone","category":"Vehicles","tags":["device","fly","aircraft","surveillance","control","autonomous"],"variants":{"outline":"ed79"}},"drop-circle":{"name":"drop-circle","category":"","tags":["water","rain","droplet","oil"],"variants":{"outline":"efde"}},"droplet-bolt":{"name":"droplet-bolt","category":"Design","tags":[],"variants":{"outline":"f8f9"}},"droplet-cancel":{"name":"droplet-cancel","category":"Design","tags":[],"variants":{"outline":"f8fa"}},"droplet-check":{"name":"droplet-check","category":"Design","tags":[],"variants":{"outline":"f8fb"}},"droplet-code":{"name":"droplet-code","category":"Design","tags":[],"variants":{"outline":"f8fc"}},"droplet-cog":{"name":"droplet-cog","category":"Design","tags":[],"variants":{"outline":"f8fd"}},"droplet-dollar":{"name":"droplet-dollar","category":"Design","tags":[],"variants":{"outline":"f8fe"}},"droplet-down":{"name":"droplet-down","category":"Design","tags":[],"variants":{"outline":"f8ff"}},"droplet-exclamation":{"name":"droplet-exclamation","category":"Design","tags":[],"variants":{"outline":"f900"}},"droplet-half-2":{"name":"droplet-half-2","category":"Design","tags":["water","rain","liquid","fill"],"variants":{"outline":"ee81","filled":"fb6c"}},"droplet-half":{"name":"droplet-half","category":"Design","tags":["water","rain","liquid","fill"],"variants":{"outline":"ee82","filled":"f6c5"}},"droplet-heart":{"name":"droplet-heart","category":"Design","tags":[],"variants":{"outline":"f901"}},"droplet-minus":{"name":"droplet-minus","category":"Design","tags":[],"variants":{"outline":"f902"}},"droplet-off":{"name":"droplet-off","category":"Design","tags":["water","rain","liquid"],"variants":{"outline":"ee83"}},"droplet-pause":{"name":"droplet-pause","category":"Design","tags":[],"variants":{"outline":"f903"}},"droplet-pin":{"name":"droplet-pin","category":"Design","tags":[],"variants":{"outline":"f904"}},"droplet-plus":{"name":"droplet-plus","category":"Design","tags":[],"variants":{"outline":"f905"}},"droplet-question":{"name":"droplet-question","category":"Design","tags":[],"variants":{"outline":"f906"}},"droplet-search":{"name":"droplet-search","category":"Design","tags":[],"variants":{"outline":"f907"}},"droplet-share":{"name":"droplet-share","category":"Design","tags":[],"variants":{"outline":"f908"}},"droplet-star":{"name":"droplet-star","category":"Design","tags":[],"variants":{"outline":"f909"}},"droplet-up":{"name":"droplet-up","category":"Design","tags":[],"variants":{"outline":"f90a"}},"droplet-x":{"name":"droplet-x","category":"Design","tags":[],"variants":{"outline":"f90b"}},"droplet":{"name":"droplet","category":"Design","tags":["water","rain","liquid"],"variants":{"outline":"ea97","filled":"ee80"}},"droplets":{"name":"droplets","category":"","tags":[],"variants":{"outline":"fc12"}},"dual-screen":{"name":"dual-screen","category":"Devices","tags":[],"variants":{"outline":"fa59"}},"dumpling":{"name":"dumpling","category":"Food","tags":["food","chinese","asian","meal","snack","dough","meat","vegetable","steamed","boiled","fried","cuisine","traditional","delicious","tasty"],"variants":{"outline":"feb5"}},"e-passport":{"name":"e-passport","category":"E-commerce","tags":["id","online","mobile","app","travel"],"variants":{"outline":"f4df"}},"ear-off":{"name":"ear-off","category":"Health","tags":["sound","listen","music","hear","loud","speakers"],"variants":{"outline":"ee84"}},"ear-scan":{"name":"ear-scan","category":"","tags":["ear","scan","audiology","hearing-test","ear-exam","medical","healthcare","ear-scan","diagnosis","hearing-health"],"variants":{"outline":"fd57"}},"ear":{"name":"ear","category":"Health","tags":["sound","listen","music","hear","loud","speakers"],"variants":{"outline":"ebce"}},"ease-in-control-point":{"name":"ease-in-control-point","category":"Design","tags":["animation","graph","curve","function"],"variants":{"outline":"f570"}},"ease-in-out-control-points":{"name":"ease-in-out-control-points","category":"Design","tags":["animation","graph","curve","function"],"variants":{"outline":"f571"}},"ease-in-out":{"name":"ease-in-out","category":"Design","tags":["animation","graph","curve","function"],"variants":{"outline":"f572"}},"ease-in":{"name":"ease-in","category":"Design","tags":["animation","graph","curve","function"],"variants":{"outline":"f573"}},"ease-out-control-point":{"name":"ease-out-control-point","category":"Design","tags":["animation","graph","curve","function"],"variants":{"outline":"f574"}},"ease-out":{"name":"ease-out","category":"Design","tags":["animation","graph","curve","function"],"variants":{"outline":"f575"}},"edit-circle-off":{"name":"edit-circle-off","category":"Design","tags":["pencil","change","update"],"variants":{"outline":"f11d"}},"edit-circle":{"name":"edit-circle","category":"Design","tags":["pencil","change","update"],"variants":{"outline":"ee85"}},"edit-off":{"name":"edit-off","category":"Design","tags":["pencil","change","update"],"variants":{"outline":"f11e"}},"edit":{"name":"edit","category":"Design","tags":["pencil","change","update"],"variants":{"outline":"ea98"}},"egg-cracked":{"name":"egg-cracked","category":"Food","tags":["breaking","broken","food","breakfast"],"variants":{"outline":"f2d6"}},"egg-fried":{"name":"egg-fried","category":"Food","tags":["food","breakfast","cooking","kitchen"],"variants":{"outline":"f386"}},"egg-off":{"name":"egg-off","category":"Food","tags":["food","easter","chicken"],"variants":{"outline":"f11f"}},"egg":{"name":"egg","category":"Food","tags":["food","easter","chicken"],"variants":{"outline":"eb8a","filled":"f678"}},"eggs":{"name":"eggs","category":"Food","tags":["food","chicken","easter"],"variants":{"outline":"f500"}},"elevator-off":{"name":"elevator-off","category":"","tags":["hotel","up","down","service","door","lift"],"variants":{"outline":"f3e8"}},"elevator":{"name":"elevator","category":"","tags":["hotel","up","down","service","door","lift"],"variants":{"outline":"efdf"}},"emergency-bed":{"name":"emergency-bed","category":"Health","tags":["hospital","medical","patient","medicine"],"variants":{"outline":"ef5d"}},"empathize-off":{"name":"empathize-off","category":"Health","tags":["pepole","understund","thinking","care"],"variants":{"outline":"f3e9"}},"empathize":{"name":"empathize","category":"Health","tags":["pepole","understund","thinking","care"],"variants":{"outline":"f29b"}},"emphasis":{"name":"emphasis","category":"Text","tags":["highlight","priority","stress"],"variants":{"outline":"ebcf"}},"engine-off":{"name":"engine-off","category":"Vehicles","tags":["car","motor","automotive","dashboard"],"variants":{"outline":"f120"}},"engine":{"name":"engine","category":"Vehicles","tags":["car","motor","automotive","dashboard"],"variants":{"outline":"ef7e"}},"equal-double":{"name":"equal-double","category":"Math","tags":["coding","programming","code","sign"],"variants":{"outline":"f4e1"}},"equal-not":{"name":"equal-not","category":"Math","tags":["maths","mathematics","equation","different","value"],"variants":{"outline":"ee86"}},"equal":{"name":"equal","category":"Math","tags":["maths","mathematics","equation","same","value"],"variants":{"outline":"ee87"}},"eraser-off":{"name":"eraser-off","category":"Text","tags":["delete","remove","eliminate","wipe-out"],"variants":{"outline":"f121"}},"eraser":{"name":"eraser","category":"Text","tags":["delete","remove","eliminate","wipe-out"],"variants":{"outline":"eb8b"}},"error-404-off":{"name":"error-404-off","category":"Computers","tags":["web","page","not","found","message"],"variants":{"outline":"f122"}},"error-404":{"name":"error-404","category":"Computers","tags":["web","page","not","found","message"],"variants":{"outline":"f027"}},"escalator-down":{"name":"escalator-down","category":"Map","tags":[],"variants":{"outline":"fb04"}},"escalator-up":{"name":"escalator-up","category":"Map","tags":[],"variants":{"outline":"fb05"}},"escalator":{"name":"escalator","category":"Map","tags":[],"variants":{"outline":"fb06"}},"exchange-off":{"name":"exchange-off","category":"","tags":["cantor","money","product","student"],"variants":{"outline":"f123"}},"exchange":{"name":"exchange","category":"","tags":["cantor","money","product","student"],"variants":{"outline":"ebe7"}},"exclamation-circle":{"name":"exclamation-circle","category":"","tags":["warning","error","shape","caution","alert"],"variants":{"outline":"f634","filled":"ff62"}},"exclamation-mark-off":{"name":"exclamation-mark-off","category":"","tags":["warning","caution","alert","danger","!"],"variants":{"outline":"f124"}},"exclamation-mark":{"name":"exclamation-mark","category":"","tags":["warning","caution","alert","danger","!"],"variants":{"outline":"efb4"}},"explicit-off":{"name":"explicit-off","category":"","tags":["adult","content","xxx","curse","words","porn"],"variants":{"outline":"f3ea"}},"explicit":{"name":"explicit","category":"","tags":["adult","content","xxx","curse","words","porn"],"variants":{"outline":"f256"}},"exposure-0":{"name":"exposure-0","category":"Photography","tags":["digit","math","number","evaluation"],"variants":{"outline":"f29c"}},"exposure-minus-1":{"name":"exposure-minus-1","category":"Photography","tags":["digit","math","number","evaluation"],"variants":{"outline":"f29d"}},"exposure-minus-2":{"name":"exposure-minus-2","category":"Photography","tags":["digit","math","number","evaluation"],"variants":{"outline":"f29e"}},"exposure-off":{"name":"exposure-off","category":"Photography","tags":["light","bright","dark","camera"],"variants":{"outline":"f3eb"}},"exposure-plus-1":{"name":"exposure-plus-1","category":"Photography","tags":["digit","math","number","evaluation"],"variants":{"outline":"f29f"}},"exposure-plus-2":{"name":"exposure-plus-2","category":"Photography","tags":["digit","math","number","evaluation"],"variants":{"outline":"f2a0"}},"exposure":{"name":"exposure","category":"Photography","tags":["light","bright","dark","camera"],"variants":{"outline":"eb8c"}},"external-link-off":{"name":"external-link-off","category":"System","tags":["connection","outbound","redirect"],"variants":{"outline":"f125"}},"external-link":{"name":"external-link","category":"System","tags":["connection","outbound","redirect"],"variants":{"outline":"ea99"}},"eye-bitcoin":{"name":"eye-bitcoin","category":"","tags":[],"variants":{"outline":"ff3d"}},"eye-bolt":{"name":"eye-bolt","category":"","tags":[],"variants":{"outline":"fb6d"}},"eye-cancel":{"name":"eye-cancel","category":"","tags":[],"variants":{"outline":"fb6e"}},"eye-check":{"name":"eye-check","category":"System","tags":["sight","visual","view","public","approve"],"variants":{"outline":"ee88"}},"eye-closed":{"name":"eye-closed","category":"System","tags":[],"variants":{"outline":"f7ec"}},"eye-code":{"name":"eye-code","category":"","tags":[],"variants":{"outline":"fb6f"}},"eye-cog":{"name":"eye-cog","category":"System","tags":[],"variants":{"outline":"f7ed"}},"eye-discount":{"name":"eye-discount","category":"","tags":[],"variants":{"outline":"fb70"}},"eye-dollar":{"name":"eye-dollar","category":"","tags":[],"variants":{"outline":"fb71"}},"eye-dotted":{"name":"eye-dotted","category":"","tags":[],"variants":{"outline":"fead"}},"eye-down":{"name":"eye-down","category":"","tags":[],"variants":{"outline":"fb72"}},"eye-edit":{"name":"eye-edit","category":"System","tags":[],"variants":{"outline":"f7ee"}},"eye-exclamation":{"name":"eye-exclamation","category":"System","tags":[],"variants":{"outline":"f7ef"}},"eye-heart":{"name":"eye-heart","category":"System","tags":[],"variants":{"outline":"f7f0"}},"eye-minus":{"name":"eye-minus","category":"","tags":[],"variants":{"outline":"fb73"}},"eye-off":{"name":"eye-off","category":"System","tags":["view","watch"],"variants":{"outline":"ecf0"}},"eye-pause":{"name":"eye-pause","category":"","tags":[],"variants":{"outline":"fb74"}},"eye-pin":{"name":"eye-pin","category":"","tags":[],"variants":{"outline":"fb75"}},"eye-plus":{"name":"eye-plus","category":"","tags":[],"variants":{"outline":"fb76"}},"eye-question":{"name":"eye-question","category":"","tags":[],"variants":{"outline":"fb77"}},"eye-search":{"name":"eye-search","category":"","tags":[],"variants":{"outline":"fb78"}},"eye-share":{"name":"eye-share","category":"","tags":[],"variants":{"outline":"fb79"}},"eye-star":{"name":"eye-star","category":"","tags":[],"variants":{"outline":"fb7a"}},"eye-table":{"name":"eye-table","category":"Health","tags":["vision","sight","text","ophthalmology","disease"],"variants":{"outline":"ef5e"}},"eye-up":{"name":"eye-up","category":"","tags":[],"variants":{"outline":"fb7b"}},"eye-x":{"name":"eye-x","category":"System","tags":[],"variants":{"outline":"f7f1"}},"eye":{"name":"eye","category":"System","tags":["view","watch"],"variants":{"outline":"ea9a","filled":"f679"}},"eyeglass-2":{"name":"eyeglass-2","category":"Health","tags":["sight","defect","see","vision","frames","lenses","visually","impaired","myopia","far-sighted"],"variants":{"outline":"ee89"}},"eyeglass-off":{"name":"eyeglass-off","category":"Health","tags":["sight","defect","see","vision","frames","lenses","visually","impaired","myopia","far-sighted"],"variants":{"outline":"f126"}},"eyeglass":{"name":"eyeglass","category":"Health","tags":["sight","defect","see","vision","frames","lenses","visually","impaired","myopia","far-sighted"],"variants":{"outline":"ee8a"}},"face-id-error":{"name":"face-id-error","category":"","tags":["scan","apple","iphone","ipad"],"variants":{"outline":"efa7"}},"face-id":{"name":"face-id","category":"","tags":["apple","iphone","ipad"],"variants":{"outline":"ea9b"}},"face-mask-off":{"name":"face-mask-off","category":"Health","tags":["coronavirus","virus","medical","hospital","doctor"],"variants":{"outline":"f127"}},"face-mask":{"name":"face-mask","category":"Health","tags":["coronavirus","virus","medical","hospital","doctor"],"variants":{"outline":"efb5"}},"fall":{"name":"fall","category":"Health","tags":["collapse","damage","cliff","height"],"variants":{"outline":"ecb9"}},"favicon":{"name":"favicon","category":"Design","tags":[],"variants":{"outline":"fd65"}},"feather-off":{"name":"feather-off","category":"Nature","tags":["bird","animal","nature"],"variants":{"outline":"f128"}},"feather":{"name":"feather","category":"Nature","tags":["bird","animal","nature"],"variants":{"outline":"ee8b"}},"fence-off":{"name":"fence-off","category":"Buildings","tags":["garden","home","house","farm","wood","barrier"],"variants":{"outline":"f129"}},"fence":{"name":"fence","category":"Buildings","tags":["garden","home","house","farm","wood","barrier"],"variants":{"outline":"ef2a"}},"fidget-spinner":{"name":"fidget-spinner","category":"","tags":["toy","spinning","gadget","kids","children","loader","loading"],"variants":{"outline":"f068"}},"file-3d":{"name":"file-3d","category":"Document","tags":["model","document"],"variants":{"outline":"f032"}},"file-alert":{"name":"file-alert","category":"Document","tags":["danger","risk","warning","check","caution","document","error"],"variants":{"outline":"ede6"}},"file-analytics":{"name":"file-analytics","category":"Document","tags":["data","statistics","report","chart","document","paper"],"variants":{"outline":"ede7"}},"file-arrow-left":{"name":"file-arrow-left","category":"Document","tags":["document","import","page","move"],"variants":{"outline":"f033"}},"file-arrow-right":{"name":"file-arrow-right","category":"Document","tags":["document","export","page","move"],"variants":{"outline":"f034"}},"file-barcode":{"name":"file-barcode","category":"Document","tags":["document","code","qr","ticket","scan"],"variants":{"outline":"f035"}},"file-broken":{"name":"file-broken","category":"Document","tags":["document","error","demaged","delete"],"variants":{"outline":"f501"}},"file-certificate":{"name":"file-certificate","category":"Document","tags":["certificate","license","diploma","document","format","data","paper"],"variants":{"outline":"ed4d"}},"file-chart":{"name":"file-chart","category":"Document","tags":["data","graph","analytics"],"variants":{"outline":"f036"}},"file-check":{"name":"file-check","category":"Document","tags":["list","document","accept","done","tick","checkmark"],"variants":{"outline":"ea9c"}},"file-code-2":{"name":"file-code-2","category":"Document","tags":["programming","document","developer","technology"],"variants":{"outline":"ede8"}},"file-code":{"name":"file-code","category":"Document","tags":["paper","new"],"variants":{"outline":"ebd0"}},"file-cv":{"name":"file-cv","category":"Document","tags":[],"variants":{"outline":"fa5a"}},"file-database":{"name":"file-database","category":"Document","tags":["data","storage","folder","format","server"],"variants":{"outline":"f037"}},"file-delta":{"name":"file-delta","category":"Document","tags":["data","document","extension","paper"],"variants":{"outline":"f53d"}},"file-description":{"name":"file-description","category":"Document","tags":["text","paper","report","details","job"],"variants":{"outline":"f028"}},"file-diff":{"name":"file-diff","category":"Document","tags":["add","create","new"],"variants":{"outline":"ecf1"}},"file-digit":{"name":"file-digit","category":"Document","tags":["boolean","binary","exe"],"variants":{"outline":"efa8"}},"file-dislike":{"name":"file-dislike","category":"Document","tags":["rejected","document"],"variants":{"outline":"ed2a"}},"file-dollar":{"name":"file-dollar","category":"Document","tags":["money","finance","invoice"],"variants":{"outline":"efe0"}},"file-dots":{"name":"file-dots","category":"Document","tags":["more","menu","info"],"variants":{"outline":"f038"}},"file-download":{"name":"file-download","category":"Document","tags":["save","transfer","input"],"variants":{"outline":"ea9d"}},"file-euro":{"name":"file-euro","category":"Document","tags":["money","finance","buisness"],"variants":{"outline":"efe1"}},"file-excel":{"name":"file-excel","category":"","tags":[],"variants":{"outline":"fef3"}},"file-export":{"name":"file-export","category":"Document","tags":["arrow","data","paper","document","format"],"variants":{"outline":"ede9"}},"file-function":{"name":"file-function","category":"Document","tags":["data","document","extension","paper"],"variants":{"outline":"f53e"}},"file-horizontal":{"name":"file-horizontal","category":"Document","tags":["paper","new"],"variants":{"outline":"ebb0"}},"file-import":{"name":"file-import","category":"Document","tags":["arrow","data","paper","document","format"],"variants":{"outline":"edea"}},"file-infinity":{"name":"file-infinity","category":"Document","tags":["document","eternity","sync","loop"],"variants":{"outline":"f502"}},"file-info":{"name":"file-info","category":"Document","tags":["info","information","informations","paper","file","document","page"],"variants":{"outline":"edec"}},"file-invoice":{"name":"file-invoice","category":"Document","tags":["accounting","bill","statement","settlement","finance"],"variants":{"outline":"eb67"}},"file-isr":{"name":"file-isr","category":"Document","tags":[],"variants":{"outline":"feac"}},"file-lambda":{"name":"file-lambda","category":"Document","tags":["data","document","extension","paper"],"variants":{"outline":"f53f"}},"file-like":{"name":"file-like","category":"Document","tags":["approved","document"],"variants":{"outline":"ed2b"}},"file-minus":{"name":"file-minus","category":"Document","tags":["remove","delete"],"variants":{"outline":"ea9e"}},"file-music":{"name":"file-music","category":"Document","tags":["mp3","wma","wav"],"variants":{"outline":"ea9f"}},"file-neutral":{"name":"file-neutral","category":"","tags":[],"variants":{"outline":"fd22"}},"file-off":{"name":"file-off","category":"Document","tags":["paper","new"],"variants":{"outline":"ecf2"}},"file-orientation":{"name":"file-orientation","category":"Document","tags":["document","arrow","change","modify","page"],"variants":{"outline":"f2a1"}},"file-pencil":{"name":"file-pencil","category":"Document","tags":["edit","write","editing","text"],"variants":{"outline":"f039"}},"file-percent":{"name":"file-percent","category":"Document","tags":["data","document","extension","paper"],"variants":{"outline":"f540"}},"file-phone":{"name":"file-phone","category":"Document","tags":["save","transfer","input"],"variants":{"outline":"ecdc"}},"file-plus":{"name":"file-plus","category":"Document","tags":["add","create","new"],"variants":{"outline":"eaa0"}},"file-power":{"name":"file-power","category":"Document","tags":["archive","energy","battery","ecology"],"variants":{"outline":"f03a"}},"file-report":{"name":"file-report","category":"Document","tags":["stats","data","paper","document","chart","format"],"variants":{"outline":"eded"}},"file-rss":{"name":"file-rss","category":"Document","tags":["extension","format","news"],"variants":{"outline":"f03b"}},"file-sad":{"name":"file-sad","category":"","tags":[],"variants":{"outline":"fd23"}},"file-scissors":{"name":"file-scissors","category":"Document","tags":["cut","cutting","tool","cutter","office"],"variants":{"outline":"f03c"}},"file-search":{"name":"file-search","category":"Document","tags":["search","data","paper","document","format"],"variants":{"outline":"ed5d"}},"file-settings":{"name":"file-settings","category":"Document","tags":["edit","options","configuration","control"],"variants":{"outline":"f029"}},"file-shredder":{"name":"file-shredder","category":"Document","tags":["shred","destroy","cut"],"variants":{"outline":"eaa1"}},"file-signal":{"name":"file-signal","category":"Document","tags":["wi-fi","connection","internet","online","connected"],"variants":{"outline":"f03d"}},"file-smile":{"name":"file-smile","category":"","tags":[],"variants":{"outline":"fd24"}},"file-spreadsheet":{"name":"file-spreadsheet","category":"Document","tags":["table","extension","excel","format"],"variants":{"outline":"f03e"}},"file-stack":{"name":"file-stack","category":"Document","tags":["document","duplicate","data","add"],"variants":{"outline":"f503"}},"file-star":{"name":"file-star","category":"Document","tags":["favourite","bookmark","like"],"variants":{"outline":"f03f"}},"file-symlink":{"name":"file-symlink","category":"Document","tags":["text","format","extension","document"],"variants":{"outline":"ed53"}},"file-text-ai":{"name":"file-text-ai","category":"Document","tags":[],"variants":{"outline":"fa27"}},"file-text":{"name":"file-text","category":"Document","tags":["data","pdf","txt"],"variants":{"outline":"eaa2"}},"file-time":{"name":"file-time","category":"Document","tags":["clock","planning","history","watch"],"variants":{"outline":"f040"}},"file-type-bmp":{"name":"file-type-bmp","category":"Document","tags":[],"variants":{"outline":"fb07"}},"file-type-css":{"name":"file-type-css","category":"Document","tags":[],"variants":{"outline":"fb08"}},"file-type-csv":{"name":"file-type-csv","category":"Document","tags":[],"variants":{"outline":"fb09"}},"file-type-doc":{"name":"file-type-doc","category":"Document","tags":[],"variants":{"outline":"fb0a"}},"file-type-docx":{"name":"file-type-docx","category":"Document","tags":[],"variants":{"outline":"fb0b"}},"file-type-html":{"name":"file-type-html","category":"Document","tags":[],"variants":{"outline":"fb0c"}},"file-type-jpg":{"name":"file-type-jpg","category":"Document","tags":[],"variants":{"outline":"fb0d"}},"file-type-js":{"name":"file-type-js","category":"Document","tags":[],"variants":{"outline":"fb0e"}},"file-type-jsx":{"name":"file-type-jsx","category":"Document","tags":[],"variants":{"outline":"fb0f"}},"file-type-pdf":{"name":"file-type-pdf","category":"Document","tags":[],"variants":{"outline":"fb10"}},"file-type-php":{"name":"file-type-php","category":"Document","tags":[],"variants":{"outline":"fb11"}},"file-type-png":{"name":"file-type-png","category":"Document","tags":[],"variants":{"outline":"fb12"}},"file-type-ppt":{"name":"file-type-ppt","category":"Document","tags":[],"variants":{"outline":"fb13"}},"file-type-rs":{"name":"file-type-rs","category":"Document","tags":[],"variants":{"outline":"fb14"}},"file-type-sql":{"name":"file-type-sql","category":"Document","tags":[],"variants":{"outline":"fb15"}},"file-type-svg":{"name":"file-type-svg","category":"Document","tags":[],"variants":{"outline":"fb16"}},"file-type-ts":{"name":"file-type-ts","category":"Document","tags":[],"variants":{"outline":"fb17"}},"file-type-tsx":{"name":"file-type-tsx","category":"Document","tags":[],"variants":{"outline":"fb18"}},"file-type-txt":{"name":"file-type-txt","category":"Document","tags":[],"variants":{"outline":"fb19"}},"file-type-vue":{"name":"file-type-vue","category":"Document","tags":[],"variants":{"outline":"fb1a"}},"file-type-xls":{"name":"file-type-xls","category":"Document","tags":[],"variants":{"outline":"fb1b"}},"file-type-xml":{"name":"file-type-xml","category":"Document","tags":[],"variants":{"outline":"fb1c"}},"file-type-zip":{"name":"file-type-zip","category":"Document","tags":[],"variants":{"outline":"fb1d"}},"file-typography":{"name":"file-typography","category":"Document","tags":["font","text","format","type","size"],"variants":{"outline":"f041"}},"file-unknown":{"name":"file-unknown","category":"Document","tags":["missing","unidentified","anonymous"],"variants":{"outline":"f042"}},"file-upload":{"name":"file-upload","category":"Document","tags":["save","transfer","input"],"variants":{"outline":"ec91"}},"file-vector":{"name":"file-vector","category":"Document","tags":["graphic","eps","format","svg"],"variants":{"outline":"f043"}},"file-word":{"name":"file-word","category":"","tags":[],"variants":{"outline":"fef2"}},"file-x":{"name":"file-x","category":"Document","tags":["remove","delete","erase"],"variants":{"outline":"eaa3","filled":"f748"}},"file-zip":{"name":"file-zip","category":"Document","tags":["forms","documents","stack","letter","archive","rar","zipped","extention","bundle","format"],"variants":{"outline":"ed4e"}},"file":{"name":"file","category":"Document","tags":["paper","new"],"variants":{"outline":"eaa4","filled":"f747"}},"files-off":{"name":"files-off","category":"Document","tags":["forms","documents","stack","letter"],"variants":{"outline":"edee"}},"files":{"name":"files","category":"Document","tags":["forms","documents","stack","letter"],"variants":{"outline":"edef"}},"filter-bolt":{"name":"filter-bolt","category":"","tags":[],"variants":{"outline":"fb7c"}},"filter-cancel":{"name":"filter-cancel","category":"","tags":[],"variants":{"outline":"fb7d"}},"filter-check":{"name":"filter-check","category":"","tags":[],"variants":{"outline":"fb7e"}},"filter-code":{"name":"filter-code","category":"","tags":[],"variants":{"outline":"fb7f"}},"filter-cog":{"name":"filter-cog","category":"System","tags":[],"variants":{"outline":"f9fe"}},"filter-discount":{"name":"filter-discount","category":"","tags":[],"variants":{"outline":"fb80"}},"filter-dollar":{"name":"filter-dollar","category":"System","tags":[],"variants":{"outline":"f9ff"}},"filter-down":{"name":"filter-down","category":"","tags":[],"variants":{"outline":"fb81"}},"filter-edit":{"name":"filter-edit","category":"System","tags":[],"variants":{"outline":"fa00"}},"filter-exclamation":{"name":"filter-exclamation","category":"","tags":[],"variants":{"outline":"fb82"}},"filter-heart":{"name":"filter-heart","category":"","tags":[],"variants":{"outline":"fb83"}},"filter-minus":{"name":"filter-minus","category":"System","tags":[],"variants":{"outline":"fa01"}},"filter-off":{"name":"filter-off","category":"System","tags":["funnel","hopper","filtration"],"variants":{"outline":"ed2c"}},"filter-pause":{"name":"filter-pause","category":"","tags":[],"variants":{"outline":"fb84"}},"filter-pin":{"name":"filter-pin","category":"","tags":[],"variants":{"outline":"fb85"}},"filter-plus":{"name":"filter-plus","category":"System","tags":[],"variants":{"outline":"fa02"}},"filter-question":{"name":"filter-question","category":"","tags":[],"variants":{"outline":"fb86"}},"filter-search":{"name":"filter-search","category":"","tags":[],"variants":{"outline":"fb87"}},"filter-share":{"name":"filter-share","category":"","tags":[],"variants":{"outline":"fb88"}},"filter-star":{"name":"filter-star","category":"System","tags":[],"variants":{"outline":"fa03"}},"filter-up":{"name":"filter-up","category":"","tags":[],"variants":{"outline":"fb89"}},"filter-x":{"name":"filter-x","category":"System","tags":[],"variants":{"outline":"fa04"}},"filter":{"name":"filter","category":"System","tags":["funnel","hopper","filtration"],"variants":{"outline":"eaa5","filled":"fc27"}},"filters":{"name":"filters","category":"","tags":["design","editing","effects"],"variants":{"outline":"f793"}},"fingerprint-off":{"name":"fingerprint-off","category":"System","tags":["indentify","mark","surface","security","access"],"variants":{"outline":"f12a"}},"fingerprint-scan":{"name":"fingerprint-scan","category":"","tags":[],"variants":{"outline":"fcb5"}},"fingerprint":{"name":"fingerprint","category":"System","tags":["indentify","mark","surface","security","access"],"variants":{"outline":"ebd1"}},"fire-extinguisher":{"name":"fire-extinguisher","category":"","tags":[],"variants":{"outline":"faf6"}},"fire-hydrant-off":{"name":"fire-hydrant-off","category":"Map","tags":["water","emergency","fireman","safety","urban"],"variants":{"outline":"f3ec"}},"fire-hydrant":{"name":"fire-hydrant","category":"Map","tags":["water","emergency","fireman","safety","urban"],"variants":{"outline":"f3a9"}},"firetruck":{"name":"firetruck","category":"Vehicles","tags":["help","rescuer","vehicle","fireman","extinguishing"],"variants":{"outline":"ebe8"}},"first-aid-kit-off":{"name":"first-aid-kit-off","category":"Health","tags":["medical","healthcare","hospital","health"],"variants":{"outline":"f3ed"}},"first-aid-kit":{"name":"first-aid-kit","category":"Health","tags":["medical","healthcare","hospital","health"],"variants":{"outline":"ef5f"}},"fish-bone":{"name":"fish-bone","category":"Animals","tags":["food","skeleton","cat","sea"],"variants":{"outline":"f287"}},"fish-christianity":{"name":"fish-christianity","category":"Symbols","tags":["religion","jesus","faith","christian"],"variants":{"outline":"f58b"}},"fish-hook-off":{"name":"fish-hook-off","category":"","tags":["fishing","bait","hanging","catch","water"],"variants":{"outline":"f3ee"}},"fish-hook":{"name":"fish-hook","category":"","tags":["fishing","bait","hanging","catch","water"],"variants":{"outline":"f1f9"}},"fish-off":{"name":"fish-off","category":"Animals","tags":["food","sea","animal","fishing","ocean","sushi"],"variants":{"outline":"f12b"}},"fish":{"name":"fish","category":"Animals","tags":["food","sea","animal","fishing","ocean","sushi"],"variants":{"outline":"ef2b"}},"flag-2-off":{"name":"flag-2-off","category":"Map","tags":["banner","pin","report","map","warning","alert"],"variants":{"outline":"f12c"}},"flag-2":{"name":"flag-2","category":"Map","tags":["banner","pin","report","map","warning","alert"],"variants":{"outline":"ee8c","filled":"f707"}},"flag-3":{"name":"flag-3","category":"Map","tags":["banner","pin","report","map","warning","alert"],"variants":{"outline":"ee8d","filled":"f708"}},"flag-bitcoin":{"name":"flag-bitcoin","category":"","tags":[],"variants":{"outline":"ff3c"}},"flag-bolt":{"name":"flag-bolt","category":"","tags":[],"variants":{"outline":"fb8a"}},"flag-cancel":{"name":"flag-cancel","category":"","tags":[],"variants":{"outline":"fb8b"}},"flag-check":{"name":"flag-check","category":"","tags":[],"variants":{"outline":"fb8c"}},"flag-code":{"name":"flag-code","category":"","tags":[],"variants":{"outline":"fb8d"}},"flag-cog":{"name":"flag-cog","category":"","tags":[],"variants":{"outline":"fb8e"}},"flag-discount":{"name":"flag-discount","category":"","tags":[],"variants":{"outline":"fb8f"}},"flag-dollar":{"name":"flag-dollar","category":"","tags":[],"variants":{"outline":"fb90"}},"flag-down":{"name":"flag-down","category":"","tags":[],"variants":{"outline":"fb91"}},"flag-exclamation":{"name":"flag-exclamation","category":"","tags":[],"variants":{"outline":"fb92"}},"flag-heart":{"name":"flag-heart","category":"","tags":[],"variants":{"outline":"fb93"}},"flag-minus":{"name":"flag-minus","category":"","tags":[],"variants":{"outline":"fb94"}},"flag-off":{"name":"flag-off","category":"Map","tags":["banner","pin","report","map","warning","alert"],"variants":{"outline":"f12d"}},"flag-pause":{"name":"flag-pause","category":"","tags":[],"variants":{"outline":"fb95"}},"flag-pin":{"name":"flag-pin","category":"","tags":[],"variants":{"outline":"fb96"}},"flag-plus":{"name":"flag-plus","category":"","tags":[],"variants":{"outline":"fb97"}},"flag-question":{"name":"flag-question","category":"","tags":[],"variants":{"outline":"fb98"}},"flag-search":{"name":"flag-search","category":"","tags":[],"variants":{"outline":"fb99"}},"flag-share":{"name":"flag-share","category":"","tags":[],"variants":{"outline":"fb9a"}},"flag-star":{"name":"flag-star","category":"","tags":[],"variants":{"outline":"fb9b"}},"flag-up":{"name":"flag-up","category":"","tags":[],"variants":{"outline":"fb9c"}},"flag-x":{"name":"flag-x","category":"","tags":[],"variants":{"outline":"fb9d"}},"flag":{"name":"flag","category":"Map","tags":["banner","pin","report","map","warning","alert"],"variants":{"outline":"eaa6","filled":"f67a"}},"flame-off":{"name":"flame-off","category":"","tags":["fire","fireplace","light","burn","bonfire","smoke","barbecue"],"variants":{"outline":"f12e"}},"flame":{"name":"flame","category":"","tags":["fire","fireplace","light","burn","bonfire","smoke","barbecue"],"variants":{"outline":"ec2c"}},"flare":{"name":"flare","category":"Weather","tags":["shine","flare","heat","sunlight","hot","sun"],"variants":{"outline":"ee8e"}},"flask-2-off":{"name":"flask-2-off","category":"Health","tags":["liquid","container","glass","chemistry","test","laboratory","experimental","beta"],"variants":{"outline":"f12f"}},"flask-2":{"name":"flask-2","category":"Health","tags":["liquid","container","glass","chemistry","test","laboratory","experimental","beta"],"variants":{"outline":"ef60","filled":"fd12"}},"flask-off":{"name":"flask-off","category":"Health","tags":["liquid","container","glass","chemistry"],"variants":{"outline":"f130"}},"flask":{"name":"flask","category":"Health","tags":["liquid","container","glass","chemistry","test","laboratory","experimental","beta"],"variants":{"outline":"ebd2","filled":"fd13"}},"flip-flops":{"name":"flip-flops","category":"","tags":["summer","sand","sandals","beach","shoes"],"variants":{"outline":"f564"}},"flip-horizontal":{"name":"flip-horizontal","category":"Design","tags":["mirror","rotate"],"variants":{"outline":"eaa7"}},"flip-vertical":{"name":"flip-vertical","category":"Design","tags":["mirror","rotate"],"variants":{"outline":"eaa8"}},"float-center":{"name":"float-center","category":"Text","tags":["position"],"variants":{"outline":"ebb1"}},"float-left":{"name":"float-left","category":"Text","tags":["position"],"variants":{"outline":"ebb2"}},"float-none":{"name":"float-none","category":"Text","tags":["position"],"variants":{"outline":"ed13"}},"float-right":{"name":"float-right","category":"Text","tags":["position"],"variants":{"outline":"ebb3"}},"flower-off":{"name":"flower-off","category":"Nature","tags":["plant","garden","rose","lotus"],"variants":{"outline":"f131"}},"flower":{"name":"flower","category":"Nature","tags":["plant","garden","rose","lotus"],"variants":{"outline":"eff6"}},"focus-2":{"name":"focus-2","category":"Photography","tags":["spotlight","attention","center","aim","target"],"variants":{"outline":"ebd3"}},"focus-auto":{"name":"focus-auto","category":"Photography","tags":[],"variants":{"outline":"fa62"}},"focus-centered":{"name":"focus-centered","category":"","tags":["filter","photo","photography","camera","image"],"variants":{"outline":"f02a"}},"focus":{"name":"focus","category":"Photography","tags":["target","bullseye","aim"],"variants":{"outline":"eb8d"}},"fold-down":{"name":"fold-down","category":"Arrows","tags":["arrow","move","toggle"],"variants":{"outline":"ed54"}},"fold-up":{"name":"fold-up","category":"Arrows","tags":["arrow","move","toggle"],"variants":{"outline":"ed55"}},"fold":{"name":"fold","category":"Arrows","tags":["arrow","move","merge"],"variants":{"outline":"ed56"}},"folder-bolt":{"name":"folder-bolt","category":"Document","tags":[],"variants":{"outline":"f90c"}},"folder-cancel":{"name":"folder-cancel","category":"Document","tags":[],"variants":{"outline":"f90d"}},"folder-check":{"name":"folder-check","category":"Document","tags":[],"variants":{"outline":"f90e"}},"folder-code":{"name":"folder-code","category":"Document","tags":[],"variants":{"outline":"f90f"}},"folder-cog":{"name":"folder-cog","category":"Document","tags":[],"variants":{"outline":"f910"}},"folder-dollar":{"name":"folder-dollar","category":"Document","tags":[],"variants":{"outline":"f911"}},"folder-down":{"name":"folder-down","category":"Document","tags":[],"variants":{"outline":"f912"}},"folder-exclamation":{"name":"folder-exclamation","category":"Document","tags":[],"variants":{"outline":"f913"}},"folder-heart":{"name":"folder-heart","category":"Document","tags":[],"variants":{"outline":"f914"}},"folder-minus":{"name":"folder-minus","category":"Document","tags":["directory","dir"],"variants":{"outline":"eaaa"}},"folder-off":{"name":"folder-off","category":"Document","tags":["cancel","no","directory","dir"],"variants":{"outline":"ed14"}},"folder-open":{"name":"folder-open","category":"","tags":[],"variants":{"outline":"faf7"}},"folder-pause":{"name":"folder-pause","category":"Document","tags":[],"variants":{"outline":"f915"}},"folder-pin":{"name":"folder-pin","category":"Document","tags":[],"variants":{"outline":"f916"}},"folder-plus":{"name":"folder-plus","category":"Document","tags":["add","create","new","directory","dir"],"variants":{"outline":"eaab"}},"folder-question":{"name":"folder-question","category":"Document","tags":[],"variants":{"outline":"f917"}},"folder-root":{"name":"folder-root","category":"","tags":[],"variants":{"outline":"fd43"}},"folder-search":{"name":"folder-search","category":"Document","tags":[],"variants":{"outline":"f918"}},"folder-share":{"name":"folder-share","category":"Document","tags":[],"variants":{"outline":"f919"}},"folder-star":{"name":"folder-star","category":"Document","tags":[],"variants":{"outline":"f91a"}},"folder-symlink":{"name":"folder-symlink","category":"","tags":[],"variants":{"outline":"f91b"}},"folder-up":{"name":"folder-up","category":"Document","tags":[],"variants":{"outline":"f91c"}},"folder-x":{"name":"folder-x","category":"Document","tags":["directory","dir"],"variants":{"outline":"eaac"}},"folder":{"name":"folder","category":"Document","tags":["cancel","no","directory","dir"],"variants":{"outline":"eaad","filled":"f749"}},"folders-off":{"name":"folders-off","category":"Document","tags":["directory","dir","clone","copy"],"variants":{"outline":"f133"}},"folders":{"name":"folders","category":"Document","tags":["directory","dir","clone","copy"],"variants":{"outline":"eaae"}},"forbid-2":{"name":"forbid-2","category":"","tags":[],"variants":{"outline":"ebd4","filled":"fc28"}},"forbid":{"name":"forbid","category":"","tags":[],"variants":{"outline":"ebd5","filled":"fc29"}},"forklift":{"name":"forklift","category":"Vehicles","tags":["store","warehouse","inventory","exporting"],"variants":{"outline":"ebe9"}},"forms":{"name":"forms","category":"Text","tags":["formbuilder","input","url","textarea"],"variants":{"outline":"ee8f"}},"fountain-off":{"name":"fountain-off","category":"Map","tags":["park","decoration","water","spring","public"],"variants":{"outline":"f134"}},"fountain":{"name":"fountain","category":"Map","tags":["park","decoration","water","spring","public"],"variants":{"outline":"f09b","filled":"fc2a"}},"frame-off":{"name":"frame-off","category":"Design","tags":["borderless","outlineless","no-border","unframed","unbordered","bare","naked","borderless-frame","no-outline","remove-frame","crop"],"variants":{"outline":"f135"}},"frame":{"name":"frame","category":"Design","tags":["border","outline","enclosure","surround","edge","boundary","perimeter","framework","structure","container","crop"],"variants":{"outline":"eaaf"}},"free-rights":{"name":"free-rights","category":"","tags":["justice","inviolability","freedom"],"variants":{"outline":"efb6"}},"freeze-column":{"name":"freeze-column","category":"Design","tags":[],"variants":{"outline":"fa63"}},"freeze-row-column":{"name":"freeze-row-column","category":"Design","tags":[],"variants":{"outline":"fa64"}},"freeze-row":{"name":"freeze-row","category":"Design","tags":[],"variants":{"outline":"fa65"}},"fridge-off":{"name":"fridge-off","category":"Devices","tags":["kitchen","cooler","control","freezer","food"],"variants":{"outline":"f3ef"}},"fridge":{"name":"fridge","category":"Devices","tags":["kitchen","cooler","control","freezer","food"],"variants":{"outline":"f1fa"}},"friends-off":{"name":"friends-off","category":"","tags":["people","boy","girl","man","woman"],"variants":{"outline":"f136"}},"friends":{"name":"friends","category":"","tags":["people","boy","girl","man","woman"],"variants":{"outline":"eab0"}},"frustum-off":{"name":"frustum-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa9d"}},"frustum-plus":{"name":"frustum-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa9e"}},"frustum":{"name":"frustum","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fa9f"}},"function-off":{"name":"function-off","category":"Math","tags":["math","linear","statyscics","graph"],"variants":{"outline":"f3f0"}},"function":{"name":"function","category":"Math","tags":["math","linear","statyscics","graph"],"variants":{"outline":"f225","filled":"fc2b"}},"galaxy":{"name":"galaxy","category":"","tags":[],"variants":{"outline":"fcb6"}},"garden-cart-off":{"name":"garden-cart-off","category":"Vehicles","tags":["gardening","conctruction","wheel","wheelbarrow"],"variants":{"outline":"f3f1"}},"garden-cart":{"name":"garden-cart","category":"Vehicles","tags":["gardening","conctruction","wheel","wheelbarrow"],"variants":{"outline":"f23e"}},"gas-station-off":{"name":"gas-station-off","category":"Map","tags":["fuel","oil","cars","vehicles","shop","distributor"],"variants":{"outline":"f137"}},"gas-station":{"name":"gas-station","category":"Vehicles","tags":["fuel","oil","cars","vehicles","shop","distributor"],"variants":{"outline":"ec7d"}},"gauge-off":{"name":"gauge-off","category":"System","tags":["car","dashboard"],"variants":{"outline":"f138"}},"gauge":{"name":"gauge","category":"System","tags":["car","dashboard"],"variants":{"outline":"eab1","filled":"fc2c"}},"gavel":{"name":"gavel","category":"","tags":["justice","law","hammer","legal","auction"],"variants":{"outline":"ef90"}},"gender-agender":{"name":"gender-agender","category":"Gender","tags":["identity","genderless"],"variants":{"outline":"f0e1"}},"gender-androgyne":{"name":"gender-androgyne","category":"Gender","tags":["identity","intersex","feminine","genderqueer"],"variants":{"outline":"f0e2"}},"gender-bigender":{"name":"gender-bigender","category":"Gender","tags":["identity","female","bi","sexual"],"variants":{"outline":"f0e3"}},"gender-demiboy":{"name":"gender-demiboy","category":"Gender","tags":["identity","demimale","demi"],"variants":{"outline":"f0e4"}},"gender-demigirl":{"name":"gender-demigirl","category":"Gender","tags":["identity","demiwoman","demifemale"],"variants":{"outline":"f0e5"}},"gender-epicene":{"name":"gender-epicene","category":"Gender","tags":["identity","genderqueer","transgender"],"variants":{"outline":"f0e6"}},"gender-female":{"name":"gender-female","category":"Gender","tags":["identity","woman","girl"],"variants":{"outline":"f0e7"}},"gender-femme":{"name":"gender-femme","category":"Gender","tags":["identity","lesbian"],"variants":{"outline":"f0e8"}},"gender-genderfluid":{"name":"gender-genderfluid","category":"Gender","tags":["identity","indefinite"],"variants":{"outline":"f0e9"}},"gender-genderless":{"name":"gender-genderless","category":"Gender","tags":["identity","unisex"],"variants":{"outline":"f0ea"}},"gender-genderqueer":{"name":"gender-genderqueer","category":"Gender","tags":["identity","non binary"],"variants":{"outline":"f0eb"}},"gender-hermaphrodite":{"name":"gender-hermaphrodite","category":"Gender","tags":["identify","intersexuality","hybrid"],"variants":{"outline":"f0ec"}},"gender-intergender":{"name":"gender-intergender","category":"Gender","tags":["identity","transgender","intersex"],"variants":{"outline":"f0ed"}},"gender-male":{"name":"gender-male","category":"Gender","tags":["identity","man","boy","person"],"variants":{"outline":"f0ee"}},"gender-neutrois":{"name":"gender-neutrois","category":"Gender","tags":["identity","none","transgender"],"variants":{"outline":"f0ef"}},"gender-third":{"name":"gender-third","category":"Gender","tags":["identity","none","female"],"variants":{"outline":"f0f0"}},"gender-transgender":{"name":"gender-transgender","category":"Gender","tags":["identity","ladyboy","lgbt","gay","homosexual"],"variants":{"outline":"f0f1"}},"gender-trasvesti":{"name":"gender-trasvesti","category":"Gender","tags":["identity","birth","male","female","heterosexual","homosexual"],"variants":{"outline":"f0f2"}},"geometry":{"name":"geometry","category":"Map","tags":["build","architecture","create","compass"],"variants":{"outline":"ee90"}},"ghost-2":{"name":"ghost-2","category":"","tags":["spirit","transparent","fairytale","horror","movie","shadow","haunt"],"variants":{"outline":"f57c","filled":"f74a"}},"ghost-3":{"name":"ghost-3","category":"","tags":[],"variants":{"outline":"fc13"}},"ghost-off":{"name":"ghost-off","category":"","tags":["spirit","transparent","fairytale","horror","movie","shadow","haunt"],"variants":{"outline":"f3f2"}},"ghost":{"name":"ghost","category":"","tags":["spirit","transparent","fairytale","horror","movie","shadow","haunt"],"variants":{"outline":"eb8e","filled":"f74b"}},"gif":{"name":"gif","category":"Extensions","tags":["file","format","animation","image","extension","filetype"],"variants":{"outline":"f257"}},"gift-card":{"name":"gift-card","category":"","tags":["coupon","present","voucher","shopping","birthday"],"variants":{"outline":"f3aa","filled":"fc2d"}},"gift-off":{"name":"gift-off","category":"","tags":["present","birthday","celebration","wish","bonus","souvenire","surprise"],"variants":{"outline":"f3f3"}},"gift":{"name":"gift","category":"","tags":["present","birthday","celebration","wish","bonus","souvenire","surprise"],"variants":{"outline":"eb68","filled":"fd14"}},"git-branch-deleted":{"name":"git-branch-deleted","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"f57d"}},"git-branch":{"name":"git-branch","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"eab2"}},"git-cherry-pick":{"name":"git-cherry-pick","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"f57e"}},"git-commit":{"name":"git-commit","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"eab3"}},"git-compare":{"name":"git-compare","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"eab4"}},"git-fork":{"name":"git-fork","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"eb8f"}},"git-merge":{"name":"git-merge","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"eab5"}},"git-pull-request-closed":{"name":"git-pull-request-closed","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"ef7f"}},"git-pull-request-draft":{"name":"git-pull-request-draft","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"efb7"}},"git-pull-request":{"name":"git-pull-request","category":"Version control","tags":["code","version control","command"],"variants":{"outline":"eab6"}},"gizmo":{"name":"gizmo","category":"","tags":["system","network","tech","connection"],"variants":{"outline":"f02b"}},"glass-champagne":{"name":"glass-champagne","category":"","tags":[],"variants":{"outline":"fd9c"}},"glass-cocktail":{"name":"glass-cocktail","category":"","tags":[],"variants":{"outline":"fd9d"}},"glass-full":{"name":"glass-full","category":"Food","tags":["wine","cup","goblet"],"variants":{"outline":"eab7","filled":"fc2e"}},"glass-gin":{"name":"glass-gin","category":"","tags":[],"variants":{"outline":"fd9e"}},"glass-off":{"name":"glass-off","category":"Food","tags":["wine","cup","goblet"],"variants":{"outline":"ee91"}},"glass":{"name":"glass","category":"Food","tags":["wine","cup","goblet"],"variants":{"outline":"eab8"}},"globe-off":{"name":"globe-off","category":"Map","tags":["world","travel","journey","trip","planet","earth"],"variants":{"outline":"f139"}},"globe":{"name":"globe","category":"Map","tags":["world","travel","journey","trip","planet","earth"],"variants":{"outline":"eab9","filled":"fc2f"}},"go-game":{"name":"go-game","category":"","tags":["strategy","board","mind"],"variants":{"outline":"f512"}},"golf-off":{"name":"golf-off","category":"Sport","tags":["game","ball","play","hole","club-and-ball","stroke","luxury","pitch"],"variants":{"outline":"f13a"}},"golf":{"name":"golf","category":"Sport","tags":["game","ball","play","hole","club-and-ball","stroke","luxury","pitch"],"variants":{"outline":"ed8c"}},"gps":{"name":"gps","category":"Map","tags":["navigation","directions","global","positioning","system","satnav","radionavigation","travel","car"],"variants":{"outline":"ed7a","filled":"fe48"}},"gradienter":{"name":"gradienter","category":"","tags":[],"variants":{"outline":"f3ab"}},"grain":{"name":"grain","category":"","tags":["dots","pattern","random","round","circle","nodes"],"variants":{"outline":"ee92"}},"graph-off":{"name":"graph-off","category":"","tags":["analytics","raport","statistics","chart"],"variants":{"outline":"f3f4"}},"graph":{"name":"graph","category":"","tags":["analytics","raport","statistics","chart"],"variants":{"outline":"f288","filled":"fd15"}},"grave-2":{"name":"grave-2","category":"Map","tags":["cementry","halloween","death","dead","tomb"],"variants":{"outline":"f57f"}},"grave":{"name":"grave","category":"Map","tags":["cemetery","halloween","death","dead","tomb"],"variants":{"outline":"f580"}},"grid-3x3":{"name":"grid-3x3","category":"Design","tags":["layout","pattern","matrix","arrangement","gridlines","cell","structure","block","squares","grid-pattern"],"variants":{"outline":"fca4"}},"grid-4x4":{"name":"grid-4x4","category":"Design","tags":["layout","matrix","pattern","gridlines","arrangement","structure","block","squares","four-by-four","grid-pattern"],"variants":{"outline":"fca5"}},"grid-dots":{"name":"grid-dots","category":"System","tags":["network","pattern","layout"],"variants":{"outline":"eaba"}},"grid-goldenratio":{"name":"grid-goldenratio","category":"Design","tags":["layout","pattern","matrix","arrangement","golden-ratio","cell","structure","ratio","gridlines","grid-structure"],"variants":{"outline":"fca6"}},"grid-pattern":{"name":"grid-pattern","category":"","tags":["grid","mesh","net","line"],"variants":{"outline":"efc9"}},"grid-scan":{"name":"grid-scan","category":"System","tags":["data","matrix","layout","pattern","dimension","analysis","structure","mapping","inspection","grid-data"],"variants":{"outline":"fca7"}},"grill-fork":{"name":"grill-fork","category":"Food","tags":["cook","cooking","bbq","meat","tool"],"variants":{"outline":"f35b"}},"grill-off":{"name":"grill-off","category":"Food","tags":["food","sasuage","beef","steak","bbq","cooking"],"variants":{"outline":"f3f5"}},"grill-spatula":{"name":"grill-spatula","category":"Food","tags":["cook","cooking","bbq","meat","tool"],"variants":{"outline":"f35c"}},"grill":{"name":"grill","category":"Food","tags":["food","sasuage","beef","steak","bbq","cooking"],"variants":{"outline":"efa9"}},"grip-horizontal":{"name":"grip-horizontal","category":"System","tags":["picture","abstract","symbol","design","across","dots","drag"],"variants":{"outline":"ec00"}},"grip-vertical":{"name":"grip-vertical","category":"System","tags":["picture","abstract","symbol","design","upright","dots","drag"],"variants":{"outline":"ec01"}},"growth":{"name":"growth","category":"Nature","tags":["seed","harvest","plant","tree","flower","grain","greenery","garden"],"variants":{"outline":"ee93"}},"guitar-pick":{"name":"guitar-pick","category":"","tags":["music","instrument","melody","accesories"],"variants":{"outline":"f4c6","filled":"f67b"}},"gymnastics":{"name":"gymnastics","category":"","tags":[],"variants":{"outline":"fd44"}},"h-1":{"name":"h-1","category":"Text","tags":["header","text","editor","h1","heading","typography"],"variants":{"outline":"ec94"}},"h-2":{"name":"h-2","category":"Text","tags":["header","text","editor","h2","heading","typography"],"variants":{"outline":"ec95"}},"h-3":{"name":"h-3","category":"Text","tags":["header","text","editor","h3","heading","typography"],"variants":{"outline":"ec96"}},"h-4":{"name":"h-4","category":"Text","tags":["header","text","editor","h4","heading","typography"],"variants":{"outline":"ec97"}},"h-5":{"name":"h-5","category":"Text","tags":["header","text","editor","h5","heading","typography"],"variants":{"outline":"ec98"}},"h-6":{"name":"h-6","category":"Text","tags":["header","text","editor","h6","heading","typography"],"variants":{"outline":"ec99"}},"hammer-off":{"name":"hammer-off","category":"","tags":["tool","repair","building","construction"],"variants":{"outline":"f13c"}},"hammer":{"name":"hammer","category":"","tags":["tool","repair","building","construction"],"variants":{"outline":"ef91"}},"hand-click":{"name":"hand-click","category":"Gestures","tags":["gesture","touch","press","phone"],"variants":{"outline":"ef4f"}},"hand-finger-down":{"name":"hand-finger-down","category":"","tags":[],"variants":{"outline":"ff4f"}},"hand-finger-left":{"name":"hand-finger-left","category":"","tags":[],"variants":{"outline":"ff4e"}},"hand-finger-off":{"name":"hand-finger-off","category":"Gestures","tags":["point","show","index","forefinger","body","human","palm"],"variants":{"outline":"f13d"}},"hand-finger-right":{"name":"hand-finger-right","category":"","tags":[],"variants":{"outline":"ff4d"}},"hand-finger":{"name":"hand-finger","category":"Gestures","tags":["point","show","index","forefinger","body","human","palm"],"variants":{"outline":"ee94"}},"hand-grab":{"name":"hand-grab","category":"Gestures","tags":["hold","fist","drop","catch"],"variants":{"outline":"f091"}},"hand-little-finger":{"name":"hand-little-finger","category":"Gestures","tags":["small","body","human","palm"],"variants":{"outline":"ee95"}},"hand-love-you":{"name":"hand-love-you","category":"Gestures","tags":["heavy","metal","party","concert","rebel"],"variants":{"outline":"ee97"}},"hand-middle-finger":{"name":"hand-middle-finger","category":"Gestures","tags":["signal","gesture","curse","vulgarism","abuse"],"variants":{"outline":"ec2d"}},"hand-move":{"name":"hand-move","category":"Gestures","tags":["gesture","swipe","right","left","up","down"],"variants":{"outline":"ef50"}},"hand-off":{"name":"hand-off","category":"Gestures","tags":["disclaimer","body"],"variants":{"outline":"ed15"}},"hand-ring-finger":{"name":"hand-ring-finger","category":"Gestures","tags":["body","human","palm"],"variants":{"outline":"ee96"}},"hand-sanitizer":{"name":"hand-sanitizer","category":"Health","tags":["hygiene","gel","alcohol","wash","virus"],"variants":{"outline":"f5f4"}},"hand-stop":{"name":"hand-stop","category":"Gestures","tags":["forbiddance","nixing","ban","interdicting"],"variants":{"outline":"ec2e"}},"hand-three-fingers":{"name":"hand-three-fingers","category":"Gestures","tags":["body","human","palm"],"variants":{"outline":"ee98"}},"hand-two-fingers":{"name":"hand-two-fingers","category":"Gestures","tags":["body","human","palm","gesture"],"variants":{"outline":"ee99"}},"hanger-2":{"name":"hanger-2","category":"","tags":["clothes","wardrobe","hook","hang","wooden","plastic","wire","shop","store","clothing","fashion"],"variants":{"outline":"f09c","filled":"ff61"}},"hanger-off":{"name":"hanger-off","category":"","tags":["clothes","wardrobe","hook","hang","wooden","plastic","wire","shop","store","clothing","fashion"],"variants":{"outline":"f13e"}},"hanger":{"name":"hanger","category":"","tags":["clothes","wardrobe","hook","hang","wooden","plastic","wire","shop","store","clothing","fashion"],"variants":{"outline":"ee9a"}},"hash":{"name":"hash","category":"","tags":["hashtag","#","instagram"],"variants":{"outline":"eabc"}},"haze-moon":{"name":"haze-moon","category":"","tags":[],"variants":{"outline":"faf8"}},"haze":{"name":"haze","category":"Weather","tags":["climate","meterology","weather","morning"],"variants":{"outline":"efaa"}},"hdr":{"name":"hdr","category":"Photography","tags":[],"variants":{"outline":"fa7b"}},"heading-off":{"name":"heading-off","category":"Text","tags":["main","text","headline","style","styling","html"],"variants":{"outline":"f13f"}},"heading":{"name":"heading","category":"Text","tags":["main","text","headline","style","styling","html"],"variants":{"outline":"ee9b"}},"headphones-off":{"name":"headphones-off","category":"Media","tags":["music","headset","audio","sound","customer"],"variants":{"outline":"ed1d"}},"headphones":{"name":"headphones","category":"Media","tags":["music","headset","audio","sound","customer"],"variants":{"outline":"eabd","filled":"fa3c"}},"headset-off":{"name":"headset-off","category":"Media","tags":["music","headphones","audio","sound","customer"],"variants":{"outline":"f3f6"}},"headset":{"name":"headset","category":"Media","tags":["music","headphones","audio","sound","customer"],"variants":{"outline":"eb90"}},"health-recognition":{"name":"health-recognition","category":"","tags":["life","doctor","healthy"],"variants":{"outline":"f1fb"}},"heart-bitcoin":{"name":"heart-bitcoin","category":"","tags":[],"variants":{"outline":"ff3b"}},"heart-bolt":{"name":"heart-bolt","category":"","tags":[],"variants":{"outline":"fb9e"}},"heart-broken":{"name":"heart-broken","category":"Health","tags":["love","emotion","like","favorite","relationship"],"variants":{"outline":"ecba"}},"heart-cancel":{"name":"heart-cancel","category":"","tags":[],"variants":{"outline":"fb9f"}},"heart-check":{"name":"heart-check","category":"","tags":[],"variants":{"outline":"fba0"}},"heart-code":{"name":"heart-code","category":"","tags":[],"variants":{"outline":"fba1"}},"heart-cog":{"name":"heart-cog","category":"","tags":[],"variants":{"outline":"fba2"}},"heart-discount":{"name":"heart-discount","category":"","tags":[],"variants":{"outline":"fba3"}},"heart-dollar":{"name":"heart-dollar","category":"","tags":[],"variants":{"outline":"fba4"}},"heart-down":{"name":"heart-down","category":"","tags":[],"variants":{"outline":"fba5"}},"heart-exclamation":{"name":"heart-exclamation","category":"","tags":[],"variants":{"outline":"fba6"}},"heart-handshake":{"name":"heart-handshake","category":"","tags":["support","care","friends","couple","relation"],"variants":{"outline":"f0f3"}},"heart-minus":{"name":"heart-minus","category":"Shapes","tags":["delete","unfavourite","remove"],"variants":{"outline":"f140"}},"heart-off":{"name":"heart-off","category":"Shapes","tags":["love","emotion","like","favorite","relationship"],"variants":{"outline":"f141"}},"heart-pause":{"name":"heart-pause","category":"","tags":[],"variants":{"outline":"fba7"}},"heart-pin":{"name":"heart-pin","category":"","tags":[],"variants":{"outline":"fba8"}},"heart-plus":{"name":"heart-plus","category":"Shapes","tags":["add","love","favourite","like"],"variants":{"outline":"f142"}},"heart-question":{"name":"heart-question","category":"","tags":[],"variants":{"outline":"fba9"}},"heart-rate-monitor":{"name":"heart-rate-monitor","category":"Health","tags":["medical","pulse","health","hospital","healthcare"],"variants":{"outline":"ef61"}},"heart-search":{"name":"heart-search","category":"","tags":[],"variants":{"outline":"fbaa"}},"heart-share":{"name":"heart-share","category":"","tags":[],"variants":{"outline":"fbab"}},"heart-star":{"name":"heart-star","category":"","tags":[],"variants":{"outline":"fbac"}},"heart-up":{"name":"heart-up","category":"","tags":[],"variants":{"outline":"fbad"}},"heart-x":{"name":"heart-x","category":"","tags":[],"variants":{"outline":"fbae"}},"heart":{"name":"heart","category":"Shapes","tags":["love","emotion","like","favorite","relationship"],"variants":{"outline":"eabe","filled":"f67c"}},"heartbeat":{"name":"heartbeat","category":"Health","tags":["pulse","medical","ecg","cardiology","fitness","chart"],"variants":{"outline":"ef92"}},"hearts-off":{"name":"hearts-off","category":"Shapes","tags":["love","valentine","romantic","romance","marriage"],"variants":{"outline":"f3f7"}},"hearts":{"name":"hearts","category":"Shapes","tags":["love","valentine","romantic","romance","marriage"],"variants":{"outline":"f387"}},"helicopter-landing":{"name":"helicopter-landing","category":"Vehicles","tags":["pad","helipad","land","takeoff","navy","travel","aircraft","platform","fly"],"variants":{"outline":"ed8d"}},"helicopter":{"name":"helicopter","category":"Vehicles","tags":["land","takeoff","navy","travel","aircraft","platform","fly","pilot","journey","rotorcraft","hover"],"variants":{"outline":"ed8e"}},"helmet-off":{"name":"helmet-off","category":"Sport","tags":["safety","f1","racing","motorcycle","builder"],"variants":{"outline":"f143"}},"helmet":{"name":"helmet","category":"Sport","tags":["safety","f1","racing","motorcycle","builder"],"variants":{"outline":"efca"}},"help-circle":{"name":"help-circle","category":"System","tags":[],"variants":{"outline":"f91d","filled":"fa3d"}},"help-hexagon":{"name":"help-hexagon","category":"System","tags":["support","question","shape","faq","info"],"variants":{"outline":"f7a8","filled":"fa3e"}},"help-octagon":{"name":"help-octagon","category":"System","tags":["support","question","shape","faq","info"],"variants":{"outline":"f7a9","filled":"fa3f"}},"help-off":{"name":"help-off","category":"System","tags":["tooltip","assistance","advice","support"],"variants":{"outline":"f3f8"}},"help-small":{"name":"help-small","category":"System","tags":[],"variants":{"outline":"f91e"}},"help-square-rounded":{"name":"help-square-rounded","category":"System","tags":[],"variants":{"outline":"f91f","filled":"fa41"}},"help-square":{"name":"help-square","category":"System","tags":[],"variants":{"outline":"f920","filled":"fa40"}},"help-triangle":{"name":"help-triangle","category":"System","tags":[],"variants":{"outline":"f921","filled":"fa42"}},"help":{"name":"help","category":"System","tags":["tooltip","assistance","advice","support"],"variants":{"outline":"eabf"}},"hemisphere-off":{"name":"hemisphere-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa0"}},"hemisphere-plus":{"name":"hemisphere-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa1"}},"hemisphere":{"name":"hemisphere","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa2"}},"hexagon-3d":{"name":"hexagon-3d","category":"","tags":["geometry","six","dimensional","shape"],"variants":{"outline":"f4c7"}},"hexagon-letter-a":{"name":"hexagon-letter-a","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f463","filled":"fe47"}},"hexagon-letter-b":{"name":"hexagon-letter-b","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f464","filled":"fe46"}},"hexagon-letter-c":{"name":"hexagon-letter-c","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f465","filled":"fe45"}},"hexagon-letter-d":{"name":"hexagon-letter-d","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f466","filled":"fe44"}},"hexagon-letter-e":{"name":"hexagon-letter-e","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f467","filled":"fe43"}},"hexagon-letter-f":{"name":"hexagon-letter-f","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f468","filled":"fe42"}},"hexagon-letter-g":{"name":"hexagon-letter-g","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f469","filled":"fe41"}},"hexagon-letter-h":{"name":"hexagon-letter-h","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f46a","filled":"fe40"}},"hexagon-letter-i":{"name":"hexagon-letter-i","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f46b","filled":"fe3f"}},"hexagon-letter-j":{"name":"hexagon-letter-j","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f46c","filled":"fe3e"}},"hexagon-letter-k":{"name":"hexagon-letter-k","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f46d","filled":"fe3d"}},"hexagon-letter-l":{"name":"hexagon-letter-l","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f46e","filled":"fe3c"}},"hexagon-letter-m":{"name":"hexagon-letter-m","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f46f","filled":"fe3b"}},"hexagon-letter-n":{"name":"hexagon-letter-n","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f470","filled":"fe3a"}},"hexagon-letter-o":{"name":"hexagon-letter-o","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f471","filled":"fe39"}},"hexagon-letter-p":{"name":"hexagon-letter-p","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f472","filled":"fe38"}},"hexagon-letter-q":{"name":"hexagon-letter-q","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f473","filled":"fe37"}},"hexagon-letter-r":{"name":"hexagon-letter-r","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f474","filled":"fe36"}},"hexagon-letter-s":{"name":"hexagon-letter-s","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f475","filled":"fe35"}},"hexagon-letter-t":{"name":"hexagon-letter-t","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f476","filled":"fe34"}},"hexagon-letter-u":{"name":"hexagon-letter-u","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f477","filled":"fe33"}},"hexagon-letter-v":{"name":"hexagon-letter-v","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f4b3","filled":"fe32"}},"hexagon-letter-w":{"name":"hexagon-letter-w","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f478","filled":"fe31"}},"hexagon-letter-x":{"name":"hexagon-letter-x","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f479","filled":"fe30"}},"hexagon-letter-y":{"name":"hexagon-letter-y","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f47a","filled":"fe2f"}},"hexagon-letter-z":{"name":"hexagon-letter-z","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f47b","filled":"fe2e"}},"hexagon-minus-2":{"name":"hexagon-minus-2","category":"Shapes","tags":[],"variants":{"outline":"fc8e"}},"hexagon-minus":{"name":"hexagon-minus","category":"Shapes","tags":[],"variants":{"outline":"fc8f","filled":"fe2d"}},"hexagon-number-0":{"name":"hexagon-number-0","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f459","filled":"f74c"}},"hexagon-number-1":{"name":"hexagon-number-1","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f45a","filled":"f74d"}},"hexagon-number-2":{"name":"hexagon-number-2","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f45b","filled":"f74e"}},"hexagon-number-3":{"name":"hexagon-number-3","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f45c","filled":"f74f"}},"hexagon-number-4":{"name":"hexagon-number-4","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f45d","filled":"f750"}},"hexagon-number-5":{"name":"hexagon-number-5","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f45e","filled":"f751"}},"hexagon-number-6":{"name":"hexagon-number-6","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f45f","filled":"f752"}},"hexagon-number-7":{"name":"hexagon-number-7","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f460","filled":"f753"}},"hexagon-number-8":{"name":"hexagon-number-8","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f461","filled":"f754"}},"hexagon-number-9":{"name":"hexagon-number-9","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f462","filled":"f755"}},"hexagon-off":{"name":"hexagon-off","category":"Shapes","tags":["shape","geometric","math","2d"],"variants":{"outline":"ee9c"}},"hexagon-plus-2":{"name":"hexagon-plus-2","category":"Shapes","tags":[],"variants":{"outline":"fc90"}},"hexagon-plus":{"name":"hexagon-plus","category":"","tags":[],"variants":{"outline":"fc45","filled":"fe2c"}},"hexagon":{"name":"hexagon","category":"Shapes","tags":["shape","geometric","math","2d"],"variants":{"outline":"ec02","filled":"f67d"}},"hexagonal-prism-off":{"name":"hexagonal-prism-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa3"}},"hexagonal-prism-plus":{"name":"hexagonal-prism-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa4"}},"hexagonal-prism":{"name":"hexagonal-prism","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa5"}},"hexagonal-pyramid-off":{"name":"hexagonal-pyramid-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa6"}},"hexagonal-pyramid-plus":{"name":"hexagonal-pyramid-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa7"}},"hexagonal-pyramid":{"name":"hexagonal-pyramid","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa8"}},"hexagons-off":{"name":"hexagons-off","category":"Shapes","tags":["diagram","chemistry","modules","geometric"],"variants":{"outline":"f3f9"}},"hexagons":{"name":"hexagons","category":"Shapes","tags":["diagram","chemistry","modules","geometric"],"variants":{"outline":"f09d"}},"hierarchy-2":{"name":"hierarchy-2","category":"Design","tags":["relation","above","below","status","society","important"],"variants":{"outline":"ee9d"}},"hierarchy-3":{"name":"hierarchy-3","category":"Design","tags":["relation","above","below","status","society","important"],"variants":{"outline":"f289"}},"hierarchy-off":{"name":"hierarchy-off","category":"Design","tags":["relation","above","below","status","society","important"],"variants":{"outline":"f3fa"}},"hierarchy":{"name":"hierarchy","category":"Design","tags":["relation","above","below","status","society","important"],"variants":{"outline":"ee9e"}},"highlight-off":{"name":"highlight-off","category":"Text","tags":["marker","important","highlighter","pen"],"variants":{"outline":"f144"}},"highlight":{"name":"highlight","category":"Text","tags":["marker","important","highlighter","pen"],"variants":{"outline":"ef3f"}},"history-off":{"name":"history-off","category":"System","tags":["search","see","past","card","website"],"variants":{"outline":"f3fb"}},"history-toggle":{"name":"history-toggle","category":"","tags":["on","off","control","interface"],"variants":{"outline":"f1fc"}},"history":{"name":"history","category":"System","tags":["search","see","past","card","website"],"variants":{"outline":"ebea"}},"home-2":{"name":"home-2","category":"Buildings","tags":["house","dashboard","living","building"],"variants":{"outline":"eac0"}},"home-bitcoin":{"name":"home-bitcoin","category":"","tags":[],"variants":{"outline":"ff3a"}},"home-bolt":{"name":"home-bolt","category":"Buildings","tags":["electrity","energy","power","lightning","energetic","house"],"variants":{"outline":"f336"}},"home-cancel":{"name":"home-cancel","category":"Buildings","tags":["delete","house","building","close"],"variants":{"outline":"f350"}},"home-check":{"name":"home-check","category":"Buildings","tags":["house","tick","mark","assure","safety"],"variants":{"outline":"f337"}},"home-cog":{"name":"home-cog","category":"Buildings","tags":["gear","house","building","settings","renovation"],"variants":{"outline":"f338"}},"home-dollar":{"name":"home-dollar","category":"Buildings","tags":["buisness","house","estate","finance","building","money"],"variants":{"outline":"f339"}},"home-dot":{"name":"home-dot","category":"Buildings","tags":["notification","alert","monitor"],"variants":{"outline":"f33a"}},"home-down":{"name":"home-down","category":"Buildings","tags":["property","estate","bottom","south","house"],"variants":{"outline":"f33b"}},"home-eco":{"name":"home-eco","category":"Buildings","tags":["ecology","energy","nature","leaf","house"],"variants":{"outline":"f351"}},"home-edit":{"name":"home-edit","category":"Buildings","tags":["house","building","renovation","estate"],"variants":{"outline":"f352"}},"home-exclamation":{"name":"home-exclamation","category":"Buildings","tags":["warning","danger","accident","house"],"variants":{"outline":"f33c"}},"home-hand":{"name":"home-hand","category":"Buildings","tags":["house","dashboard","living","building","care"],"variants":{"outline":"f504"}},"home-heart":{"name":"home-heart","category":"Buildings","tags":["love","sweet","dating","care","safety"],"variants":{"outline":"f353"}},"home-infinity":{"name":"home-infinity","category":"Buildings","tags":["house","dashboard","living","building","endless"],"variants":{"outline":"f505"}},"home-link":{"name":"home-link","category":"Buildings","tags":["address","technology","smart","internet"],"variants":{"outline":"f354"}},"home-minus":{"name":"home-minus","category":"Buildings","tags":["remove","delete","cancel","close"],"variants":{"outline":"f33d"}},"home-move":{"name":"home-move","category":"Buildings","tags":["relocation","moving","house","change","exchange"],"variants":{"outline":"f33e"}},"home-off":{"name":"home-off","category":"Buildings","tags":["house","dashboard","living","building"],"variants":{"outline":"f145"}},"home-plus":{"name":"home-plus","category":"Buildings","tags":["add","building","new","create"],"variants":{"outline":"f33f"}},"home-question":{"name":"home-question","category":"Buildings","tags":["support","help","information","ask","anwser","?"],"variants":{"outline":"f340"}},"home-ribbon":{"name":"home-ribbon","category":"Buildings","tags":["contract","certifited","achievement"],"variants":{"outline":"f355"}},"home-search":{"name":"home-search","category":"Buildings","tags":["find","estate","house","building"],"variants":{"outline":"f341"}},"home-share":{"name":"home-share","category":"Buildings","tags":["house","dashboard","living","building","network","link","connection"],"variants":{"outline":"f342"}},"home-shield":{"name":"home-shield","category":"Buildings","tags":["security","safety","secure","safe"],"variants":{"outline":"f343"}},"home-signal":{"name":"home-signal","category":"Buildings","tags":["wi-fi","communication","internet","wireless"],"variants":{"outline":"f356"}},"home-star":{"name":"home-star","category":"Buildings","tags":["best","favourite","like","house"],"variants":{"outline":"f344"}},"home-stats":{"name":"home-stats","category":"Buildings","tags":["analytics","business","finance"],"variants":{"outline":"f345"}},"home-up":{"name":"home-up","category":"Buildings","tags":["arrow","higher","house","north"],"variants":{"outline":"f346"}},"home-x":{"name":"home-x","category":"Buildings","tags":["off","sale","commerce"],"variants":{"outline":"f347"}},"home":{"name":"home","category":"Buildings","tags":["house","dashboard","living","building"],"variants":{"outline":"eac1","filled":"fe2b"}},"horse-toy":{"name":"horse-toy","category":"","tags":["baby","child","kid","rocking","fun"],"variants":{"outline":"f28a"}},"horse":{"name":"horse","category":"","tags":["equine","equestrian","stallion","mare","pony","steed","riding","hoofed-animal","horseback","thoroughbred"],"variants":{"outline":"fc46"}},"horseshoe":{"name":"horseshoe","category":"","tags":[],"variants":{"outline":"fcb7"}},"hospital-circle":{"name":"hospital-circle","category":"","tags":["medical-center","healthcare","clinic","emergency","hospital-round","health","care","medical-facility","circle-hospital","health-center"],"variants":{"outline":"fd58","filled":"fed2"}},"hospital":{"name":"hospital","category":"","tags":["medical-facility","healthcare","clinic","emergency","hospital-building","health","care","medical-center","hospital-structure","health-center"],"variants":{"outline":"fd59"}},"hotel-service":{"name":"hotel-service","category":"","tags":["food","reception","accommodation","room","bell"],"variants":{"outline":"ef80"}},"hourglass-empty":{"name":"hourglass-empty","category":"System","tags":["material","measure","time","timer","clock","sand"],"variants":{"outline":"f146"}},"hourglass-high":{"name":"hourglass-high","category":"System","tags":["simple","time","timer","clock","sand"],"variants":{"outline":"f092"}},"hourglass-low":{"name":"hourglass-low","category":"System","tags":["simple","time","timer","clock","sand"],"variants":{"outline":"f093"}},"hourglass-off":{"name":"hourglass-off","category":"System","tags":["time","timer","sand","clock"],"variants":{"outline":"f147"}},"hourglass":{"name":"hourglass","category":"System","tags":["time","timer","sand","clock"],"variants":{"outline":"ef93","filled":"f756"}},"hours-12":{"name":"hours-12","category":"System","tags":[],"variants":{"outline":"fc53"}},"hours-24":{"name":"hours-24","category":"System","tags":["clock","time","day","support","service"],"variants":{"outline":"f5e7"}},"html":{"name":"html","category":"Extensions","tags":["code","coding","file","web","programming","page"],"variants":{"outline":"f7b1"}},"http-connect":{"name":"http-connect","category":"Computers","tags":[],"variants":{"outline":"fa28"}},"http-delete":{"name":"http-delete","category":"Computers","tags":[],"variants":{"outline":"fa29"}},"http-get":{"name":"http-get","category":"Computers","tags":[],"variants":{"outline":"fa2a"}},"http-head":{"name":"http-head","category":"Computers","tags":[],"variants":{"outline":"fa2b"}},"http-options":{"name":"http-options","category":"Computers","tags":[],"variants":{"outline":"fa2c"}},"http-patch":{"name":"http-patch","category":"Computers","tags":[],"variants":{"outline":"fa2d"}},"http-post":{"name":"http-post","category":"Computers","tags":[],"variants":{"outline":"fa2e"}},"http-put":{"name":"http-put","category":"Computers","tags":[],"variants":{"outline":"fa2f"}},"http-que":{"name":"http-que","category":"Computers","tags":[],"variants":{"outline":"fa5b"}},"http-trace":{"name":"http-trace","category":"Computers","tags":[],"variants":{"outline":"fa30"}},"ice-cream-2":{"name":"ice-cream-2","category":"Food","tags":["sweet","cold","dessert","food","taste","frozen","snack","flavour","flavor","cone"],"variants":{"outline":"ee9f"}},"ice-cream-off":{"name":"ice-cream-off","category":"Food","tags":["candy","dessert","frozen","sweet"],"variants":{"outline":"f148"}},"ice-cream":{"name":"ice-cream","category":"Food","tags":["candy","dessert","frozen","sweet"],"variants":{"outline":"eac2"}},"ice-skating":{"name":"ice-skating","category":"Sport","tags":["winter","skate","sport","figure","activity","hockey"],"variants":{"outline":"efcb"}},"icons-off":{"name":"icons-off","category":"Shapes","tags":["design","image","picture"],"variants":{"outline":"f3fc"}},"icons":{"name":"icons","category":"Shapes","tags":["design","image","picture"],"variants":{"outline":"f1d4"}},"id-badge-2":{"name":"id-badge-2","category":"System","tags":["identification","pass","card","identity"],"variants":{"outline":"f076"}},"id-badge-off":{"name":"id-badge-off","category":"System","tags":["identification","pass","card","identity"],"variants":{"outline":"f3fd"}},"id-badge":{"name":"id-badge","category":"System","tags":["identification","pass","card","identity"],"variants":{"outline":"eff7"}},"id-off":{"name":"id-off","category":"System","tags":["identification","card","personal details"],"variants":{"outline":"f149"}},"id":{"name":"id","category":"System","tags":["identification","card","personal details"],"variants":{"outline":"eac3"}},"ikosaedr":{"name":"ikosaedr","category":"","tags":[],"variants":{"outline":"fec6"}},"image-in-picture":{"name":"image-in-picture","category":"","tags":[],"variants":{"outline":"fd9f"}},"inbox-off":{"name":"inbox-off","category":"","tags":["mail","gmail","email","envelope","post"],"variants":{"outline":"f14a"}},"inbox":{"name":"inbox","category":"","tags":["mail","gmail","email","envelope","post"],"variants":{"outline":"eac4"}},"indent-decrease":{"name":"indent-decrease","category":"Text","tags":["line","position","block","margin","paragraph"],"variants":{"outline":"eb91"}},"indent-increase":{"name":"indent-increase","category":"Text","tags":["line","position","block","margin","paragraph"],"variants":{"outline":"eb92"}},"infinity-off":{"name":"infinity-off","category":"Math","tags":["endless","eternity","continuum","time"],"variants":{"outline":"f3fe"}},"infinity":{"name":"infinity","category":"Math","tags":["endless","eternity","continuum","time"],"variants":{"outline":"eb69"}},"info-circle":{"name":"info-circle","category":"System","tags":["information","advice","news","tip","sign"],"variants":{"outline":"eac5","filled":"f6d8"}},"info-hexagon":{"name":"info-hexagon","category":"System","tags":["help","support","shape","information","question"],"variants":{"outline":"f7aa","filled":"fa43"}},"info-octagon":{"name":"info-octagon","category":"System","tags":["help","support","shape","information","question"],"variants":{"outline":"f7ab","filled":"fa44"}},"info-small":{"name":"info-small","category":"System","tags":[],"variants":{"outline":"f922"}},"info-square-rounded":{"name":"info-square-rounded","category":"System","tags":["help","support","shape","information","question"],"variants":{"outline":"f635","filled":"f6d9"}},"info-square":{"name":"info-square","category":"System","tags":["information","advice","news","tip","sign"],"variants":{"outline":"eac6","filled":"fa45"}},"info-triangle":{"name":"info-triangle","category":"System","tags":[],"variants":{"outline":"f923","filled":"fa46"}},"inner-shadow-bottom-left":{"name":"inner-shadow-bottom-left","category":"Design","tags":["shape","circle","down","south","west"],"variants":{"outline":"f51e","filled":"f758"}},"inner-shadow-bottom-right":{"name":"inner-shadow-bottom-right","category":"Design","tags":["shape","circle","down","south","east"],"variants":{"outline":"f51f","filled":"f759"}},"inner-shadow-bottom":{"name":"inner-shadow-bottom","category":"Design","tags":["shape","circle","down","south"],"variants":{"outline":"f520","filled":"f757"}},"inner-shadow-left":{"name":"inner-shadow-left","category":"Design","tags":["shape","circle","west"],"variants":{"outline":"f521","filled":"f75a"}},"inner-shadow-right":{"name":"inner-shadow-right","category":"Design","tags":["shape","circle","east"],"variants":{"outline":"f522","filled":"f75b"}},"inner-shadow-top-left":{"name":"inner-shadow-top-left","category":"Design","tags":["shape","circle","up","north","west"],"variants":{"outline":"f523","filled":"f75d"}},"inner-shadow-top-right":{"name":"inner-shadow-top-right","category":"Design","tags":["shape","circle","up","north","east"],"variants":{"outline":"f524","filled":"f75e"}},"inner-shadow-top":{"name":"inner-shadow-top","category":"Design","tags":["shape","circle","up","north"],"variants":{"outline":"f525","filled":"f75c"}},"input-ai":{"name":"input-ai","category":"","tags":[],"variants":{"outline":"fc5a"}},"input-check":{"name":"input-check","category":"","tags":[],"variants":{"outline":"fc5b"}},"input-search":{"name":"input-search","category":"Text","tags":["find","website","field","explore"],"variants":{"outline":"f2a2"}},"input-x":{"name":"input-x","category":"","tags":[],"variants":{"outline":"fc5c"}},"invoice":{"name":"invoice","category":"Document","tags":[],"variants":{"outline":"feab"}},"ironing-1":{"name":"ironing-1","category":"Laundry","tags":["clotches","housework","iron","smooth"],"variants":{"outline":"f2f4"}},"ironing-2":{"name":"ironing-2","category":"Laundry","tags":["clotches","housework","iron","smooth"],"variants":{"outline":"f2f5"}},"ironing-3":{"name":"ironing-3","category":"Laundry","tags":["clotches","housework","iron","smooth"],"variants":{"outline":"f2f6"}},"ironing-off":{"name":"ironing-off","category":"Laundry","tags":["clotches","housework","iron","smooth"],"variants":{"outline":"f2f7"}},"ironing-steam-off":{"name":"ironing-steam-off","category":"Laundry","tags":["clotches","housework","iron","smooth","water"],"variants":{"outline":"f2f8"}},"ironing-steam":{"name":"ironing-steam","category":"Laundry","tags":["clotches","housework","iron","smooth","water"],"variants":{"outline":"f2f9"}},"ironing":{"name":"ironing","category":"Laundry","tags":[],"variants":{"outline":"fa7c","filled":"fe2a"}},"irregular-polyhedron-off":{"name":"irregular-polyhedron-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faa9"}},"irregular-polyhedron-plus":{"name":"irregular-polyhedron-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faaa"}},"irregular-polyhedron":{"name":"irregular-polyhedron","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faab"}},"italic":{"name":"italic","category":"Text","tags":["typography","font","typeface","emphasise"],"variants":{"outline":"eb93"}},"jacket":{"name":"jacket","category":"","tags":["clotches","winter","life","coat"],"variants":{"outline":"f661"}},"jetpack":{"name":"jetpack","category":"","tags":["fly","rocket","transport","space","future"],"variants":{"outline":"f581","filled":"fe29"}},"jewish-star":{"name":"jewish-star","category":"Shapes","tags":["judaism","israel","religion","bright"],"variants":{"outline":"f3ff","filled":"f67e"}},"join-bevel":{"name":"join-bevel","category":"","tags":[],"variants":{"outline":"ff4c"}},"join-round":{"name":"join-round","category":"","tags":[],"variants":{"outline":"ff4b"}},"join-straight":{"name":"join-straight","category":"","tags":[],"variants":{"outline":"ff4a"}},"jpg":{"name":"jpg","category":"Extensions","tags":["file","format","type","document","filetype"],"variants":{"outline":"f3ac"}},"json":{"name":"json","category":"Extensions","tags":["file","document","type","format","extencion"],"variants":{"outline":"f7b2"}},"jump-rope":{"name":"jump-rope","category":"Sport","tags":["sport","fitness","workout","gym","skipping","cardio","fit","shape"],"variants":{"outline":"ed8f"}},"karate":{"name":"karate","category":"Sport","tags":["martial","art","self","defence","defend","strike","compat","oriental","fight","kick"],"variants":{"outline":"ed32"}},"kayak":{"name":"kayak","category":"Sport","tags":["water","adventure","river","camp","sport","summer","activity"],"variants":{"outline":"f1d6"}},"kerning":{"name":"kerning","category":"Text","tags":["text","editor","font","calligraphy"],"variants":{"outline":"efb8"}},"key-off":{"name":"key-off","category":"","tags":["password","login","authentication","secure"],"variants":{"outline":"f14b"}},"key":{"name":"key","category":"","tags":["password","login","authentication","secure"],"variants":{"outline":"eac7","filled":"fe28"}},"keyboard-hide":{"name":"keyboard-hide","category":"Devices","tags":["computer","laptop","device","type"],"variants":{"outline":"ec7e"}},"keyboard-off":{"name":"keyboard-off","category":"Devices","tags":["computer","laptop","device","type"],"variants":{"outline":"eea0"}},"keyboard-show":{"name":"keyboard-show","category":"Devices","tags":["computer","laptop","device","type"],"variants":{"outline":"ec7f"}},"keyboard":{"name":"keyboard","category":"Devices","tags":["computer","laptop","device","type"],"variants":{"outline":"ebd6"}},"keyframe-align-center":{"name":"keyframe-align-center","category":"Media","tags":["middle","animation","shape"],"variants":{"outline":"f582","filled":"fc30"}},"keyframe-align-horizontal":{"name":"keyframe-align-horizontal","category":"Media","tags":["animation","shape"],"variants":{"outline":"f583","filled":"fc31"}},"keyframe-align-vertical":{"name":"keyframe-align-vertical","category":"Media","tags":["animation","shape"],"variants":{"outline":"f584","filled":"fc32"}},"keyframe":{"name":"keyframe","category":"Media","tags":["animation","shape","design","align"],"variants":{"outline":"f576","filled":"fc33"}},"keyframes":{"name":"keyframes","category":"Media","tags":["animation","shape","design","align"],"variants":{"outline":"f585","filled":"fc34"}},"label-important":{"name":"label-important","category":"","tags":[],"variants":{"outline":"ff49","filled":"ff60"}},"label-off":{"name":"label-off","category":"","tags":[],"variants":{"outline":"ff39"}},"label":{"name":"label","category":"","tags":[],"variants":{"outline":"ff38","filled":"ff41"}},"ladder-off":{"name":"ladder-off","category":"","tags":["up","equipment","garden","climb","climbing"],"variants":{"outline":"f14c"}},"ladder":{"name":"ladder","category":"","tags":["up","equipment","garden","climb","climbing"],"variants":{"outline":"efe2"}},"ladle":{"name":"ladle","category":"","tags":[],"variants":{"outline":"fc14"}},"lambda":{"name":"lambda","category":"Letters","tags":["letter","alphabet","greek","math"],"variants":{"outline":"f541"}},"lamp-2":{"name":"lamp-2","category":"","tags":["light","room","decoration","electic","energy"],"variants":{"outline":"f09e"}},"lamp-off":{"name":"lamp-off","category":"","tags":["light","room","decoration","electic","energy"],"variants":{"outline":"f14d"}},"lamp":{"name":"lamp","category":"","tags":["light","room","decoration","electic","energy"],"variants":{"outline":"efab"}},"lane":{"name":"lane","category":"","tags":[],"variants":{"outline":"faf9"}},"language-hiragana":{"name":"language-hiragana","category":"Text","tags":["tongue","country","speech","speak","translate","communication","communicate","english","dialect","dictionary","word"],"variants":{"outline":"ef77"}},"language-katakana":{"name":"language-katakana","category":"Text","tags":["tongue","country","speech","speak","translate","communication","communicate","english","dialect","dictionary","word"],"variants":{"outline":"ef78"}},"language-off":{"name":"language-off","category":"Text","tags":["tongue","country","speech","speak","translate","communication","communicate","english","dialect","dictionary","word"],"variants":{"outline":"f14e"}},"language":{"name":"language","category":"Text","tags":["tongue","country","speech","speak","translate","communication","communicate","english","dialect","dictionary","word"],"variants":{"outline":"ebbe"}},"lasso-off":{"name":"lasso-off","category":"Design","tags":["cowboy","western","sheriff","man","tool","west"],"variants":{"outline":"f14f"}},"lasso-polygon":{"name":"lasso-polygon","category":"Design","tags":["geometry","adobe","tool","shape"],"variants":{"outline":"f388","filled":"ff5f"}},"lasso":{"name":"lasso","category":"Design","tags":["cowboy","western","sheriff","man","tool","west"],"variants":{"outline":"efac"}},"laurel-wreath-1":{"name":"laurel-wreath-1","category":"","tags":[],"variants":{"outline":"ff48"}},"laurel-wreath-2":{"name":"laurel-wreath-2","category":"","tags":[],"variants":{"outline":"ff47"}},"laurel-wreath-3":{"name":"laurel-wreath-3","category":"","tags":[],"variants":{"outline":"ff46"}},"laurel-wreath":{"name":"laurel-wreath","category":"","tags":[],"variants":{"outline":"ff45"}},"layers-difference":{"name":"layers-difference","category":"Design","tags":["layered-difference","layer-intersect","intersecting-layers","layer-subtract","difference","overlap","comparison","layer-blend","merge-layers","layer-comparison","stack"],"variants":{"outline":"eac8"}},"layers-intersect-2":{"name":"layers-intersect-2","category":"Design","tags":["merge","stack","graphic"],"variants":{"outline":"eff8"}},"layers-intersect":{"name":"layers-intersect","category":"Design","tags":["layered-intersection","layer-difference","intersecting","layer-overlap","intersection","intersecting-layers","layer-interaction","layer-cross","layers-crossing","layer-junction","stack"],"variants":{"outline":"eac9"}},"layers-linked":{"name":"layers-linked","category":"Design","tags":["data","network"],"variants":{"outline":"eea1"}},"layers-off":{"name":"layers-off","category":"Design","tags":["stack","document","file","pages","graphic"],"variants":{"outline":"f150"}},"layers-selected-bottom":{"name":"layers-selected-bottom","category":"Design","tags":[],"variants":{"outline":"feaa"}},"layers-selected":{"name":"layers-selected","category":"Design","tags":[],"variants":{"outline":"fea9"}},"layers-subtract":{"name":"layers-subtract","category":"Design","tags":["layered-subtraction","layer-removal","remove-layer","subtract-layers","subtracting","layer-reduction","layer-elimination","layer-reduce","layer-removing","remove","stack"],"variants":{"outline":"eaca"}},"layers-union":{"name":"layers-union","category":"Design","tags":["stack","join"],"variants":{"outline":"eacb"}},"layout-2":{"name":"layout-2","category":"Design","tags":["grid","columns","masonry","collage"],"variants":{"outline":"eacc","filled":"fe27"}},"layout-align-bottom":{"name":"layout-align-bottom","category":"Design","tags":["position","element","design"],"variants":{"outline":"eacd","filled":"fe26"}},"layout-align-center":{"name":"layout-align-center","category":"Design","tags":["position","element","design"],"variants":{"outline":"eace","filled":"fe25"}},"layout-align-left":{"name":"layout-align-left","category":"Design","tags":["position","element","design"],"variants":{"outline":"eacf","filled":"fe24"}},"layout-align-middle":{"name":"layout-align-middle","category":"Design","tags":["position","element","design"],"variants":{"outline":"ead0","filled":"fe23"}},"layout-align-right":{"name":"layout-align-right","category":"Design","tags":["position","element","design"],"variants":{"outline":"ead1","filled":"fe22"}},"layout-align-top":{"name":"layout-align-top","category":"Design","tags":["position","element","design"],"variants":{"outline":"ead2","filled":"fe21"}},"layout-board-split":{"name":"layout-board-split","category":"Design","tags":["grid","columns","masonry","collage"],"variants":{"outline":"ef94"}},"layout-board":{"name":"layout-board","category":"Design","tags":["grid","columns","masonry","collage"],"variants":{"outline":"ef95"}},"layout-bottombar-collapse":{"name":"layout-bottombar-collapse","category":"Design","tags":["grid","aside","column","columns","menu","navigation"],"variants":{"outline":"f28b","filled":"fc35"}},"layout-bottombar-expand":{"name":"layout-bottombar-expand","category":"Design","tags":["grid","aside","column","columns","menu","navigation"],"variants":{"outline":"f28c","filled":"fc36"}},"layout-bottombar-inactive":{"name":"layout-bottombar-inactive","category":"","tags":[],"variants":{"outline":"fd45"}},"layout-bottombar":{"name":"layout-bottombar","category":"Design","tags":["position","element","design","grid","footer"],"variants":{"outline":"ead3","filled":"fc37"}},"layout-cards":{"name":"layout-cards","category":"Design","tags":["position","element","design","arrangement"],"variants":{"outline":"ec13","filled":"fe20"}},"layout-collage":{"name":"layout-collage","category":"Design","tags":["grid","dashboard","image","interface","editing"],"variants":{"outline":"f389"}},"layout-columns":{"name":"layout-columns","category":"Design","tags":["grid","column","rows"],"variants":{"outline":"ead4"}},"layout-dashboard":{"name":"layout-dashboard","category":"Design","tags":["grid","view","display","page","masonry"],"variants":{"outline":"f02c","filled":"fe1f"}},"layout-distribute-horizontal":{"name":"layout-distribute-horizontal","category":"Design","tags":["position","element","design","around"],"variants":{"outline":"ead5","filled":"fe1e"}},"layout-distribute-vertical":{"name":"layout-distribute-vertical","category":"Design","tags":["position","element","design","around"],"variants":{"outline":"ead6","filled":"fe1d"}},"layout-grid-add":{"name":"layout-grid-add","category":"Design","tags":["layout","table","network","pattern"],"variants":{"outline":"edb9"}},"layout-grid-remove":{"name":"layout-grid-remove","category":"Design","tags":[],"variants":{"outline":"fa7d"}},"layout-grid":{"name":"layout-grid","category":"Design","tags":["layout","table","network","pattern"],"variants":{"outline":"edba","filled":"fe1c"}},"layout-kanban":{"name":"layout-kanban","category":"Design","tags":["position","element","design","board","processing","task"],"variants":{"outline":"ec3f","filled":"fe1b"}},"layout-list":{"name":"layout-list","category":"Design","tags":["position","design","element","doable"],"variants":{"outline":"ec14","filled":"fe1a"}},"layout-navbar-collapse":{"name":"layout-navbar-collapse","category":"Design","tags":["grid","aside","column","columns","menu","navigation"],"variants":{"outline":"f28d","filled":"fc38"}},"layout-navbar-expand":{"name":"layout-navbar-expand","category":"Design","tags":["grid","aside","column","columns","menu","navigation"],"variants":{"outline":"f28e","filled":"fc39"}},"layout-navbar-inactive":{"name":"layout-navbar-inactive","category":"","tags":[],"variants":{"outline":"fd46"}},"layout-navbar":{"name":"layout-navbar","category":"Design","tags":["grid","row","header"],"variants":{"outline":"ead7","filled":"fc3a"}},"layout-off":{"name":"layout-off","category":"Design","tags":["grid","columns","masonry","collage"],"variants":{"outline":"f151"}},"layout-rows":{"name":"layout-rows","category":"Design","tags":["grid","masonry","collage"],"variants":{"outline":"ead8"}},"layout-sidebar-inactive":{"name":"layout-sidebar-inactive","category":"","tags":[],"variants":{"outline":"fd47"}},"layout-sidebar-left-collapse":{"name":"layout-sidebar-left-collapse","category":"Design","tags":["grid","aside","column","columns","menu","navigation"],"variants":{"outline":"f004","filled":"fc3b"}},"layout-sidebar-left-expand":{"name":"layout-sidebar-left-expand","category":"Design","tags":["grid","aside","column","columns","menu","navigation"],"variants":{"outline":"f005","filled":"fc3c"}},"layout-sidebar-right-collapse":{"name":"layout-sidebar-right-collapse","category":"Design","tags":["grid","aside","column","columns","menu","navigation"],"variants":{"outline":"f006","filled":"fc3d"}},"layout-sidebar-right-expand":{"name":"layout-sidebar-right-expand","category":"Design","tags":["grid","aside","column","columns","menu","navigation"],"variants":{"outline":"f007","filled":"fc3e"}},"layout-sidebar-right-inactive":{"name":"layout-sidebar-right-inactive","category":"","tags":[],"variants":{"outline":"fd48"}},"layout-sidebar-right":{"name":"layout-sidebar-right","category":"Design","tags":["grid","aside","column","columns"],"variants":{"outline":"ead9","filled":"fe19"}},"layout-sidebar":{"name":"layout-sidebar","category":"Design","tags":["grid","aside","column","columns"],"variants":{"outline":"eada","filled":"fe18"}},"layout":{"name":"layout","category":"Design","tags":["grid","columns","masonry","collage"],"variants":{"outline":"eadb","filled":"fe17"}},"leaf-2":{"name":"leaf-2","category":"","tags":[],"variants":{"outline":"ff44"}},"leaf-off":{"name":"leaf-off","category":"Nature","tags":["nature","plant","tree","autumn","fall","greenery","flower","forest","garden"],"variants":{"outline":"f400"}},"leaf":{"name":"leaf","category":"Nature","tags":["nature","plant","tree","autumn","fall","greenery","flower","forest","garden"],"variants":{"outline":"ed4f"}},"lego-off":{"name":"lego-off","category":"","tags":["toy","boy","face","play"],"variants":{"outline":"f401"}},"lego":{"name":"lego","category":"","tags":["toy","boy","face","play"],"variants":{"outline":"eadc","filled":"fe16"}},"lemon-2":{"name":"lemon-2","category":"Food","tags":["fruit","citrus","lime","food","vitamin"],"variants":{"outline":"ef81"}},"lemon":{"name":"lemon","category":"Food","tags":["fruit","citrus","lime","food","vitamin","slice"],"variants":{"outline":"ef10"}},"letter-a-small":{"name":"letter-a-small","category":"Letters","tags":["a","alpha","alphabet","first","letter","initial","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcc7"}},"letter-a":{"name":"letter-a","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec50"}},"letter-b-small":{"name":"letter-b-small","category":"Letters","tags":["b","beta","second","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcc8"}},"letter-b":{"name":"letter-b","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec51"}},"letter-c-small":{"name":"letter-c-small","category":"Letters","tags":["c","charlie","third","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcc9"}},"letter-c":{"name":"letter-c","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec52"}},"letter-case-lower":{"name":"letter-case-lower","category":"Text","tags":["typography","font","text","style","content"],"variants":{"outline":"eea2"}},"letter-case-toggle":{"name":"letter-case-toggle","category":"Text","tags":["typography","font","text","style","content"],"variants":{"outline":"eea3"}},"letter-case-upper":{"name":"letter-case-upper","category":"Text","tags":["typography","font","text","style","content"],"variants":{"outline":"eea4"}},"letter-case":{"name":"letter-case","category":"Text","tags":["typography","font","text","style","content"],"variants":{"outline":"eea5"}},"letter-d-small":{"name":"letter-d-small","category":"Letters","tags":["d","delta","fourth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcca"}},"letter-d":{"name":"letter-d","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec53"}},"letter-e-small":{"name":"letter-e-small","category":"Letters","tags":["e","echo","fifth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fccb"}},"letter-e":{"name":"letter-e","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec54"}},"letter-f-small":{"name":"letter-f-small","category":"Letters","tags":["f","foxtrot","sixth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fccc"}},"letter-f":{"name":"letter-f","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec55"}},"letter-g-small":{"name":"letter-g-small","category":"Letters","tags":["g","golf","seventh","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fccd"}},"letter-g":{"name":"letter-g","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec56"}},"letter-h-small":{"name":"letter-h-small","category":"Letters","tags":["h","hotel","eighth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcce"}},"letter-h":{"name":"letter-h","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec57"}},"letter-i-small":{"name":"letter-i-small","category":"Letters","tags":["i","india","ninth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fccf"}},"letter-i":{"name":"letter-i","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec58"}},"letter-j-small":{"name":"letter-j-small","category":"Letters","tags":["j","juliett","tenth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd0"}},"letter-j":{"name":"letter-j","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec59"}},"letter-k-small":{"name":"letter-k-small","category":"Letters","tags":["k","kilo","eleventh","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd1"}},"letter-k":{"name":"letter-k","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec5a"}},"letter-l-small":{"name":"letter-l-small","category":"Letters","tags":["l","lima","twelfth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd2"}},"letter-l":{"name":"letter-l","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec5b"}},"letter-m-small":{"name":"letter-m-small","category":"Letters","tags":["m","mike","thirteenth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd3"}},"letter-m":{"name":"letter-m","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec5c"}},"letter-n-small":{"name":"letter-n-small","category":"Letters","tags":["n","november","fourteenth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd4"}},"letter-n":{"name":"letter-n","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec5d"}},"letter-o-small":{"name":"letter-o-small","category":"Letters","tags":["o","oscar","fifteenth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd5"}},"letter-o":{"name":"letter-o","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec5e"}},"letter-p-small":{"name":"letter-p-small","category":"Letters","tags":["p","papa","sixteenth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd6"}},"letter-p":{"name":"letter-p","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec5f"}},"letter-q-small":{"name":"letter-q-small","category":"Letters","tags":["q","quebec","seventeenth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd7"}},"letter-q":{"name":"letter-q","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec60"}},"letter-r-small":{"name":"letter-r-small","category":"Letters","tags":["r","romeo","eighteenth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd8"}},"letter-r":{"name":"letter-r","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec61"}},"letter-s-small":{"name":"letter-s-small","category":"Letters","tags":["s","sierra","nineteenth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcd9"}},"letter-s":{"name":"letter-s","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec62"}},"letter-spacing":{"name":"letter-spacing","category":"Text","tags":["typography","font","space","character","word"],"variants":{"outline":"eea6"}},"letter-t-small":{"name":"letter-t-small","category":"Letters","tags":["t","tango","twentieth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcda"}},"letter-t":{"name":"letter-t","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec63"}},"letter-u-small":{"name":"letter-u-small","category":"Letters","tags":["u","uniform","twenty-first","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcdb"}},"letter-u":{"name":"letter-u","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec64"}},"letter-v-small":{"name":"letter-v-small","category":"Letters","tags":["v","victor","twenty-second","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcdc"}},"letter-v":{"name":"letter-v","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec65"}},"letter-w-small":{"name":"letter-w-small","category":"Letters","tags":["w","whiskey","twenty-third","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcdd"}},"letter-w":{"name":"letter-w","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec66"}},"letter-x-small":{"name":"letter-x-small","category":"Letters","tags":["x","x-ray","twenty-fourth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcde"}},"letter-x":{"name":"letter-x","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec67"}},"letter-y-small":{"name":"letter-y-small","category":"Letters","tags":["y","yankee","twenty-fifth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fcdf"}},"letter-y":{"name":"letter-y","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec68"}},"letter-z-small":{"name":"letter-z-small","category":"Letters","tags":["z","zulu","twenty-sixth","letter","alphabet","character","typeface","glyph","script","symbol"],"variants":{"outline":"fce0"}},"letter-z":{"name":"letter-z","category":"Letters","tags":["alphabet","symbol","text","code"],"variants":{"outline":"ec69"}},"library-minus":{"name":"library-minus","category":"","tags":[],"variants":{"outline":"fd49"}},"library-photo":{"name":"library-photo","category":"","tags":[],"variants":{"outline":"fd4a"}},"library-plus":{"name":"library-plus","category":"","tags":[],"variants":{"outline":"fd4b"}},"library":{"name":"library","category":"","tags":[],"variants":{"outline":"fd4c"}},"license-off":{"name":"license-off","category":"","tags":["authorisation","permission","consent","permit","document","agree"],"variants":{"outline":"f153"}},"license":{"name":"license","category":"","tags":["authorisation","permission","consent","permit","document","agree"],"variants":{"outline":"ebc0"}},"lifebuoy-off":{"name":"lifebuoy-off","category":"","tags":["life ring","help","support"],"variants":{"outline":"f154"}},"lifebuoy":{"name":"lifebuoy","category":"","tags":["life ring","help","support"],"variants":{"outline":"eadd"}},"lighter":{"name":"lighter","category":"","tags":["fire","flame","camping","light","burn","adventure"],"variants":{"outline":"f794"}},"line-dashed":{"name":"line-dashed","category":"Design","tags":["geometric","segment","link","connection"],"variants":{"outline":"eea7"}},"line-dotted":{"name":"line-dotted","category":"Design","tags":["geometric","segment","link","connection"],"variants":{"outline":"eea8"}},"line-height":{"name":"line-height","category":"Text","tags":["space","inline","display"],"variants":{"outline":"eb94"}},"line-scan":{"name":"line-scan","category":"","tags":[],"variants":{"outline":"fcb8"}},"line":{"name":"line","category":"Design","tags":["geometric","segment","link","connection"],"variants":{"outline":"ec40"}},"link-minus":{"name":"link-minus","category":"","tags":[],"variants":{"outline":"fd16"}},"link-off":{"name":"link-off","category":"Text","tags":["zoom-filled"],"variants":{"outline":"f402"}},"link-plus":{"name":"link-plus","category":"","tags":[],"variants":{"outline":"fd17"}},"link":{"name":"link","category":"Text","tags":["zoom-filled"],"variants":{"outline":"eade"}},"list-check":{"name":"list-check","category":"Text","tags":["to-do","checklist","form","template","task","reminder","schedule","agenda"],"variants":{"outline":"eb6a"}},"list-details":{"name":"list-details","category":"Text","tags":["to-do","checklist","form","template","task","reminder","schedule","agenda"],"variants":{"outline":"ef40"}},"list-letters":{"name":"list-letters","category":"","tags":[],"variants":{"outline":"fc47"}},"list-numbers":{"name":"list-numbers","category":"Text","tags":["to-do","checklist","form","template","task","reminder","schedule","agenda"],"variants":{"outline":"ef11"}},"list-search":{"name":"list-search","category":"Text","tags":["find","agenda","shopping"],"variants":{"outline":"eea9"}},"list-tree":{"name":"list-tree","category":"","tags":[],"variants":{"outline":"fafa"}},"list":{"name":"list","category":"Text","tags":["task","unordered","bullets","agenda","shopping"],"variants":{"outline":"eb6b"}},"live-photo-off":{"name":"live-photo-off","category":"Photography","tags":["capture","photo","movement","sound","memory","image","camera"],"variants":{"outline":"f403"}},"live-photo":{"name":"live-photo","category":"Photography","tags":["capture","photo","movement","sound","memory","image","camera"],"variants":{"outline":"eadf","filled":"fed1"}},"live-view":{"name":"live-view","category":"Map","tags":["camera","preview","image","photo"],"variants":{"outline":"ec6b"}},"load-balancer":{"name":"load-balancer","category":"Computers","tags":[],"variants":{"outline":"fa5c"}},"loader-2":{"name":"loader-2","category":"System","tags":["process","download","upload","loader","loading"],"variants":{"outline":"f226"}},"loader-3":{"name":"loader-3","category":"System","tags":["process","download","upload","loader","loading"],"variants":{"outline":"f513"}},"loader-quarter":{"name":"loader-quarter","category":"System","tags":["process","download","upload","loader","loading"],"variants":{"outline":"eca2"}},"loader":{"name":"loader","category":"System","tags":["process","download","upload","loader","loading"],"variants":{"outline":"eca3"}},"location-bolt":{"name":"location-bolt","category":"","tags":[],"variants":{"outline":"fbaf"}},"location-broken":{"name":"location-broken","category":"Map","tags":["delete","map","navigation","pin"],"variants":{"outline":"f2c4"}},"location-cancel":{"name":"location-cancel","category":"","tags":[],"variants":{"outline":"fbb0"}},"location-check":{"name":"location-check","category":"","tags":[],"variants":{"outline":"fbb1"}},"location-code":{"name":"location-code","category":"","tags":[],"variants":{"outline":"fbb2"}},"location-cog":{"name":"location-cog","category":"","tags":[],"variants":{"outline":"fbb3"}},"location-discount":{"name":"location-discount","category":"","tags":[],"variants":{"outline":"fbb4"}},"location-dollar":{"name":"location-dollar","category":"","tags":[],"variants":{"outline":"fbb5"}},"location-down":{"name":"location-down","category":"","tags":[],"variants":{"outline":"fbb6"}},"location-exclamation":{"name":"location-exclamation","category":"","tags":[],"variants":{"outline":"fbb7"}},"location-heart":{"name":"location-heart","category":"","tags":[],"variants":{"outline":"fbb8"}},"location-minus":{"name":"location-minus","category":"","tags":[],"variants":{"outline":"fbb9"}},"location-off":{"name":"location-off","category":"Map","tags":["navigation","map","direction","discover","travel"],"variants":{"outline":"f155"}},"location-pause":{"name":"location-pause","category":"","tags":[],"variants":{"outline":"fbba"}},"location-pin":{"name":"location-pin","category":"","tags":[],"variants":{"outline":"fbbb"}},"location-plus":{"name":"location-plus","category":"","tags":[],"variants":{"outline":"fbbc"}},"location-question":{"name":"location-question","category":"","tags":[],"variants":{"outline":"fbbd"}},"location-search":{"name":"location-search","category":"","tags":[],"variants":{"outline":"fbbe"}},"location-share":{"name":"location-share","category":"","tags":[],"variants":{"outline":"fbbf"}},"location-star":{"name":"location-star","category":"","tags":[],"variants":{"outline":"fbc0"}},"location-up":{"name":"location-up","category":"","tags":[],"variants":{"outline":"fbc1"}},"location-x":{"name":"location-x","category":"","tags":[],"variants":{"outline":"fbc2"}},"location":{"name":"location","category":"Map","tags":["navigation","map","direction","discover","travel"],"variants":{"outline":"eae0","filled":"f67f"}},"lock-access-off":{"name":"lock-access-off","category":"System","tags":["block","limited","restricted","unavailable","confidential"],"variants":{"outline":"f404"}},"lock-access":{"name":"lock-access","category":"System","tags":["block","limited","restricted","unavailable","confidential"],"variants":{"outline":"eeaa"}},"lock-bitcoin":{"name":"lock-bitcoin","category":"","tags":[],"variants":{"outline":"ff37"}},"lock-bolt":{"name":"lock-bolt","category":"System","tags":[],"variants":{"outline":"f924"}},"lock-cancel":{"name":"lock-cancel","category":"System","tags":[],"variants":{"outline":"f925"}},"lock-check":{"name":"lock-check","category":"System","tags":[],"variants":{"outline":"f926"}},"lock-code":{"name":"lock-code","category":"System","tags":[],"variants":{"outline":"f927"}},"lock-cog":{"name":"lock-cog","category":"System","tags":[],"variants":{"outline":"f928"}},"lock-dollar":{"name":"lock-dollar","category":"System","tags":[],"variants":{"outline":"f929"}},"lock-down":{"name":"lock-down","category":"System","tags":[],"variants":{"outline":"f92a"}},"lock-exclamation":{"name":"lock-exclamation","category":"System","tags":[],"variants":{"outline":"f92b"}},"lock-heart":{"name":"lock-heart","category":"System","tags":[],"variants":{"outline":"f92c"}},"lock-minus":{"name":"lock-minus","category":"System","tags":[],"variants":{"outline":"f92d"}},"lock-off":{"name":"lock-off","category":"System","tags":["security","password","secure"],"variants":{"outline":"ed1e"}},"lock-open-2":{"name":"lock-open-2","category":"","tags":[],"variants":{"outline":"fea8"}},"lock-open-off":{"name":"lock-open-off","category":"System","tags":["security","password","secure","unprotected"],"variants":{"outline":"f156"}},"lock-open":{"name":"lock-open","category":"System","tags":["security","password","secure","unprotected"],"variants":{"outline":"eae1"}},"lock-pause":{"name":"lock-pause","category":"System","tags":[],"variants":{"outline":"f92e"}},"lock-pin":{"name":"lock-pin","category":"System","tags":[],"variants":{"outline":"f92f"}},"lock-plus":{"name":"lock-plus","category":"System","tags":[],"variants":{"outline":"f930"}},"lock-question":{"name":"lock-question","category":"System","tags":[],"variants":{"outline":"f931"}},"lock-search":{"name":"lock-search","category":"System","tags":[],"variants":{"outline":"f932"}},"lock-share":{"name":"lock-share","category":"System","tags":[],"variants":{"outline":"f933"}},"lock-square-rounded":{"name":"lock-square-rounded","category":"System","tags":["security","secure","locked","password","shape","safe"],"variants":{"outline":"f636","filled":"f6da"}},"lock-square":{"name":"lock-square","category":"System","tags":["privaty","safe","secure","privacy"],"variants":{"outline":"ef51"}},"lock-star":{"name":"lock-star","category":"System","tags":[],"variants":{"outline":"f934"}},"lock-up":{"name":"lock-up","category":"System","tags":[],"variants":{"outline":"f935"}},"lock-x":{"name":"lock-x","category":"System","tags":[],"variants":{"outline":"f936"}},"lock":{"name":"lock","category":"System","tags":["security","password","secure"],"variants":{"outline":"eae2","filled":"fe15"}},"logic-and":{"name":"logic-and","category":"Logic","tags":["gate","technology","electirical","it"],"variants":{"outline":"f240"}},"logic-buffer":{"name":"logic-buffer","category":"Logic","tags":["gate","technology","electirical","it"],"variants":{"outline":"f241"}},"logic-nand":{"name":"logic-nand","category":"Logic","tags":["gate","technology","electirical","it"],"variants":{"outline":"f242"}},"logic-nor":{"name":"logic-nor","category":"Logic","tags":["gate","technology","electirical","it"],"variants":{"outline":"f243"}},"logic-not":{"name":"logic-not","category":"Logic","tags":["gate","technology","electirical","it"],"variants":{"outline":"f244"}},"logic-or":{"name":"logic-or","category":"Logic","tags":["gate","technology","electirical","it"],"variants":{"outline":"f245"}},"logic-xnor":{"name":"logic-xnor","category":"Logic","tags":["gate","technology","electirical","it"],"variants":{"outline":"f246"}},"logic-xor":{"name":"logic-xor","category":"Logic","tags":["gate","technology","electirical","it"],"variants":{"outline":"f247"}},"login-2":{"name":"login-2","category":"","tags":[],"variants":{"outline":"fc76"}},"login":{"name":"login","category":"Arrows","tags":["initialize","password","enter","account","permission"],"variants":{"outline":"eba7"}},"logout-2":{"name":"logout-2","category":"System","tags":[],"variants":{"outline":"fa7e"}},"logout":{"name":"logout","category":"System","tags":["exit","shut","unplug","close"],"variants":{"outline":"eba8"}},"logs":{"name":"logs","category":"","tags":[],"variants":{"outline":"fea7"}},"lollipop-off":{"name":"lollipop-off","category":"Food","tags":["candy","food","sweet","halloween","dessert","sugar"],"variants":{"outline":"f157"}},"lollipop":{"name":"lollipop","category":"Food","tags":["candy","food","sweet","halloween","dessert","sugar"],"variants":{"outline":"efcc"}},"luggage-off":{"name":"luggage-off","category":"","tags":["travel","vacation","suitcase","bag","holiday","baggage"],"variants":{"outline":"f158"}},"luggage":{"name":"luggage","category":"","tags":["travel","vacation","suitcase","bag","holiday","baggage"],"variants":{"outline":"efad"}},"lungs-off":{"name":"lungs-off","category":"Health","tags":["anatomy","human","medical","respiratory","breathe","organ"],"variants":{"outline":"f405"}},"lungs":{"name":"lungs","category":"Health","tags":["anatomy","human","medical","respiratory","breathe","organ"],"variants":{"outline":"ef62","filled":"fe14"}},"macro-off":{"name":"macro-off","category":"Photography","tags":["video","photography","photo","camera"],"variants":{"outline":"f406"}},"macro":{"name":"macro","category":"Photography","tags":["video","photography","photo","camera"],"variants":{"outline":"eeab","filled":"fe13"}},"magnet-off":{"name":"magnet-off","category":"","tags":["magnetic field","pole","iron","attract"],"variants":{"outline":"f159"}},"magnet":{"name":"magnet","category":"","tags":["magnetic field","pole","iron","attract"],"variants":{"outline":"eae3","filled":"fe12"}},"magnetic":{"name":"magnetic","category":"","tags":[],"variants":{"outline":"fcb9"}},"mail-ai":{"name":"mail-ai","category":"Communication","tags":[],"variants":{"outline":"fa31"}},"mail-bitcoin":{"name":"mail-bitcoin","category":"","tags":[],"variants":{"outline":"ff36"}},"mail-bolt":{"name":"mail-bolt","category":"Communication","tags":[],"variants":{"outline":"f937"}},"mail-cancel":{"name":"mail-cancel","category":"Communication","tags":[],"variants":{"outline":"f938"}},"mail-check":{"name":"mail-check","category":"Communication","tags":[],"variants":{"outline":"f939"}},"mail-code":{"name":"mail-code","category":"Communication","tags":[],"variants":{"outline":"f93a"}},"mail-cog":{"name":"mail-cog","category":"Communication","tags":[],"variants":{"outline":"f93b"}},"mail-dollar":{"name":"mail-dollar","category":"Communication","tags":[],"variants":{"outline":"f93c"}},"mail-down":{"name":"mail-down","category":"Communication","tags":[],"variants":{"outline":"f93d"}},"mail-exclamation":{"name":"mail-exclamation","category":"Communication","tags":[],"variants":{"outline":"f93e"}},"mail-fast":{"name":"mail-fast","category":"Communication","tags":["send","massage","quick","delivery","speed","communication"],"variants":{"outline":"f069"}},"mail-forward":{"name":"mail-forward","category":"Communication","tags":["send","recipient","email","inbox","message"],"variants":{"outline":"eeac"}},"mail-heart":{"name":"mail-heart","category":"Communication","tags":[],"variants":{"outline":"f93f"}},"mail-minus":{"name":"mail-minus","category":"Communication","tags":[],"variants":{"outline":"f940"}},"mail-off":{"name":"mail-off","category":"Communication","tags":["inbox","gmail","email","envelope","message"],"variants":{"outline":"f15a"}},"mail-opened":{"name":"mail-opened","category":"Communication","tags":["inbox","gmail","email","envelope","message","read"],"variants":{"outline":"eae4","filled":"fa48"}},"mail-pause":{"name":"mail-pause","category":"Communication","tags":[],"variants":{"outline":"f941"}},"mail-pin":{"name":"mail-pin","category":"Communication","tags":[],"variants":{"outline":"f942"}},"mail-plus":{"name":"mail-plus","category":"Communication","tags":[],"variants":{"outline":"f943"}},"mail-question":{"name":"mail-question","category":"Communication","tags":[],"variants":{"outline":"f944"}},"mail-search":{"name":"mail-search","category":"Communication","tags":[],"variants":{"outline":"f945"}},"mail-share":{"name":"mail-share","category":"Communication","tags":[],"variants":{"outline":"f946"}},"mail-star":{"name":"mail-star","category":"Communication","tags":[],"variants":{"outline":"f947"}},"mail-up":{"name":"mail-up","category":"Communication","tags":[],"variants":{"outline":"f948"}},"mail-x":{"name":"mail-x","category":"Communication","tags":[],"variants":{"outline":"f949"}},"mail":{"name":"mail","category":"Communication","tags":["inbox","gmail","email","envelope","message"],"variants":{"outline":"eae5","filled":"fa47"}},"mailbox-off":{"name":"mailbox-off","category":"Communication","tags":["send","recipient","email","inbox","message","reply","post"],"variants":{"outline":"f15b"}},"mailbox":{"name":"mailbox","category":"Communication","tags":["send","recipient","email","inbox","message","reply","post"],"variants":{"outline":"eead"}},"man":{"name":"man","category":"","tags":["guy","boy","male","gender"],"variants":{"outline":"eae6","filled":"fe11"}},"manual-gearbox":{"name":"manual-gearbox","category":"","tags":["car","vehicle","torque","transmission","mechanics","motor","engine"],"variants":{"outline":"ed7b","filled":"fe10"}},"map-2":{"name":"map-2","category":"Map","tags":["navigation","location","travel","pin","position","marker"],"variants":{"outline":"eae7"}},"map-bolt":{"name":"map-bolt","category":"","tags":[],"variants":{"outline":"fbc3"}},"map-cancel":{"name":"map-cancel","category":"","tags":[],"variants":{"outline":"fbc4"}},"map-check":{"name":"map-check","category":"","tags":[],"variants":{"outline":"fbc5"}},"map-code":{"name":"map-code","category":"","tags":[],"variants":{"outline":"fbc6"}},"map-cog":{"name":"map-cog","category":"","tags":[],"variants":{"outline":"fbc7"}},"map-discount":{"name":"map-discount","category":"","tags":[],"variants":{"outline":"fbc8"}},"map-dollar":{"name":"map-dollar","category":"","tags":[],"variants":{"outline":"fbc9"}},"map-down":{"name":"map-down","category":"","tags":[],"variants":{"outline":"fbca"}},"map-east":{"name":"map-east","category":"Map","tags":[],"variants":{"outline":"fc5d"}},"map-exclamation":{"name":"map-exclamation","category":"","tags":[],"variants":{"outline":"fbcb"}},"map-heart":{"name":"map-heart","category":"","tags":[],"variants":{"outline":"fbcc"}},"map-minus":{"name":"map-minus","category":"","tags":[],"variants":{"outline":"fbcd"}},"map-north":{"name":"map-north","category":"Map","tags":[],"variants":{"outline":"fc5e"}},"map-off":{"name":"map-off","category":"Map","tags":["navigation","location","travel"],"variants":{"outline":"f15c"}},"map-pause":{"name":"map-pause","category":"","tags":[],"variants":{"outline":"fbce"}},"map-pin-2":{"name":"map-pin-2","category":"","tags":[],"variants":{"outline":"fc48"}},"map-pin-bolt":{"name":"map-pin-bolt","category":"Map","tags":[],"variants":{"outline":"f94a"}},"map-pin-cancel":{"name":"map-pin-cancel","category":"Map","tags":[],"variants":{"outline":"f94b"}},"map-pin-check":{"name":"map-pin-check","category":"Map","tags":[],"variants":{"outline":"f94c"}},"map-pin-code":{"name":"map-pin-code","category":"Map","tags":[],"variants":{"outline":"f94d"}},"map-pin-cog":{"name":"map-pin-cog","category":"Map","tags":[],"variants":{"outline":"f94e"}},"map-pin-dollar":{"name":"map-pin-dollar","category":"Map","tags":[],"variants":{"outline":"f94f"}},"map-pin-down":{"name":"map-pin-down","category":"Map","tags":[],"variants":{"outline":"f950"}},"map-pin-exclamation":{"name":"map-pin-exclamation","category":"Map","tags":[],"variants":{"outline":"f951"}},"map-pin-heart":{"name":"map-pin-heart","category":"Map","tags":[],"variants":{"outline":"f952"}},"map-pin-minus":{"name":"map-pin-minus","category":"Map","tags":[],"variants":{"outline":"f953"}},"map-pin-off":{"name":"map-pin-off","category":"Map","tags":["navigation","location","travel","pin","position","marker"],"variants":{"outline":"ecf3"}},"map-pin-pause":{"name":"map-pin-pause","category":"Map","tags":[],"variants":{"outline":"f954"}},"map-pin-pin":{"name":"map-pin-pin","category":"Map","tags":[],"variants":{"outline":"f955"}},"map-pin-plus":{"name":"map-pin-plus","category":"Map","tags":[],"variants":{"outline":"f956"}},"map-pin-question":{"name":"map-pin-question","category":"Map","tags":[],"variants":{"outline":"f957"}},"map-pin-search":{"name":"map-pin-search","category":"Map","tags":[],"variants":{"outline":"f958"}},"map-pin-share":{"name":"map-pin-share","category":"Map","tags":["location","gps","pointer","marker","place","send"],"variants":{"outline":"f795"}},"map-pin-star":{"name":"map-pin-star","category":"Map","tags":[],"variants":{"outline":"f959"}},"map-pin-up":{"name":"map-pin-up","category":"Map","tags":[],"variants":{"outline":"f95a"}},"map-pin-x":{"name":"map-pin-x","category":"Map","tags":[],"variants":{"outline":"f95b"}},"map-pin":{"name":"map-pin","category":"Map","tags":["navigation","location","travel","pin","position","marker"],"variants":{"outline":"eae8","filled":"f680"}},"map-pins":{"name":"map-pins","category":"Map","tags":["place","direction","travel","destination","mark","location","address"],"variants":{"outline":"ed5e"}},"map-plus":{"name":"map-plus","category":"","tags":[],"variants":{"outline":"fbcf"}},"map-question":{"name":"map-question","category":"","tags":[],"variants":{"outline":"fbd0"}},"map-route":{"name":"map-route","category":"","tags":[],"variants":{"outline":"fc79"}},"map-search":{"name":"map-search","category":"Map","tags":["location","navigation","gps","find","pin"],"variants":{"outline":"ef82"}},"map-share":{"name":"map-share","category":"","tags":[],"variants":{"outline":"fbd1"}},"map-south":{"name":"map-south","category":"Map","tags":[],"variants":{"outline":"fc5f"}},"map-star":{"name":"map-star","category":"","tags":[],"variants":{"outline":"fbd2"}},"map-up":{"name":"map-up","category":"","tags":[],"variants":{"outline":"fbd3"}},"map-west":{"name":"map-west","category":"Map","tags":[],"variants":{"outline":"fc60"}},"map-x":{"name":"map-x","category":"","tags":[],"variants":{"outline":"fbd4"}},"map":{"name":"map","category":"Map","tags":["navigation","location","travel"],"variants":{"outline":"eae9"}},"markdown-off":{"name":"markdown-off","category":"Text","tags":["price","valuation","cost","exchange"],"variants":{"outline":"f407"}},"markdown":{"name":"markdown","category":"Text","tags":["price","valuation","cost","exchange"],"variants":{"outline":"ec41"}},"marquee-2":{"name":"marquee-2","category":"","tags":["tag","tracer","html","animation","text","graphic"],"variants":{"outline":"eeae"}},"marquee-off":{"name":"marquee-off","category":"","tags":["tag","tracer","html","animation","text","graphic"],"variants":{"outline":"f15d"}},"marquee":{"name":"marquee","category":"","tags":["tag","tracer","html","animation","text","graphic"],"variants":{"outline":"ec77"}},"mars":{"name":"mars","category":"Symbols","tags":["male"],"variants":{"outline":"ec80"}},"mask-off":{"name":"mask-off","category":"Design","tags":["edit","layer","mask","tool","design"],"variants":{"outline":"eeaf"}},"mask":{"name":"mask","category":"Design","tags":["edit","layer","mask","tool","design"],"variants":{"outline":"eeb0"}},"masks-theater-off":{"name":"masks-theater-off","category":"Map","tags":["cinema","comedy","acting","face","art"],"variants":{"outline":"f408"}},"masks-theater":{"name":"masks-theater","category":"Map","tags":["cinema","comedy","acting","face","art"],"variants":{"outline":"f263"}},"massage":{"name":"massage","category":"Health","tags":["physiotherapy","spa","relax","sports","therapy","treatment","spine"],"variants":{"outline":"eeb1"}},"matchstick":{"name":"matchstick","category":"","tags":["fire","flame","burn","spark"],"variants":{"outline":"f577"}},"math-1-divide-2":{"name":"math-1-divide-2","category":"Math","tags":["calculations","half","mathematic"],"variants":{"outline":"f4e2"}},"math-1-divide-3":{"name":"math-1-divide-3","category":"Math","tags":["calculations","mathematic","quarter"],"variants":{"outline":"f4e3"}},"math-avg":{"name":"math-avg","category":"Math","tags":["symbol"],"variants":{"outline":"f0f4"}},"math-cos":{"name":"math-cos","category":"Math","tags":["mathematic","cosinus","trigonometry","function"],"variants":{"outline":"ff1f"}},"math-ctg":{"name":"math-ctg","category":"","tags":[],"variants":{"outline":"ff35"}},"math-equal-greater":{"name":"math-equal-greater","category":"Math","tags":["mathematic","than","more","equation","sign"],"variants":{"outline":"f4e4"}},"math-equal-lower":{"name":"math-equal-lower","category":"Math","tags":["mathematic","less","than","equation","sign"],"variants":{"outline":"f4e5"}},"math-function-off":{"name":"math-function-off","category":"Math","tags":["linear","statyscics","graph"],"variants":{"outline":"f15e"}},"math-function-y":{"name":"math-function-y","category":"Math","tags":["mathematic","sign","x","expression"],"variants":{"outline":"f4e6"}},"math-function":{"name":"math-function","category":"Math","tags":["linear","statyscics","graph"],"variants":{"outline":"eeb2"}},"math-greater":{"name":"math-greater","category":"Math","tags":["mathematic","sign","expression","more"],"variants":{"outline":"f4e7"}},"math-integral-x":{"name":"math-integral-x","category":"Math","tags":["mathematic","sign","y","expression"],"variants":{"outline":"f4e8"}},"math-integral":{"name":"math-integral","category":"Math","tags":["mathematic","sign","expression"],"variants":{"outline":"f4e9"}},"math-integrals":{"name":"math-integrals","category":"Math","tags":["mathematic","sign","expression"],"variants":{"outline":"f4ea"}},"math-lower":{"name":"math-lower","category":"Math","tags":["mathematic","sign","expressionm","less"],"variants":{"outline":"f4eb"}},"math-max-min":{"name":"math-max-min","category":"","tags":[],"variants":{"outline":"fda0"}},"math-max":{"name":"math-max","category":"Math","tags":["symbol"],"variants":{"outline":"f0f5"}},"math-min":{"name":"math-min","category":"Math","tags":["symbol"],"variants":{"outline":"f0f6"}},"math-not":{"name":"math-not","category":"Math","tags":["mathematic","sign","expression"],"variants":{"outline":"f4ec"}},"math-off":{"name":"math-off","category":"Math","tags":["subject","count","plus","minus","times"],"variants":{"outline":"f409"}},"math-pi-divide-2":{"name":"math-pi-divide-2","category":"Math","tags":["mathematic","sign","expression"],"variants":{"outline":"f4ed"}},"math-pi":{"name":"math-pi","category":"Math","tags":["mathematic","sign","expression"],"variants":{"outline":"f4ee"}},"math-sec":{"name":"math-sec","category":"","tags":[],"variants":{"outline":"ff34"}},"math-sin":{"name":"math-sin","category":"Math","tags":["mathematic","sinus","trigonometry","function"],"variants":{"outline":"ff1e"}},"math-symbols":{"name":"math-symbols","category":"Math","tags":["calculator","equal","plus","multiplication","minus","math"],"variants":{"outline":"eeb3"}},"math-tg":{"name":"math-tg","category":"","tags":[],"variants":{"outline":"ff33"}},"math-x-divide-2":{"name":"math-x-divide-2","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4ef"}},"math-x-divide-y-2":{"name":"math-x-divide-y-2","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f0"}},"math-x-divide-y":{"name":"math-x-divide-y","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f1"}},"math-x-minus-x":{"name":"math-x-minus-x","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f2"}},"math-x-minus-y":{"name":"math-x-minus-y","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f3"}},"math-x-plus-x":{"name":"math-x-plus-x","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f4"}},"math-x-plus-y":{"name":"math-x-plus-y","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f5"}},"math-xy":{"name":"math-xy","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f6"}},"math-y-minus-y":{"name":"math-y-minus-y","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f7"}},"math-y-plus-y":{"name":"math-y-plus-y","category":"Math","tags":["mathematic","expression","equation"],"variants":{"outline":"f4f8"}},"math":{"name":"math","category":"Math","tags":["subject","count","plus","minus","times"],"variants":{"outline":"ebeb"}},"maximize-off":{"name":"maximize-off","category":"Media","tags":["fullscreen","maximize","expand","window","size","resize","direction"],"variants":{"outline":"f15f"}},"maximize":{"name":"maximize","category":"Media","tags":["fullscreen","maximize","expand","window","size","resize","direction"],"variants":{"outline":"eaea"}},"meat-off":{"name":"meat-off","category":"Food","tags":["food","beef","steak","chicken","sasuage","dinner"],"variants":{"outline":"f40a"}},"meat":{"name":"meat","category":"Food","tags":["food","beef","steak","chicken","sasuage","dinner"],"variants":{"outline":"ef12"}},"medal-2":{"name":"medal-2","category":"","tags":["decorate","uniform"],"variants":{"outline":"efcd"}},"medal":{"name":"medal","category":"","tags":["decorate","uniform"],"variants":{"outline":"ec78"}},"medical-cross-circle":{"name":"medical-cross-circle","category":"Map","tags":[],"variants":{"outline":"fae8"}},"medical-cross-off":{"name":"medical-cross-off","category":"Map","tags":["sign","hospital","help","indication"],"variants":{"outline":"f160"}},"medical-cross":{"name":"medical-cross","category":"Map","tags":["sign","hospital","help","indication"],"variants":{"outline":"ec2f","filled":"f681"}},"medicine-syrup":{"name":"medicine-syrup","category":"Health","tags":["bottle","pharmacy","healthcare","health","mixture","drug"],"variants":{"outline":"ef63"}},"meeple":{"name":"meeple","category":"Sport","tags":["pawn","board","game","wood"],"variants":{"outline":"f514"}},"melon":{"name":"melon","category":"Food","tags":[],"variants":{"outline":"fc7a"}},"menorah":{"name":"menorah","category":"Symbols","tags":["judaism","religion","cultures","jewish"],"variants":{"outline":"f58c"}},"menu-2":{"name":"menu-2","category":"System","tags":["bars","hamburger","navigation","burger"],"variants":{"outline":"ec42"}},"menu-3":{"name":"menu-3","category":"","tags":[],"variants":{"outline":"ff43"}},"menu-4":{"name":"menu-4","category":"","tags":[],"variants":{"outline":"ff42"}},"menu-deep":{"name":"menu-deep","category":"","tags":[],"variants":{"outline":"fafb"}},"menu-order":{"name":"menu-order","category":"System","tags":["move","arrows","up","down","south","north","bottom","top"],"variants":{"outline":"f5f5"}},"menu":{"name":"menu","category":"System","tags":["bars","hamburger","navigation","burger"],"variants":{"outline":"eaeb"}},"message-2-bolt":{"name":"message-2-bolt","category":"Communication","tags":[],"variants":{"outline":"f95c"}},"message-2-cancel":{"name":"message-2-cancel","category":"Communication","tags":[],"variants":{"outline":"f95d"}},"message-2-check":{"name":"message-2-check","category":"Communication","tags":[],"variants":{"outline":"f95e"}},"message-2-code":{"name":"message-2-code","category":"Communication","tags":["coding","programming","chat","program"],"variants":{"outline":"f012"}},"message-2-cog":{"name":"message-2-cog","category":"Communication","tags":[],"variants":{"outline":"f95f"}},"message-2-dollar":{"name":"message-2-dollar","category":"Communication","tags":[],"variants":{"outline":"f960"}},"message-2-down":{"name":"message-2-down","category":"Communication","tags":[],"variants":{"outline":"f961"}},"message-2-exclamation":{"name":"message-2-exclamation","category":"Communication","tags":[],"variants":{"outline":"f962"}},"message-2-heart":{"name":"message-2-heart","category":"Communication","tags":[],"variants":{"outline":"f963"}},"message-2-minus":{"name":"message-2-minus","category":"Communication","tags":[],"variants":{"outline":"f964"}},"message-2-off":{"name":"message-2-off","category":"Communication","tags":["comment","chat","reply","faq"],"variants":{"outline":"f40b"}},"message-2-pause":{"name":"message-2-pause","category":"Communication","tags":[],"variants":{"outline":"f965"}},"message-2-pin":{"name":"message-2-pin","category":"Communication","tags":[],"variants":{"outline":"f966"}},"message-2-plus":{"name":"message-2-plus","category":"Communication","tags":[],"variants":{"outline":"f967"}},"message-2-question":{"name":"message-2-question","category":"Communication","tags":[],"variants":{"outline":"f968"}},"message-2-search":{"name":"message-2-search","category":"Communication","tags":[],"variants":{"outline":"f969"}},"message-2-share":{"name":"message-2-share","category":"Communication","tags":["sharing","email","mail","communication","post"],"variants":{"outline":"f077"}},"message-2-star":{"name":"message-2-star","category":"Communication","tags":[],"variants":{"outline":"f96a"}},"message-2-up":{"name":"message-2-up","category":"Communication","tags":[],"variants":{"outline":"f96b"}},"message-2-x":{"name":"message-2-x","category":"Communication","tags":[],"variants":{"outline":"f96c"}},"message-2":{"name":"message-2","category":"Communication","tags":["comment","chat","reply","faq"],"variants":{"outline":"eaec"}},"message-bolt":{"name":"message-bolt","category":"Communication","tags":[],"variants":{"outline":"f96d"}},"message-cancel":{"name":"message-cancel","category":"Communication","tags":[],"variants":{"outline":"f96e"}},"message-chatbot":{"name":"message-chatbot","category":"Communication","tags":["automatic","robot","assistant","support"],"variants":{"outline":"f38a","filled":"fed0"}},"message-check":{"name":"message-check","category":"Communication","tags":[],"variants":{"outline":"f96f"}},"message-circle-bolt":{"name":"message-circle-bolt","category":"Communication","tags":[],"variants":{"outline":"f970"}},"message-circle-cancel":{"name":"message-circle-cancel","category":"Communication","tags":[],"variants":{"outline":"f971"}},"message-circle-check":{"name":"message-circle-check","category":"Communication","tags":[],"variants":{"outline":"f972"}},"message-circle-code":{"name":"message-circle-code","category":"Communication","tags":[],"variants":{"outline":"f973"}},"message-circle-cog":{"name":"message-circle-cog","category":"Communication","tags":[],"variants":{"outline":"f974"}},"message-circle-dollar":{"name":"message-circle-dollar","category":"Communication","tags":[],"variants":{"outline":"f975"}},"message-circle-down":{"name":"message-circle-down","category":"Communication","tags":[],"variants":{"outline":"f976"}},"message-circle-exclamation":{"name":"message-circle-exclamation","category":"Communication","tags":[],"variants":{"outline":"f977"}},"message-circle-heart":{"name":"message-circle-heart","category":"Communication","tags":[],"variants":{"outline":"f978"}},"message-circle-minus":{"name":"message-circle-minus","category":"Communication","tags":[],"variants":{"outline":"f979"}},"message-circle-off":{"name":"message-circle-off","category":"Communication","tags":["comment","chat","reply"],"variants":{"outline":"ed40"}},"message-circle-pause":{"name":"message-circle-pause","category":"Communication","tags":[],"variants":{"outline":"f97a"}},"message-circle-pin":{"name":"message-circle-pin","category":"Communication","tags":[],"variants":{"outline":"f97b"}},"message-circle-plus":{"name":"message-circle-plus","category":"Communication","tags":[],"variants":{"outline":"f97c"}},"message-circle-question":{"name":"message-circle-question","category":"Communication","tags":[],"variants":{"outline":"f97d"}},"message-circle-search":{"name":"message-circle-search","category":"Communication","tags":[],"variants":{"outline":"f97e"}},"message-circle-share":{"name":"message-circle-share","category":"Communication","tags":[],"variants":{"outline":"f97f"}},"message-circle-star":{"name":"message-circle-star","category":"Communication","tags":[],"variants":{"outline":"f980"}},"message-circle-up":{"name":"message-circle-up","category":"Communication","tags":[],"variants":{"outline":"f981"}},"message-circle-user":{"name":"message-circle-user","category":"","tags":[],"variants":{"outline":"fec5"}},"message-circle-x":{"name":"message-circle-x","category":"Communication","tags":[],"variants":{"outline":"f982"}},"message-circle":{"name":"message-circle","category":"Communication","tags":["comment","chat","reply"],"variants":{"outline":"eaed","filled":"fecf"}},"message-code":{"name":"message-code","category":"Communication","tags":["coding","programming","chat","program"],"variants":{"outline":"f013"}},"message-cog":{"name":"message-cog","category":"Communication","tags":[],"variants":{"outline":"f983"}},"message-dollar":{"name":"message-dollar","category":"Communication","tags":[],"variants":{"outline":"f984"}},"message-dots":{"name":"message-dots","category":"Communication","tags":["comment","chat","reply"],"variants":{"outline":"eaee"}},"message-down":{"name":"message-down","category":"Communication","tags":[],"variants":{"outline":"f985"}},"message-exclamation":{"name":"message-exclamation","category":"Communication","tags":[],"variants":{"outline":"f986"}},"message-forward":{"name":"message-forward","category":"Communication","tags":["email","mail","send","chat","communication","arrow"],"variants":{"outline":"f28f"}},"message-heart":{"name":"message-heart","category":"Communication","tags":[],"variants":{"outline":"f987"}},"message-language":{"name":"message-language","category":"Communication","tags":["communication","translate","alphabet","letter"],"variants":{"outline":"efae"}},"message-minus":{"name":"message-minus","category":"Communication","tags":[],"variants":{"outline":"f988"}},"message-off":{"name":"message-off","category":"Communication","tags":["comment","chat","reply","communication","conversation","faq"],"variants":{"outline":"ed41"}},"message-pause":{"name":"message-pause","category":"Communication","tags":[],"variants":{"outline":"f989"}},"message-pin":{"name":"message-pin","category":"Communication","tags":[],"variants":{"outline":"f98a"}},"message-plus":{"name":"message-plus","category":"Communication","tags":["comment","chat","reply","communication","conversation"],"variants":{"outline":"ec9a"}},"message-question":{"name":"message-question","category":"Communication","tags":[],"variants":{"outline":"f98b"}},"message-reply":{"name":"message-reply","category":"","tags":[],"variants":{"outline":"fd4d"}},"message-report":{"name":"message-report","category":"Communication","tags":["comment","chat","reply","communication","conversation"],"variants":{"outline":"ec9b","filled":"fece"}},"message-search":{"name":"message-search","category":"Communication","tags":[],"variants":{"outline":"f98c"}},"message-share":{"name":"message-share","category":"Communication","tags":["sharing","email","mail","communication","post"],"variants":{"outline":"f078"}},"message-star":{"name":"message-star","category":"Communication","tags":[],"variants":{"outline":"f98d"}},"message-up":{"name":"message-up","category":"Communication","tags":[],"variants":{"outline":"f98e"}},"message-user":{"name":"message-user","category":"","tags":[],"variants":{"outline":"fec4"}},"message-x":{"name":"message-x","category":"Communication","tags":[],"variants":{"outline":"f98f"}},"message":{"name":"message","category":"Communication","tags":["comment","chat","reply","communication","conversation","faq"],"variants":{"outline":"eaef","filled":"fecd"}},"messages-off":{"name":"messages-off","category":"Communication","tags":["chat","reply","comment","conversation","communication","faq"],"variants":{"outline":"ed42"}},"messages":{"name":"messages","category":"Communication","tags":["chat","reply","comment","conversation","communication","faq"],"variants":{"outline":"eb6c"}},"meteor-off":{"name":"meteor-off","category":"Nature","tags":["space","comet","astronomy","galaxy","cosmos"],"variants":{"outline":"f40c"}},"meteor":{"name":"meteor","category":"Nature","tags":["space","comet","astronomy","galaxy","cosmos"],"variants":{"outline":"f1fd"}},"meter-cube":{"name":"meter-cube","category":"","tags":[],"variants":{"outline":"fd7c"}},"meter-square":{"name":"meter-square","category":"","tags":[],"variants":{"outline":"fd7d"}},"metronome":{"name":"metronome","category":"","tags":[],"variants":{"outline":"fd25"}},"michelin-bib-gourmand":{"name":"michelin-bib-gourmand","category":"Food","tags":[],"variants":{"outline":"fae9"}},"michelin-star-green":{"name":"michelin-star-green","category":"Food","tags":[],"variants":{"outline":"faea"}},"michelin-star":{"name":"michelin-star","category":"Food","tags":[],"variants":{"outline":"faeb"}},"mickey":{"name":"mickey","category":"","tags":["fable","cartoon","mouse","kids"],"variants":{"outline":"f2a3","filled":"f683"}},"microphone-2-off":{"name":"microphone-2-off","category":"Media","tags":["record","sound","listen","sing"],"variants":{"outline":"f40d"}},"microphone-2":{"name":"microphone-2","category":"Media","tags":["record","sound","listen","sing"],"variants":{"outline":"ef2c"}},"microphone-off":{"name":"microphone-off","category":"Media","tags":["record","sound","listen"],"variants":{"outline":"ed16"}},"microphone":{"name":"microphone","category":"Media","tags":["record","sound","listen"],"variants":{"outline":"eaf0","filled":"fe0f"}},"microscope-off":{"name":"microscope-off","category":"Health","tags":["school","education","learning","laboratory","experimental","chemistry","biology","medical","bacteria","technology","test"],"variants":{"outline":"f40e"}},"microscope":{"name":"microscope","category":"Health","tags":["school","education","learning","laboratory","experimental","chemistry","biology","medical","bacteria","technology","test"],"variants":{"outline":"ef64"}},"microwave-off":{"name":"microwave-off","category":"Food","tags":["oven","kitchen","cooking","food","cook"],"variants":{"outline":"f264"}},"microwave":{"name":"microwave","category":"Food","tags":["oven","kitchen","cooking","food","cook"],"variants":{"outline":"f248","filled":"fe0e"}},"military-award":{"name":"military-award","category":"","tags":["achievement","honor","badge","medal","prize","army"],"variants":{"outline":"f079"}},"military-rank":{"name":"military-rank","category":"","tags":["soldier","army","private","private second class","private first class","specialist","corporal","sergeant","staff sergeant"],"variants":{"outline":"efcf","filled":"ff5e"}},"milk-off":{"name":"milk-off","category":"Food","tags":["food","drink","cow","healthy","breakfast","bottle","coffee"],"variants":{"outline":"f40f"}},"milk":{"name":"milk","category":"Food","tags":["food","drink","cow","healthy","breakfast","bottle","coffee"],"variants":{"outline":"ef13"}},"milkshake":{"name":"milkshake","category":"Food","tags":["drink","sweet","food","cocktail","cream"],"variants":{"outline":"f4c8"}},"minimize":{"name":"minimize","category":"Media","tags":["exit","close"],"variants":{"outline":"eaf1"}},"minus-vertical":{"name":"minus-vertical","category":"","tags":["subtract","less","divide"],"variants":{"outline":"eeb4"}},"minus":{"name":"minus","category":"Math","tags":["subtract","less"],"variants":{"outline":"eaf2"}},"mist-off":{"name":"mist-off","category":"Weather","tags":["weather","visibility"],"variants":{"outline":"f410"}},"mist":{"name":"mist","category":"Weather","tags":["weather","visibility"],"variants":{"outline":"ec30"}},"mobiledata-off":{"name":"mobiledata-off","category":"","tags":[],"variants":{"outline":"f9f4"}},"mobiledata":{"name":"mobiledata","category":"","tags":[],"variants":{"outline":"f9f5"}},"moneybag":{"name":"moneybag","category":"","tags":["finance","cash","dollar","currency","bank"],"variants":{"outline":"f506"}},"monkeybar":{"name":"monkeybar","category":"Maps","tags":["playground","park","monkey","bar","jungle","gym","exercise","fitness","outdoor","fun","children","kids","play","swing","jungle gym"],"variants":{"outline":"feb4"}},"mood-angry":{"name":"mood-angry","category":"Mood","tags":["mad","feeling","face","nervous"],"variants":{"outline":"f2de","filled":"ff0a"}},"mood-annoyed-2":{"name":"mood-annoyed-2","category":"Mood","tags":["appalled","agitated","upset","angry","face"],"variants":{"outline":"f2df"}},"mood-annoyed":{"name":"mood-annoyed","category":"Mood","tags":["appalled","agitated","upset","angry","face"],"variants":{"outline":"f2e0"}},"mood-bitcoin":{"name":"mood-bitcoin","category":"","tags":[],"variants":{"outline":"ff32"}},"mood-boy":{"name":"mood-boy","category":"Mood","tags":["face","emoji","emotion"],"variants":{"outline":"ed2d"}},"mood-check":{"name":"mood-check","category":"Mood","tags":["emotion","feeling","happy","tick","accept","face"],"variants":{"outline":"f7b3"}},"mood-cog":{"name":"mood-cog","category":"Mood","tags":["emotion","feeling","happy","gear","preferences","face"],"variants":{"outline":"f7b4"}},"mood-confuzed":{"name":"mood-confuzed","category":"Mood","tags":["face","emoji","emotion","frown"],"variants":{"outline":"eaf3","filled":"f7f2"}},"mood-crazy-happy":{"name":"mood-crazy-happy","category":"Mood","tags":["good","excited","cheerful","jolly","delighted","lucky"],"variants":{"outline":"ed90","filled":"ff09"}},"mood-cry":{"name":"mood-cry","category":"Mood","tags":["face","emoji","emotion","mad"],"variants":{"outline":"ecbb"}},"mood-dollar":{"name":"mood-dollar","category":"Mood","tags":["emotion","feeling","happy","face","money","coin"],"variants":{"outline":"f7b5"}},"mood-edit":{"name":"mood-edit","category":"Mood","tags":[],"variants":{"outline":"fa05"}},"mood-empty":{"name":"mood-empty","category":"Mood","tags":["face","emoji","emotion"],"variants":{"outline":"eeb5","filled":"f7f3"}},"mood-happy":{"name":"mood-happy","category":"Mood","tags":["face","emoji","emotion"],"variants":{"outline":"eaf4","filled":"f7f4"}},"mood-heart":{"name":"mood-heart","category":"Mood","tags":["emotion","feeling","happy","face","love","care","romantic"],"variants":{"outline":"f7b6"}},"mood-kid":{"name":"mood-kid","category":"Mood","tags":["face","emoji","emotion"],"variants":{"outline":"ec03","filled":"f7f5"}},"mood-look-down":{"name":"mood-look-down","category":"","tags":["downward-look","gaze-down","low-mood","sad","disheartened","dejected","downcast","downward-glance","melancholy","blue"],"variants":{"outline":"fd37"}},"mood-look-left":{"name":"mood-look-left","category":"Mood","tags":["west","face","direction"],"variants":{"outline":"f2c5"}},"mood-look-right":{"name":"mood-look-right","category":"Mood","tags":["east","face","direction"],"variants":{"outline":"f2c6"}},"mood-look-up":{"name":"mood-look-up","category":"","tags":["upward-look","gaze-up","optimistic","positive-mood","cheerful","uplifting","hopeful","skyward-glance","inspired","joyful"],"variants":{"outline":"fd38"}},"mood-minus":{"name":"mood-minus","category":"Mood","tags":["emotion","feeling","happy","face","cancel","remove","delete"],"variants":{"outline":"f7b7"}},"mood-nerd":{"name":"mood-nerd","category":"Mood","tags":["geek","face","bore"],"variants":{"outline":"f2e1"}},"mood-nervous":{"name":"mood-nervous","category":"Mood","tags":["angry","stressed","worry","frustrated"],"variants":{"outline":"ef96"}},"mood-neutral":{"name":"mood-neutral","category":"Mood","tags":["face","emoji","emotion"],"variants":{"outline":"eaf5","filled":"f7f6"}},"mood-off":{"name":"mood-off","category":"Mood","tags":["sad","happy","emoji","smiley","neutral","face"],"variants":{"outline":"f161"}},"mood-pin":{"name":"mood-pin","category":"Mood","tags":["emotion","feeling","happy","face","location","map"],"variants":{"outline":"f7b8"}},"mood-plus":{"name":"mood-plus","category":"Mood","tags":["emotion","feeling","happy","face","add","new"],"variants":{"outline":"f7b9"}},"mood-puzzled":{"name":"mood-puzzled","category":"","tags":["confused-mood","perplexed","bewildered","puzzled","uncertain","ambiguous","confounding","mystery","riddle","enigma"],"variants":{"outline":"fd39"}},"mood-sad-2":{"name":"mood-sad-2","category":"Mood","tags":["face","emoji","emotion","mad"],"variants":{"outline":"f2e2"}},"mood-sad-dizzy":{"name":"mood-sad-dizzy","category":"Mood","tags":["face","emoji","emotion","mad","displeased"],"variants":{"outline":"f2e3"}},"mood-sad-squint":{"name":"mood-sad-squint","category":"Mood","tags":["face","emoji","emotion","mad"],"variants":{"outline":"f2e4"}},"mood-sad":{"name":"mood-sad","category":"Mood","tags":["face","emoji","emotion","mad"],"variants":{"outline":"eaf6","filled":"f7f7"}},"mood-search":{"name":"mood-search","category":"Mood","tags":["emotion","feeling","happy","face","find","explore"],"variants":{"outline":"f7ba"}},"mood-share":{"name":"mood-share","category":"Mood","tags":[],"variants":{"outline":"fa06"}},"mood-sick":{"name":"mood-sick","category":"Mood","tags":["face","emoji","emotion","suffering","unhealthy"],"variants":{"outline":"f2e5"}},"mood-silence":{"name":"mood-silence","category":"Mood","tags":["face","emoji","emotion","quiet"],"variants":{"outline":"f2e6"}},"mood-sing":{"name":"mood-sing","category":"Mood","tags":["face","emoji","emotion","song","melody"],"variants":{"outline":"f2c7"}},"mood-smile-beam":{"name":"mood-smile-beam","category":"Mood","tags":["face","emoji","emotion","happy","smiley"],"variants":{"outline":"f2e7"}},"mood-smile-dizzy":{"name":"mood-smile-dizzy","category":"Mood","tags":["face","emoji","emotion","happy","smiley"],"variants":{"outline":"f2e8"}},"mood-smile":{"name":"mood-smile","category":"Mood","tags":["face","emoji","emotion"],"variants":{"outline":"eaf7","filled":"f7f8"}},"mood-surprised":{"name":"mood-surprised","category":"Mood","tags":["face","emoji","emotion"],"variants":{"outline":"ec04"}},"mood-tongue-wink-2":{"name":"mood-tongue-wink-2","category":"Mood","tags":["face","emoji","emotion","happy","joke"],"variants":{"outline":"f2e9"}},"mood-tongue-wink":{"name":"mood-tongue-wink","category":"Mood","tags":["face","emoji","emotion","happy","joke"],"variants":{"outline":"f2ea"}},"mood-tongue":{"name":"mood-tongue","category":"Mood","tags":["face","emoji","emotion"],"variants":{"outline":"eb95"}},"mood-unamused":{"name":"mood-unamused","category":"Mood","tags":["face","emoji","emotion","unfunny","unhappy","unsmilling"],"variants":{"outline":"f2eb"}},"mood-up":{"name":"mood-up","category":"Mood","tags":["emotion","feeling","happy","face","top"],"variants":{"outline":"f7bb"}},"mood-wink-2":{"name":"mood-wink-2","category":"Mood","tags":["face","emoji","emotion","smile","funny","happy"],"variants":{"outline":"f2ec"}},"mood-wink":{"name":"mood-wink","category":"Mood","tags":["face","emoji","emotion","smile","funny","happy"],"variants":{"outline":"f2ed"}},"mood-wrrr":{"name":"mood-wrrr","category":"Mood","tags":["face","emoji","emotion","disgusted"],"variants":{"outline":"f2ee","filled":"ff08"}},"mood-x":{"name":"mood-x","category":"Mood","tags":["emotion","feeling","happy","face","delete","close"],"variants":{"outline":"f7bc"}},"mood-xd":{"name":"mood-xd","category":"Mood","tags":["face","emoji","emotion","funny","happy","smiley","joke"],"variants":{"outline":"f2ef"}},"moon-2":{"name":"moon-2","category":"Weather","tags":["night","dark mode"],"variants":{"outline":"ece6"}},"moon-off":{"name":"moon-off","category":"Weather","tags":["night","dark mode"],"variants":{"outline":"f162"}},"moon-stars":{"name":"moon-stars","category":"Weather","tags":["night","dark mode"],"variants":{"outline":"ece7"}},"moon":{"name":"moon","category":"Weather","tags":["night","dark mode"],"variants":{"outline":"eaf8","filled":"f684"}},"moped":{"name":"moped","category":"Vehicles","tags":["vehicle","drive","driver","engine","motor","journey","trip"],"variants":{"outline":"ecbc"}},"motorbike":{"name":"motorbike","category":"Vehicles","tags":["engine","ride","trip","journey","road","street","vehicle","motorcycle"],"variants":{"outline":"eeb6"}},"mountain-off":{"name":"mountain-off","category":"Nature","tags":["alps","camping","mount everest","trekking"],"variants":{"outline":"f411"}},"mountain":{"name":"mountain","category":"Nature","tags":["alps","camping","mount everest","trekking"],"variants":{"outline":"ef97"}},"mouse-2":{"name":"mouse-2","category":"Devices","tags":["computer","hardware","pointer","cursor","device"],"variants":{"outline":"f1d7"}},"mouse-off":{"name":"mouse-off","category":"Devices","tags":["pointer","cursor","device"],"variants":{"outline":"f163"}},"mouse":{"name":"mouse","category":"Devices","tags":["pointer","cursor","device"],"variants":{"outline":"eaf9","filled":"fb2f"}},"moustache":{"name":"moustache","category":"","tags":["man","face","beard","male"],"variants":{"outline":"f4c9"}},"movie-off":{"name":"movie-off","category":"Media","tags":["film","video","cinema"],"variants":{"outline":"f164"}},"movie":{"name":"movie","category":"Media","tags":["film","video","cinema"],"variants":{"outline":"eafa"}},"mug-off":{"name":"mug-off","category":"Food","tags":["tea","coffee","drink","container","jug"],"variants":{"outline":"f165"}},"mug":{"name":"mug","category":"Food","tags":["tea","coffee","drink","container","jug"],"variants":{"outline":"eafb"}},"multiplier-0-5x":{"name":"multiplier-0-5x","category":"Math","tags":["count","calculate","math"],"variants":{"outline":"ef41"}},"multiplier-1-5x":{"name":"multiplier-1-5x","category":"Math","tags":["count","calculate","math"],"variants":{"outline":"ef42"}},"multiplier-1x":{"name":"multiplier-1x","category":"Math","tags":["count","calculate","math"],"variants":{"outline":"ef43"}},"multiplier-2x":{"name":"multiplier-2x","category":"Math","tags":["count","calculate","math"],"variants":{"outline":"ef44"}},"mushroom-off":{"name":"mushroom-off","category":"Food","tags":["food","vegetable","cooking","fungus","mushrooming"],"variants":{"outline":"f412"}},"mushroom":{"name":"mushroom","category":"Food","tags":["food","vegetable","cooking","fungus","mushrooming"],"variants":{"outline":"ef14","filled":"f7f9"}},"music-bolt":{"name":"music-bolt","category":"","tags":[],"variants":{"outline":"fbd5"}},"music-cancel":{"name":"music-cancel","category":"","tags":[],"variants":{"outline":"fbd6"}},"music-check":{"name":"music-check","category":"","tags":[],"variants":{"outline":"fbd7"}},"music-code":{"name":"music-code","category":"","tags":[],"variants":{"outline":"fbd8"}},"music-cog":{"name":"music-cog","category":"","tags":[],"variants":{"outline":"fbd9"}},"music-discount":{"name":"music-discount","category":"","tags":[],"variants":{"outline":"fbda"}},"music-dollar":{"name":"music-dollar","category":"","tags":[],"variants":{"outline":"fbdb"}},"music-down":{"name":"music-down","category":"","tags":[],"variants":{"outline":"fbdc"}},"music-exclamation":{"name":"music-exclamation","category":"","tags":[],"variants":{"outline":"fbdd"}},"music-heart":{"name":"music-heart","category":"","tags":[],"variants":{"outline":"fbde"}},"music-minus":{"name":"music-minus","category":"","tags":[],"variants":{"outline":"fbdf"}},"music-off":{"name":"music-off","category":"Media","tags":["sound","mp3","album","speakers","melody"],"variants":{"outline":"f166"}},"music-pause":{"name":"music-pause","category":"","tags":[],"variants":{"outline":"fbe0"}},"music-pin":{"name":"music-pin","category":"","tags":[],"variants":{"outline":"fbe1"}},"music-plus":{"name":"music-plus","category":"","tags":[],"variants":{"outline":"fbe2"}},"music-question":{"name":"music-question","category":"","tags":[],"variants":{"outline":"fbe3"}},"music-search":{"name":"music-search","category":"","tags":[],"variants":{"outline":"fbe4"}},"music-share":{"name":"music-share","category":"","tags":[],"variants":{"outline":"fbe5"}},"music-star":{"name":"music-star","category":"","tags":[],"variants":{"outline":"fbe6"}},"music-up":{"name":"music-up","category":"","tags":[],"variants":{"outline":"fbe7"}},"music-x":{"name":"music-x","category":"","tags":[],"variants":{"outline":"fbe8"}},"music":{"name":"music","category":"Media","tags":["sound","mp3","album","speakers","melody"],"variants":{"outline":"eafc"}},"navigation-bolt":{"name":"navigation-bolt","category":"","tags":[],"variants":{"outline":"fbe9"}},"navigation-cancel":{"name":"navigation-cancel","category":"","tags":[],"variants":{"outline":"fbea"}},"navigation-check":{"name":"navigation-check","category":"","tags":[],"variants":{"outline":"fbeb"}},"navigation-code":{"name":"navigation-code","category":"","tags":[],"variants":{"outline":"fbec"}},"navigation-cog":{"name":"navigation-cog","category":"","tags":[],"variants":{"outline":"fbed"}},"navigation-discount":{"name":"navigation-discount","category":"","tags":[],"variants":{"outline":"fbee"}},"navigation-dollar":{"name":"navigation-dollar","category":"","tags":[],"variants":{"outline":"fbef"}},"navigation-down":{"name":"navigation-down","category":"","tags":[],"variants":{"outline":"fbf0"}},"navigation-east":{"name":"navigation-east","category":"Map","tags":[],"variants":{"outline":"fcba"}},"navigation-exclamation":{"name":"navigation-exclamation","category":"","tags":[],"variants":{"outline":"fbf1"}},"navigation-heart":{"name":"navigation-heart","category":"","tags":[],"variants":{"outline":"fbf2"}},"navigation-minus":{"name":"navigation-minus","category":"","tags":[],"variants":{"outline":"fbf3"}},"navigation-north":{"name":"navigation-north","category":"Map","tags":[],"variants":{"outline":"fcbb"}},"navigation-off":{"name":"navigation-off","category":"Map","tags":["map","location","direction","pin","gps"],"variants":{"outline":"f413"}},"navigation-pause":{"name":"navigation-pause","category":"","tags":[],"variants":{"outline":"fbf4"}},"navigation-pin":{"name":"navigation-pin","category":"","tags":[],"variants":{"outline":"fbf5"}},"navigation-plus":{"name":"navigation-plus","category":"","tags":[],"variants":{"outline":"fbf6"}},"navigation-question":{"name":"navigation-question","category":"","tags":[],"variants":{"outline":"fbf7"}},"navigation-search":{"name":"navigation-search","category":"","tags":[],"variants":{"outline":"fbf8"}},"navigation-share":{"name":"navigation-share","category":"","tags":[],"variants":{"outline":"fbf9"}},"navigation-south":{"name":"navigation-south","category":"Map","tags":[],"variants":{"outline":"fcbc"}},"navigation-star":{"name":"navigation-star","category":"","tags":[],"variants":{"outline":"fbfa"}},"navigation-top":{"name":"navigation-top","category":"Map","tags":[],"variants":{"outline":"faec"}},"navigation-up":{"name":"navigation-up","category":"","tags":[],"variants":{"outline":"fbfb"}},"navigation-west":{"name":"navigation-west","category":"Map","tags":[],"variants":{"outline":"fcbd"}},"navigation-x":{"name":"navigation-x","category":"","tags":[],"variants":{"outline":"fbfc"}},"navigation":{"name":"navigation","category":"Map","tags":["map","location","direction","pin","gps"],"variants":{"outline":"f2c8","filled":"f685"}},"needle-thread":{"name":"needle-thread","category":"","tags":["sewing","tailoring","craft","tailor"],"variants":{"outline":"f507"}},"needle":{"name":"needle","category":"","tags":["sewing","tailoring","craft","tailor"],"variants":{"outline":"f508"}},"network-off":{"name":"network-off","category":"Computers","tags":["connection","internet","communication","connect","web","signal"],"variants":{"outline":"f414"}},"network":{"name":"network","category":"Computers","tags":["connection","internet","communication","connect","web","signal"],"variants":{"outline":"f09f"}},"new-section":{"name":"new-section","category":"","tags":["add","element","component","layout","page"],"variants":{"outline":"ebc1"}},"news-off":{"name":"news-off","category":"Document","tags":["newspaper","article"],"variants":{"outline":"f167"}},"news":{"name":"news","category":"Document","tags":["newspaper","article"],"variants":{"outline":"eafd"}},"nfc-off":{"name":"nfc-off","category":"Devices","tags":["payment","nfc","cash","chip","shopping","cashless","pass","contactless"],"variants":{"outline":"f168"}},"nfc":{"name":"nfc","category":"Devices","tags":["payment","nfc","cash","chip","shopping","cashless","pass","contactless"],"variants":{"outline":"eeb7"}},"no-copyright":{"name":"no-copyright","category":"System","tags":["cancel","copy","restriction"],"variants":{"outline":"efb9"}},"no-creative-commons":{"name":"no-creative-commons","category":"System","tags":["license","cancel","copyrights"],"variants":{"outline":"efba"}},"no-derivatives":{"name":"no-derivatives","category":"System","tags":["law","license"],"variants":{"outline":"efbb"}},"north-star":{"name":"north-star","category":"Map","tags":["compas","location","point","christmas","direction"],"variants":{"outline":"f014"}},"note-off":{"name":"note-off","category":"Document","tags":["checkbox","brief","record","write","message"],"variants":{"outline":"f169"}},"note":{"name":"note","category":"Document","tags":["checkbox","brief","record","write","message"],"variants":{"outline":"eb6d"}},"notebook-off":{"name":"notebook-off","category":"Document","tags":["study","learn","diary","write","journal","page","paper","jot down"],"variants":{"outline":"f415"}},"notebook":{"name":"notebook","category":"Document","tags":["study","learn","diary","write","journal","page","paper","jot down"],"variants":{"outline":"eb96"}},"notes-off":{"name":"notes-off","category":"Document","tags":["notetaking","journal","draft","idea","to-do list"],"variants":{"outline":"f16a"}},"notes":{"name":"notes","category":"Document","tags":["notetaking","journal","draft","idea","to-do list"],"variants":{"outline":"eb6e"}},"notification-off":{"name":"notification-off","category":"System","tags":["bell","alarm","reminder","important"],"variants":{"outline":"f16b"}},"notification":{"name":"notification","category":"System","tags":["bell","alarm","reminder","important"],"variants":{"outline":"eafe"}},"number-0-small":{"name":"number-0-small","category":"Numbers","tags":["zero","nil",null,"none","naught","nought","nothing","void","zilch","zip"],"variants":{"outline":"fce1"}},"number-0":{"name":"number-0","category":"Numbers","tags":["zero","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf0"}},"number-1-small":{"name":"number-1-small","category":"Numbers","tags":["one","singular","first","unit","solitary","individual","alone","unique","sole","individualistic"],"variants":{"outline":"fce2"}},"number-1":{"name":"number-1","category":"Numbers","tags":["one","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf1"}},"number-10-small":{"name":"number-10-small","category":"Numbers","tags":["ten","decade","decuple","decad","tenfold","decenary","dec","decuplet","tenth","deca"],"variants":{"outline":"fce3"}},"number-11-small":{"name":"number-11-small","category":"Numbers","tags":["eleven","undecade","eleventh","undecuple","undecad","elevenfold","undecenary","undec","undecuplet","11th"],"variants":{"outline":"fce4"}},"number-12-small":{"name":"number-12-small","category":"Numbers","tags":["twelve","duodecade","twelfth","duodecuple","duodecad","twelvefold","duodenary","duodec","duodecuplet","12th"],"variants":{"outline":"fce5"}},"number-123":{"name":"number-123","category":"Numbers","tags":["numbers","digit","one","two","three"],"variants":{"outline":"f554"}},"number-13-small":{"name":"number-13-small","category":"Numbers","tags":["thirteen","thirteenth","tredecade","tredecuple","tredecad","thirteenfold","tredecenary","tredec","tredecuplet","13th"],"variants":{"outline":"fce6"}},"number-14-small":{"name":"number-14-small","category":"Numbers","tags":["fourteen","fourteenth","quattuordecade","quattuordecuple","quattuordecad","fourteenfold","quattuordecenary","quattuordec","quattuordecuplet","14th"],"variants":{"outline":"fce7"}},"number-15-small":{"name":"number-15-small","category":"Numbers","tags":["fifteen","fifteenth","quindecade","quindecuple","quindecad","fifteenfold","quindecenary","quindec","quindecuplet","15th"],"variants":{"outline":"fce8"}},"number-16-small":{"name":"number-16-small","category":"Numbers","tags":["sixteen","sixteenth","sexdecade","sexdecuple","sexdecad","sixteenfold","sexdecenary","sexdec","sexdecuplet","16th"],"variants":{"outline":"fce9"}},"number-17-small":{"name":"number-17-small","category":"Numbers","tags":["seventeen","seventeenth","septendecade","septendecuple","septendecad","seventeenfold","septendecenary","septendec","septendecuplet","17th"],"variants":{"outline":"fcea"}},"number-18-small":{"name":"number-18-small","category":"Numbers","tags":["eighteen","eighteenth","octodecade","octodecuple","octodecad","eighteenfold","octodecenary","octodec","octodecuplet","18th"],"variants":{"outline":"fceb"}},"number-19-small":{"name":"number-19-small","category":"Numbers","tags":["nineteen","nineteenth","novendecade","novendecuple","novendecad","nineteenfold","novendecenary","novendec","novendecuplet","19th"],"variants":{"outline":"fcec"}},"number-2-small":{"name":"number-2-small","category":"Numbers","tags":["two","pair","duo","double","twofold","dual","second","couple","dyad","binary"],"variants":{"outline":"fced"}},"number-2":{"name":"number-2","category":"Numbers","tags":["two","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf2"}},"number-20-small":{"name":"number-20-small","category":"Numbers","tags":["twenty","twentieth","vigintidecade","vigintidecuple","vigintidecad","twentyfold","vigintidecenary","vigintidec","vigintidecuplet","20th"],"variants":{"outline":"fcee"}},"number-21-small":{"name":"number-21-small","category":"Numbers","tags":["twenty-one","21st","twenty-first","viginti-uno","viginti-first","twenty","and","one","plus","21th"],"variants":{"outline":"fcef"}},"number-22-small":{"name":"number-22-small","category":"Numbers","tags":["twenty-two","22nd","twenty-second","viginti-duo","viginti-second","twenty","and","two","plus","2th2"],"variants":{"outline":"fcf0"}},"number-23-small":{"name":"number-23-small","category":"Numbers","tags":["twenty-three","23rd","twenty-third","viginti-tertio","viginti-third","twenty","and","three","plus",23],"variants":{"outline":"fcf1"}},"number-24-small":{"name":"number-24-small","category":"Numbers","tags":["twenty-four","24th","twenty-fourth","viginti-quarto","viginti-fourth","twenty","and","four","plus",24],"variants":{"outline":"fcf2"}},"number-25-small":{"name":"number-25-small","category":"Numbers","tags":["twenty-five","25th","twenty-fifth","viginti-quinto","viginti-fifth","twenty","and","five","plus",25],"variants":{"outline":"fcf3"}},"number-26-small":{"name":"number-26-small","category":"Numbers","tags":["twenty-six","26th","twenty-sixth","viginti-sexto","viginti-sixth","twenty","and","six","plus",26],"variants":{"outline":"fcf4"}},"number-27-small":{"name":"number-27-small","category":"Numbers","tags":["twenty-seven","27th","twenty-seventh","viginti-septimo","viginti-seventh","twenty","and","seven","plus",27],"variants":{"outline":"fcf5"}},"number-28-small":{"name":"number-28-small","category":"Numbers","tags":["twenty-eight","28th","twenty-eighth","viginti-octavo","viginti-eighth","twenty","and","eight","plus",28],"variants":{"outline":"fcf6"}},"number-29-small":{"name":"number-29-small","category":"Numbers","tags":["twenty-nine","29th","twenty-ninth","viginti-nono","viginti-ninth","twenty","and","nine","plus",29],"variants":{"outline":"fcf7"}},"number-3-small":{"name":"number-3-small","category":"Numbers","tags":["three","trio","triplet","third","treble","triad","tertiary","threesome","triple","triangular"],"variants":{"outline":"fcf8"}},"number-3":{"name":"number-3","category":"Numbers","tags":["three","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf3"}},"number-4-small":{"name":"number-4-small","category":"Numbers","tags":["four","quartet","quadruple","tetrad","fourfold","quaternary","quadrant","quartile","quadruplet","quad"],"variants":{"outline":"fcf9"}},"number-4":{"name":"number-4","category":"Numbers","tags":["four","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf4"}},"number-5-small":{"name":"number-5-small","category":"Numbers","tags":["five","quintet","quintuple","pentad","fivefold","quinary","quint","quintuplet","fifth","penta"],"variants":{"outline":"fcfa"}},"number-5":{"name":"number-5","category":"Numbers","tags":["five","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf5"}},"number-6-small":{"name":"number-6-small","category":"Numbers","tags":["six","sextet","sextuple","hexad","sixfold","senary","sextuplet","hexagonal","sixth","hex"],"variants":{"outline":"fcfb"}},"number-6":{"name":"number-6","category":"Numbers","tags":["six","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf6"}},"number-7-small":{"name":"number-7-small","category":"Numbers","tags":["seven","septet","septuple","heptad","sevenfold","septenary","sept","septuplet","seventh","hepta"],"variants":{"outline":"fcfc"}},"number-7":{"name":"number-7","category":"Numbers","tags":["seven","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf7"}},"number-8-small":{"name":"number-8-small","category":"Numbers","tags":["eight","octet","octuple","octad","eightfold","octenary","oct","octuplet","eighth","octa"],"variants":{"outline":"fcfd"}},"number-8":{"name":"number-8","category":"Numbers","tags":["eight","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf8"}},"number-9-small":{"name":"number-9-small","category":"Numbers","tags":["nine","nonet","nonuple","ennead","ninefold","novenary","non","nonuplet","ninth","ennea"],"variants":{"outline":"fcfe"}},"number-9":{"name":"number-9","category":"Numbers","tags":["nine","maths","value","quantity","calculate","calculation","total","amount","sum","order","digit"],"variants":{"outline":"edf9"}},"number":{"name":"number","category":"Numbers","tags":["one","two","three","four","five","six","seven","eight","nine","ten","math","counting"],"variants":{"outline":"f1fe"}},"numbers":{"name":"numbers","category":"Numbers","tags":["math","counting","calculator","calculate","one","two","three","four","five"],"variants":{"outline":"f015"}},"nurse":{"name":"nurse","category":"Health","tags":["hospital","doctor","medical","woman","emergency","medicine"],"variants":{"outline":"ef65"}},"nut":{"name":"nut","category":"","tags":[],"variants":{"outline":"fc61"}},"object-scan":{"name":"object-scan","category":"","tags":[],"variants":{"outline":"fef1"}},"octagon-minus-2":{"name":"octagon-minus-2","category":"Shapes","tags":[],"variants":{"outline":"fc91"}},"octagon-minus":{"name":"octagon-minus","category":"Shapes","tags":[],"variants":{"outline":"fc92"}},"octagon-off":{"name":"octagon-off","category":"Shapes","tags":["shape","geometric","math","2d","building","government"],"variants":{"outline":"eeb8"}},"octagon-plus-2":{"name":"octagon-plus-2","category":"Shapes","tags":[],"variants":{"outline":"fc93"}},"octagon-plus":{"name":"octagon-plus","category":"Shapes","tags":[],"variants":{"outline":"fc94"}},"octagon":{"name":"octagon","category":"Shapes","tags":["shape","geometric","math","2d","building","government"],"variants":{"outline":"ecbd","filled":"f686"}},"octahedron-off":{"name":"octahedron-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faac"}},"octahedron-plus":{"name":"octahedron-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faad"}},"octahedron":{"name":"octahedron","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faae"}},"old":{"name":"old","category":"Health","tags":["senior","person","elderly","age"],"variants":{"outline":"eeb9"}},"olympics-off":{"name":"olympics-off","category":"Sport","tags":["game","play","sport","sportsman","champion","win","medal","sporting","event","competition","athlete"],"variants":{"outline":"f416"}},"olympics":{"name":"olympics","category":"Sport","tags":["game","play","sport","sportsman","champion","win","medal","sporting","event","competition","athlete"],"variants":{"outline":"eeba"}},"om":{"name":"om","category":"Symbols","tags":["hinduism","religion","hindu","symbol"],"variants":{"outline":"f58d"}},"omega":{"name":"omega","category":"Math","tags":["alphabet","greek","symbol","final","last"],"variants":{"outline":"eb97"}},"outbound":{"name":"outbound","category":"","tags":["call","exit","telephone","out"],"variants":{"outline":"f249"}},"outlet":{"name":"outlet","category":"","tags":["socket","electricity","electrical","plug in","device"],"variants":{"outline":"ebd7"}},"oval-vertical":{"name":"oval-vertical","category":"Shapes","tags":["shape","graphic","circle"],"variants":{"outline":"f02d","filled":"f688"}},"oval":{"name":"oval","category":"Shapes","tags":["shape","graphic","egg","circle","zero"],"variants":{"outline":"f02e","filled":"f687"}},"overline":{"name":"overline","category":"Text","tags":["above","overbar","overscore","horizontal"],"variants":{"outline":"eebb"}},"package-export":{"name":"package-export","category":"","tags":["npm","box","container","delivery","logistic"],"variants":{"outline":"f07a"}},"package-import":{"name":"package-import","category":"","tags":["npm","box","container","delivery","shipping","courier"],"variants":{"outline":"f07b"}},"package-off":{"name":"package-off","category":"E-commerce","tags":["npm","box","container"],"variants":{"outline":"f16c"}},"package":{"name":"package","category":"E-commerce","tags":["npm","box","container"],"variants":{"outline":"eaff"}},"packages":{"name":"packages","category":"","tags":["delivery","boxes","storage"],"variants":{"outline":"f2c9"}},"pacman":{"name":"pacman","category":"","tags":["game","play","online","maze","eat","dot","ghost"],"variants":{"outline":"eebc"}},"page-break":{"name":"page-break","category":"Document","tags":["summary","feature","element","css"],"variants":{"outline":"ec81"}},"paint-off":{"name":"paint-off","category":"Design","tags":["brush","renovation","refurbishment","color","wall"],"variants":{"outline":"f16d"}},"paint":{"name":"paint","category":"Design","tags":["brush","renovation","refurbishment","color","wall"],"variants":{"outline":"eb00","filled":"f75f"}},"palette-off":{"name":"palette-off","category":"Design","tags":["color","paint","painter","picture","board","artist"],"variants":{"outline":"f16e"}},"palette":{"name":"palette","category":"Design","tags":["color","paint","painter","picture","board","artist"],"variants":{"outline":"eb01"}},"panorama-horizontal-off":{"name":"panorama-horizontal-off","category":"Photography","tags":["photo","picture","panoramic"],"variants":{"outline":"f417"}},"panorama-horizontal":{"name":"panorama-horizontal","category":"Photography","tags":["photo","picture","panoramic"],"variants":{"outline":"ed33","filled":"fecc"}},"panorama-vertical-off":{"name":"panorama-vertical-off","category":"Photography","tags":["photo","picture","panoramic"],"variants":{"outline":"f418"}},"panorama-vertical":{"name":"panorama-vertical","category":"Photography","tags":["photo","picture","panoramic"],"variants":{"outline":"ed34","filled":"fecb"}},"paper-bag-off":{"name":"paper-bag-off","category":"Food","tags":["recycle","shopping","ecology","food"],"variants":{"outline":"f16f"}},"paper-bag":{"name":"paper-bag","category":"Food","tags":["recycle","shopping","ecology","food"],"variants":{"outline":"f02f"}},"paperclip":{"name":"paperclip","category":"","tags":["attachment","annex","hold"],"variants":{"outline":"eb02"}},"parachute-off":{"name":"parachute-off","category":"Vehicles","tags":["plane","aircraft","land","float","pilot"],"variants":{"outline":"f170"}},"parachute":{"name":"parachute","category":"Vehicles","tags":["plane","aircraft","land","float","pilot"],"variants":{"outline":"ed7c"}},"parentheses-off":{"name":"parentheses-off","category":"Math","tags":["brackets","aside","punctuation","mark","insert"],"variants":{"outline":"f171"}},"parentheses":{"name":"parentheses","category":"Math","tags":["brackets","aside","punctuation","mark","insert"],"variants":{"outline":"ebd8"}},"parking-circle":{"name":"parking-circle","category":"","tags":["parking","parking-lot","circle-parking","vehicle-parking","parking-zone","parking-area","parking-circle","car-park","round-parking","circle-lot"],"variants":{"outline":"fd5a","filled":"feca"}},"parking-off":{"name":"parking-off","category":"Map","tags":["sign","car","vehicle","space"],"variants":{"outline":"f172"}},"parking":{"name":"parking","category":"Map","tags":["sign","car","vehicle","space"],"variants":{"outline":"eb03"}},"password-fingerprint":{"name":"password-fingerprint","category":"System","tags":[],"variants":{"outline":"fc7b"}},"password-mobile-phone":{"name":"password-mobile-phone","category":"System","tags":[],"variants":{"outline":"fc7c"}},"password-user":{"name":"password-user","category":"System","tags":[],"variants":{"outline":"fc7d"}},"password":{"name":"password","category":"System","tags":["lock","secure","privacy","locked","login"],"variants":{"outline":"f4ca"}},"paw-off":{"name":"paw-off","category":"","tags":["animal","dog","cat","foot","pets"],"variants":{"outline":"f419"}},"paw":{"name":"paw","category":"","tags":["animal","dog","cat","foot","pets"],"variants":{"outline":"eff9","filled":"f689"}},"paywall":{"name":"paywall","category":"","tags":[],"variants":{"outline":"fd7e"}},"pdf":{"name":"pdf","category":"Extensions","tags":["file","document","type","format","extencion"],"variants":{"outline":"f7ac"}},"peace":{"name":"peace","category":"Symbols","tags":["love","hippy","minority","opinion","equilibrium"],"variants":{"outline":"ecbe"}},"pencil-bolt":{"name":"pencil-bolt","category":"","tags":[],"variants":{"outline":"fbfd"}},"pencil-cancel":{"name":"pencil-cancel","category":"","tags":[],"variants":{"outline":"fbfe"}},"pencil-check":{"name":"pencil-check","category":"","tags":[],"variants":{"outline":"fbff"}},"pencil-code":{"name":"pencil-code","category":"","tags":[],"variants":{"outline":"fc00"}},"pencil-cog":{"name":"pencil-cog","category":"","tags":[],"variants":{"outline":"fc01"}},"pencil-discount":{"name":"pencil-discount","category":"","tags":[],"variants":{"outline":"fc02"}},"pencil-dollar":{"name":"pencil-dollar","category":"","tags":[],"variants":{"outline":"fc03"}},"pencil-down":{"name":"pencil-down","category":"","tags":[],"variants":{"outline":"fc04"}},"pencil-exclamation":{"name":"pencil-exclamation","category":"","tags":[],"variants":{"outline":"fc05"}},"pencil-heart":{"name":"pencil-heart","category":"","tags":[],"variants":{"outline":"fc06"}},"pencil-minus":{"name":"pencil-minus","category":"Design","tags":["dash","edit","marker","delete","remove"],"variants":{"outline":"f1eb"}},"pencil-off":{"name":"pencil-off","category":"Design","tags":["write","draft","edit","note"],"variants":{"outline":"f173"}},"pencil-pause":{"name":"pencil-pause","category":"","tags":[],"variants":{"outline":"fc07"}},"pencil-pin":{"name":"pencil-pin","category":"","tags":[],"variants":{"outline":"fc08"}},"pencil-plus":{"name":"pencil-plus","category":"Design","tags":["add","edit","write","create","more"],"variants":{"outline":"f1ec"}},"pencil-question":{"name":"pencil-question","category":"","tags":[],"variants":{"outline":"fc09"}},"pencil-search":{"name":"pencil-search","category":"","tags":[],"variants":{"outline":"fc0a"}},"pencil-share":{"name":"pencil-share","category":"","tags":[],"variants":{"outline":"fc0b"}},"pencil-star":{"name":"pencil-star","category":"","tags":[],"variants":{"outline":"fc0c"}},"pencil-up":{"name":"pencil-up","category":"","tags":[],"variants":{"outline":"fc0d"}},"pencil-x":{"name":"pencil-x","category":"","tags":[],"variants":{"outline":"fc0e"}},"pencil":{"name":"pencil","category":"Design","tags":["write","draft","edit","note"],"variants":{"outline":"eb04"}},"pennant-2":{"name":"pennant-2","category":"Map","tags":["flag","ship","sports","championship","mark","spot","winner"],"variants":{"outline":"f06a","filled":"f68a"}},"pennant-off":{"name":"pennant-off","category":"Map","tags":["flag","ship","sports","championship","mark","spot","winner"],"variants":{"outline":"f174"}},"pennant":{"name":"pennant","category":"Map","tags":["flag","ship","sports","championship","mark","spot","winner"],"variants":{"outline":"ed7d","filled":"f68b"}},"pentagon-minus":{"name":"pentagon-minus","category":"","tags":[],"variants":{"outline":"feb3"}},"pentagon-number-0":{"name":"pentagon-number-0","category":"Numbers","tags":[],"variants":{"outline":"fc7e"}},"pentagon-number-1":{"name":"pentagon-number-1","category":"Numbers","tags":[],"variants":{"outline":"fc7f"}},"pentagon-number-2":{"name":"pentagon-number-2","category":"Numbers","tags":[],"variants":{"outline":"fc80"}},"pentagon-number-3":{"name":"pentagon-number-3","category":"Numbers","tags":[],"variants":{"outline":"fc81"}},"pentagon-number-4":{"name":"pentagon-number-4","category":"Numbers","tags":[],"variants":{"outline":"fc82"}},"pentagon-number-5":{"name":"pentagon-number-5","category":"Numbers","tags":[],"variants":{"outline":"fc83"}},"pentagon-number-6":{"name":"pentagon-number-6","category":"Numbers","tags":[],"variants":{"outline":"fc84"}},"pentagon-number-7":{"name":"pentagon-number-7","category":"Numbers","tags":[],"variants":{"outline":"fc85"}},"pentagon-number-8":{"name":"pentagon-number-8","category":"Numbers","tags":[],"variants":{"outline":"fc86"}},"pentagon-number-9":{"name":"pentagon-number-9","category":"Numbers","tags":[],"variants":{"outline":"fc87"}},"pentagon-off":{"name":"pentagon-off","category":"Shapes","tags":["shape","figure","math","graphic","geometry","form"],"variants":{"outline":"f41a"}},"pentagon-plus":{"name":"pentagon-plus","category":"","tags":[],"variants":{"outline":"fc49"}},"pentagon-x":{"name":"pentagon-x","category":"","tags":[],"variants":{"outline":"fc88"}},"pentagon":{"name":"pentagon","category":"Shapes","tags":["shape","figure","math","graphic","geometry","form"],"variants":{"outline":"efe3","filled":"f68c"}},"pentagram":{"name":"pentagram","category":"","tags":["evil","scary","satanism","halloween"],"variants":{"outline":"f586"}},"pepper-off":{"name":"pepper-off","category":"Food","tags":["food","spice","chili","jalape\u00f1o","hot","spicy"],"variants":{"outline":"f175"}},"pepper":{"name":"pepper","category":"Food","tags":["food","spice","chili","jalape\u00f1o","hot","spicy"],"variants":{"outline":"ef15"}},"percentage-0":{"name":"percentage-0","category":"","tags":[],"variants":{"outline":"fee5"}},"percentage-10":{"name":"percentage-10","category":"","tags":[],"variants":{"outline":"fee4"}},"percentage-100":{"name":"percentage-100","category":"","tags":[],"variants":{"outline":"fee3"}},"percentage-20":{"name":"percentage-20","category":"","tags":[],"variants":{"outline":"fee2"}},"percentage-25":{"name":"percentage-25","category":"","tags":[],"variants":{"outline":"fee1"}},"percentage-30":{"name":"percentage-30","category":"","tags":[],"variants":{"outline":"fee0"}},"percentage-33":{"name":"percentage-33","category":"","tags":[],"variants":{"outline":"fedf"}},"percentage-40":{"name":"percentage-40","category":"","tags":[],"variants":{"outline":"fede"}},"percentage-50":{"name":"percentage-50","category":"","tags":[],"variants":{"outline":"fedd"}},"percentage-60":{"name":"percentage-60","category":"","tags":[],"variants":{"outline":"fedc"}},"percentage-66":{"name":"percentage-66","category":"","tags":[],"variants":{"outline":"fedb"}},"percentage-70":{"name":"percentage-70","category":"","tags":[],"variants":{"outline":"feda"}},"percentage-75":{"name":"percentage-75","category":"","tags":[],"variants":{"outline":"fed9"}},"percentage-80":{"name":"percentage-80","category":"","tags":[],"variants":{"outline":"fed8"}},"percentage-90":{"name":"percentage-90","category":"","tags":[],"variants":{"outline":"fed7"}},"percentage":{"name":"percentage","category":"Math","tags":["sign","symbol","math","economics","cash","bank account","chart","graph","diagram","statistic"],"variants":{"outline":"ecf4"}},"perfume":{"name":"perfume","category":"","tags":["spray","smell","cosmetics","beauty","scent"],"variants":{"outline":"f509"}},"perspective-off":{"name":"perspective-off","category":"Shapes","tags":["3d","perspective","transform","reshape","scale"],"variants":{"outline":"f176"}},"perspective":{"name":"perspective","category":"Shapes","tags":["3d","perspective","transform","reshape","scale"],"variants":{"outline":"eebd"}},"phone-call":{"name":"phone-call","category":"Devices","tags":["ring","mobile","conversation","answer","dial","landline"],"variants":{"outline":"eb05"}},"phone-calling":{"name":"phone-calling","category":"Devices","tags":["ring","mobile","conversation","answer","dial","landline"],"variants":{"outline":"ec43"}},"phone-check":{"name":"phone-check","category":"Devices","tags":["ring","mobile","conversation","answer","dial","landline"],"variants":{"outline":"ec05"}},"phone-incoming":{"name":"phone-incoming","category":"Devices","tags":["call","answer","mobile","landline","conversation"],"variants":{"outline":"eb06"}},"phone-off":{"name":"phone-off","category":"Devices","tags":["call","mobile","conversation","landline","answer","number"],"variants":{"outline":"ecf5"}},"phone-outgoing":{"name":"phone-outgoing","category":"Devices","tags":["call","signal","mobile","landline","conversation"],"variants":{"outline":"eb07"}},"phone-pause":{"name":"phone-pause","category":"Devices","tags":["call","mute","mobile","landline","conversation"],"variants":{"outline":"eb08"}},"phone-plus":{"name":"phone-plus","category":"Devices","tags":["call","signal","mobile","landline","conversation"],"variants":{"outline":"ec06"}},"phone-x":{"name":"phone-x","category":"Devices","tags":["ring","mobile","conversation","answer","dial","landline"],"variants":{"outline":"ec07"}},"phone":{"name":"phone","category":"Devices","tags":["call","mobile","conversation","landline","answer","number"],"variants":{"outline":"eb09","filled":"fa49"}},"photo-ai":{"name":"photo-ai","category":"Media","tags":[],"variants":{"outline":"fa32"}},"photo-bitcoin":{"name":"photo-bitcoin","category":"","tags":[],"variants":{"outline":"ff31"}},"photo-bolt":{"name":"photo-bolt","category":"Media","tags":[],"variants":{"outline":"f990"}},"photo-cancel":{"name":"photo-cancel","category":"Media","tags":["delete","gallery","image"],"variants":{"outline":"f35d"}},"photo-check":{"name":"photo-check","category":"Media","tags":["success","complete","image","gallery"],"variants":{"outline":"f35e"}},"photo-circle-minus":{"name":"photo-circle-minus","category":"Media","tags":[],"variants":{"outline":"fc62"}},"photo-circle-plus":{"name":"photo-circle-plus","category":"Media","tags":[],"variants":{"outline":"fc63"}},"photo-circle":{"name":"photo-circle","category":"","tags":[],"variants":{"outline":"fc4a"}},"photo-code":{"name":"photo-code","category":"Media","tags":[],"variants":{"outline":"f991"}},"photo-cog":{"name":"photo-cog","category":"Media","tags":[],"variants":{"outline":"f992"}},"photo-dollar":{"name":"photo-dollar","category":"Media","tags":[],"variants":{"outline":"f993"}},"photo-down":{"name":"photo-down","category":"Media","tags":["image","gallery","download","arrow","south"],"variants":{"outline":"f35f"}},"photo-edit":{"name":"photo-edit","category":"Media","tags":["image","gallery","tool","create"],"variants":{"outline":"f360"}},"photo-exclamation":{"name":"photo-exclamation","category":"Media","tags":[],"variants":{"outline":"f994"}},"photo-heart":{"name":"photo-heart","category":"Media","tags":["image","gallery","love","romance","wedding"],"variants":{"outline":"f361"}},"photo-hexagon":{"name":"photo-hexagon","category":"","tags":[],"variants":{"outline":"fc4b"}},"photo-minus":{"name":"photo-minus","category":"Media","tags":["image","gallery","delete","remove"],"variants":{"outline":"f362"}},"photo-off":{"name":"photo-off","category":"Media","tags":["image","picture","landscape","camera"],"variants":{"outline":"ecf6"}},"photo-pause":{"name":"photo-pause","category":"Media","tags":[],"variants":{"outline":"f995"}},"photo-pentagon":{"name":"photo-pentagon","category":"","tags":[],"variants":{"outline":"fc4c"}},"photo-pin":{"name":"photo-pin","category":"Media","tags":[],"variants":{"outline":"f996"}},"photo-plus":{"name":"photo-plus","category":"Media","tags":["image","gallery","add","new"],"variants":{"outline":"f363"}},"photo-question":{"name":"photo-question","category":"Media","tags":[],"variants":{"outline":"f997"}},"photo-scan":{"name":"photo-scan","category":"System","tags":["image","capture","photograph","picture","snapshot","scan-image","photogrammetry","visual-scan","picture-analysis","photo-analysis"],"variants":{"outline":"fca8"}},"photo-search":{"name":"photo-search","category":"Media","tags":["image","gallery","find","zoom"],"variants":{"outline":"f364"}},"photo-sensor-2":{"name":"photo-sensor-2","category":"Photography","tags":["focus","lens","photograpy","camera"],"variants":{"outline":"f796"}},"photo-sensor-3":{"name":"photo-sensor-3","category":"Photography","tags":["focus","lens","photograpy","camera"],"variants":{"outline":"f797"}},"photo-sensor":{"name":"photo-sensor","category":"Photography","tags":["focus","lens","photograpy","camera"],"variants":{"outline":"f798"}},"photo-share":{"name":"photo-share","category":"Media","tags":[],"variants":{"outline":"f998"}},"photo-shield":{"name":"photo-shield","category":"Media","tags":["image","gallery","safety","secure"],"variants":{"outline":"f365"}},"photo-square-rounded":{"name":"photo-square-rounded","category":"","tags":[],"variants":{"outline":"fc4d"}},"photo-star":{"name":"photo-star","category":"Media","tags":["image","gallery","favourite","best"],"variants":{"outline":"f366"}},"photo-up":{"name":"photo-up","category":"Media","tags":["image","gallery","load","send","arrow","north"],"variants":{"outline":"f38b"}},"photo-video":{"name":"photo-video","category":"","tags":[],"variants":{"outline":"fc95"}},"photo-x":{"name":"photo-x","category":"Media","tags":["image","gallery","delete","remove"],"variants":{"outline":"f367"}},"photo":{"name":"photo","category":"Media","tags":["image","picture","landscape","camera"],"variants":{"outline":"eb0a","filled":"fa4a"}},"physotherapist":{"name":"physotherapist","category":"Health","tags":["physiotherapy","spa","therapy","treatment","pain","exercise"],"variants":{"outline":"eebe"}},"piano":{"name":"piano","category":"","tags":[],"variants":{"outline":"fad3"}},"pick":{"name":"pick","category":"","tags":[],"variants":{"outline":"fafc"}},"picnic-table":{"name":"picnic-table","category":"Map","tags":["outdoor","furniture","camping","seat","park","garden","nature","wood","food"],"variants":{"outline":"fed6"}},"picture-in-picture-off":{"name":"picture-in-picture-off","category":"Media","tags":["size","photo","elements","adjust","image"],"variants":{"outline":"ed43"}},"picture-in-picture-on":{"name":"picture-in-picture-on","category":"Media","tags":["size","photo","elements","adjust","image"],"variants":{"outline":"ed44"}},"picture-in-picture-top":{"name":"picture-in-picture-top","category":"Media","tags":["browser","shape","rectangle"],"variants":{"outline":"efe4","filled":"fec2"}},"picture-in-picture":{"name":"picture-in-picture","category":"Media","tags":["size","photo","elements","adjust","image"],"variants":{"outline":"ed35","filled":"fec1"}},"pig-money":{"name":"pig-money","category":"Animals","tags":["coin","finance","saving","bank"],"variants":{"outline":"f38c"}},"pig-off":{"name":"pig-off","category":"Animals","tags":["animal","farm","pork","mud","pink","piggy","bank"],"variants":{"outline":"f177"}},"pig":{"name":"pig","category":"Animals","tags":["animal","farm","pork","mud","pink","piggy","bank"],"variants":{"outline":"ef52"}},"pilcrow-left":{"name":"pilcrow-left","category":"","tags":[],"variants":{"outline":"fd7f"}},"pilcrow-right":{"name":"pilcrow-right","category":"","tags":[],"variants":{"outline":"fd80"}},"pilcrow":{"name":"pilcrow","category":"Text","tags":["paragraph","letter","text","symbol"],"variants":{"outline":"f5f6"}},"pill-off":{"name":"pill-off","category":"Health","tags":["drug","medication","illness","sickness","doctor","prescription"],"variants":{"outline":"f178"}},"pill":{"name":"pill","category":"Health","tags":["drug","medication","illness","sickness","doctor","prescription"],"variants":{"outline":"ec44","filled":"ff07"}},"pills":{"name":"pills","category":"Health","tags":["drug","medication","illness","sickness","doctor","prescription"],"variants":{"outline":"ef66"}},"pin-end":{"name":"pin-end","category":"","tags":["pin","location-pin","map-pin","marker","place-pin","destination-pin","end-pin","point","position-pin","mark-end"],"variants":{"outline":"fd5b"}},"pin-invoke":{"name":"pin-invoke","category":"","tags":["pin","location-pin","map-pin","marker","place-pin","invoke-pin","trigger-pin","point","position-pin","invoke-mark"],"variants":{"outline":"fd5c"}},"pin":{"name":"pin","category":"Map","tags":["thing","localization","maps","clip","place","location"],"variants":{"outline":"ec9c","filled":"f68d"}},"ping-pong":{"name":"ping-pong","category":"Sport","tags":["table","tennis","ball","sport","racket"],"variants":{"outline":"f38d"}},"pinned-off":{"name":"pinned-off","category":"Map","tags":["board","attach","nail","pointed","corkboard","favourite","noticeboard"],"variants":{"outline":"ed5f"}},"pinned":{"name":"pinned","category":"Map","tags":["board","attach","nail","pointed","corkboard","favourite","noticeboard"],"variants":{"outline":"ed60","filled":"f68e"}},"pizza-off":{"name":"pizza-off","category":"Food","tags":["food","cheese","italy","pepperoni","margherita","capricciosa","rucole"],"variants":{"outline":"f179"}},"pizza":{"name":"pizza","category":"Food","tags":["food","cheese","italy","pepperoni","margherita","capricciosa","rucole"],"variants":{"outline":"edbb"}},"placeholder":{"name":"placeholder","category":"","tags":["input","form"],"variants":{"outline":"f626"}},"plane-arrival":{"name":"plane-arrival","category":"Vehicles","tags":["travel","land","journey","trip","airport","baggage","luggage"],"variants":{"outline":"eb99"}},"plane-departure":{"name":"plane-departure","category":"Vehicles","tags":["travel","take off","journey","trip","airport","baggage","luggage"],"variants":{"outline":"eb9a"}},"plane-inflight":{"name":"plane-inflight","category":"Vehicles","tags":["travel","vacation","summer","sea","ocean","skies","clouds"],"variants":{"outline":"ef98"}},"plane-off":{"name":"plane-off","category":"Vehicles","tags":["travel","journey","trip","airport","baggage","luggage"],"variants":{"outline":"f17a"}},"plane-tilt":{"name":"plane-tilt","category":"Vehicles","tags":["up","higher","north","travel"],"variants":{"outline":"f1ed"}},"plane":{"name":"plane","category":"Vehicles","tags":["travel","journey","trip","airport","baggage","luggage"],"variants":{"outline":"eb6f"}},"planet-off":{"name":"planet-off","category":"Map","tags":["earth","uranus","universe","space","galaxy","orbit","atmosphere"],"variants":{"outline":"f17b"}},"planet":{"name":"planet","category":"Map","tags":["earth","uranus","universe","space","galaxy","orbit","atmosphere"],"variants":{"outline":"ec08"}},"plant-2-off":{"name":"plant-2-off","category":"Nature","tags":["nature","green","flower","pot","tree","leaf","greenery","root","stem","seed"],"variants":{"outline":"f17c"}},"plant-2":{"name":"plant-2","category":"Nature","tags":["nature","green","flower","pot","tree","leaf","greenery","root","stem","seed"],"variants":{"outline":"ed7e"}},"plant-off":{"name":"plant-off","category":"Nature","tags":["nature","green","flower","pot","tree","leaf","greenery","root","stem","seed"],"variants":{"outline":"f17d"}},"plant":{"name":"plant","category":"Nature","tags":["nature","green","flower","pot","tree","leaf","greenery","root","stem","seed"],"variants":{"outline":"ed50"}},"play-basketball":{"name":"play-basketball","category":"Sport","tags":[],"variants":{"outline":"fa66"}},"play-card-off":{"name":"play-card-off","category":"Games","tags":["game","magic","trick","casino","entertainment","spade","heart","diamond","club","playing"],"variants":{"outline":"f17e"}},"play-card":{"name":"play-card","category":"Games","tags":["game","magic","trick","casino","entertainment","spade","heart","diamond","club","playing"],"variants":{"outline":"eebf"}},"play-football":{"name":"play-football","category":"Sport","tags":[],"variants":{"outline":"fa67"}},"play-handball":{"name":"play-handball","category":"Sport","tags":[],"variants":{"outline":"fa68"}},"play-volleyball":{"name":"play-volleyball","category":"Sport","tags":[],"variants":{"outline":"fa69"}},"player-eject":{"name":"player-eject","category":"Media","tags":["media","multimedia","music","audio","control","figures"],"variants":{"outline":"efbc","filled":"f68f"}},"player-pause":{"name":"player-pause","category":"Media","tags":["video","film","music","player","stop"],"variants":{"outline":"ed45","filled":"f690"}},"player-play":{"name":"player-play","category":"Media","tags":["start","video","film","music","player"],"variants":{"outline":"ed46","filled":"f691"}},"player-record":{"name":"player-record","category":"Media","tags":["music","song","playlist","melody","device","voice","recorder","dictation","machine"],"variants":{"outline":"ed47","filled":"f692"}},"player-skip-back":{"name":"player-skip-back","category":"Media","tags":["button","player","video","film","music","cancel","rewind","reverse"],"variants":{"outline":"ed48","filled":"f693"}},"player-skip-forward":{"name":"player-skip-forward","category":"Media","tags":["button","player","video","film","music","omit"],"variants":{"outline":"ed49","filled":"f694"}},"player-stop":{"name":"player-stop","category":"Media","tags":["music","song","playlist","melody","device","voice","silence","break"],"variants":{"outline":"ed4a","filled":"f695"}},"player-track-next":{"name":"player-track-next","category":"Media","tags":["music","forward","play","song","playlist"],"variants":{"outline":"ed4b","filled":"f696"}},"player-track-prev":{"name":"player-track-prev","category":"Media","tags":["music","forward","play","song","playlist"],"variants":{"outline":"ed4c","filled":"f697"}},"playlist-add":{"name":"playlist-add","category":"","tags":["music","spotify","new","create","library","album"],"variants":{"outline":"f008"}},"playlist-off":{"name":"playlist-off","category":"Media","tags":["music","song","artist","spotify","track","play","record"],"variants":{"outline":"f17f"}},"playlist-x":{"name":"playlist-x","category":"Media","tags":["off","delete","remove"],"variants":{"outline":"f009"}},"playlist":{"name":"playlist","category":"Media","tags":["music","song","artist","spotify","track","play","record"],"variants":{"outline":"eec0"}},"playstation-circle":{"name":"playstation-circle","category":"Devices","tags":["controller","console","shape","joystick"],"variants":{"outline":"f2ad"}},"playstation-square":{"name":"playstation-square","category":"Devices","tags":["controller","console","shape","joystick"],"variants":{"outline":"f2ae"}},"playstation-triangle":{"name":"playstation-triangle","category":"Devices","tags":["controller","console","shape","joystick"],"variants":{"outline":"f2af"}},"playstation-x":{"name":"playstation-x","category":"Devices","tags":["controller","console","shape","joystick"],"variants":{"outline":"f2b0"}},"plug-connected-x":{"name":"plug-connected-x","category":"Devices","tags":["unfasten","unplug","disconnect"],"variants":{"outline":"f0a0"}},"plug-connected":{"name":"plug-connected","category":"Devices","tags":["power","electricy","cable","socket"],"variants":{"outline":"f00a"}},"plug-off":{"name":"plug-off","category":"Devices","tags":["electricity","charger","socket","connection"],"variants":{"outline":"f180"}},"plug-x":{"name":"plug-x","category":"Devices","tags":["electricity","charger","socket","connection","discharge","end charging","charge off"],"variants":{"outline":"f0a1"}},"plug":{"name":"plug","category":"Devices","tags":["electricity","charger","socket","connection"],"variants":{"outline":"ebd9"}},"plus-equal":{"name":"plus-equal","category":"Math","tags":["math","sign","adding","equation"],"variants":{"outline":"f7ad"}},"plus-minus":{"name":"plus-minus","category":"Math","tags":["math","sign","adding","subtraction"],"variants":{"outline":"f7ae"}},"plus":{"name":"plus","category":"Math","tags":["add","create","new","+"],"variants":{"outline":"eb0b"}},"png":{"name":"png","category":"Extensions","tags":["file","format","type","document","filetype"],"variants":{"outline":"f3ad"}},"podium-off":{"name":"podium-off","category":"","tags":["speach","microphone","conference","politics","audience","presentation"],"variants":{"outline":"f41b"}},"podium":{"name":"podium","category":"","tags":["speach","microphone","conference","politics","audience","presentation"],"variants":{"outline":"f1d8"}},"point-off":{"name":"point-off","category":"","tags":["dot","label"],"variants":{"outline":"f181"}},"point":{"name":"point","category":"","tags":["dot","label"],"variants":{"outline":"eb0c","filled":"f698"}},"pointer-bolt":{"name":"pointer-bolt","category":"System","tags":[],"variants":{"outline":"f999"}},"pointer-cancel":{"name":"pointer-cancel","category":"System","tags":[],"variants":{"outline":"f99a"}},"pointer-check":{"name":"pointer-check","category":"System","tags":[],"variants":{"outline":"f99b"}},"pointer-code":{"name":"pointer-code","category":"System","tags":[],"variants":{"outline":"f99c"}},"pointer-cog":{"name":"pointer-cog","category":"System","tags":[],"variants":{"outline":"f99d"}},"pointer-dollar":{"name":"pointer-dollar","category":"System","tags":[],"variants":{"outline":"f99e"}},"pointer-down":{"name":"pointer-down","category":"System","tags":[],"variants":{"outline":"f99f"}},"pointer-exclamation":{"name":"pointer-exclamation","category":"System","tags":[],"variants":{"outline":"f9a0"}},"pointer-heart":{"name":"pointer-heart","category":"System","tags":[],"variants":{"outline":"f9a1"}},"pointer-minus":{"name":"pointer-minus","category":"System","tags":[],"variants":{"outline":"f9a2"}},"pointer-off":{"name":"pointer-off","category":"System","tags":["cursor","mouse","point","click","arrow"],"variants":{"outline":"f9a3"}},"pointer-pause":{"name":"pointer-pause","category":"System","tags":[],"variants":{"outline":"f9a4"}},"pointer-pin":{"name":"pointer-pin","category":"System","tags":[],"variants":{"outline":"f9a5"}},"pointer-plus":{"name":"pointer-plus","category":"System","tags":[],"variants":{"outline":"f9a6"}},"pointer-question":{"name":"pointer-question","category":"System","tags":[],"variants":{"outline":"f9a7"}},"pointer-search":{"name":"pointer-search","category":"System","tags":[],"variants":{"outline":"f9a8"}},"pointer-share":{"name":"pointer-share","category":"System","tags":[],"variants":{"outline":"f9a9"}},"pointer-star":{"name":"pointer-star","category":"System","tags":[],"variants":{"outline":"f9aa"}},"pointer-up":{"name":"pointer-up","category":"System","tags":[],"variants":{"outline":"f9ab"}},"pointer-x":{"name":"pointer-x","category":"System","tags":[],"variants":{"outline":"f9ac"}},"pointer":{"name":"pointer","category":"System","tags":["cursor","mouse","point","click","arrow"],"variants":{"outline":"f265","filled":"fb30"}},"pokeball-off":{"name":"pokeball-off","category":"Map","tags":["pokemon","go","catch","game","play"],"variants":{"outline":"f41c"}},"pokeball":{"name":"pokeball","category":"Map","tags":["pokemon","go","catch","game","play"],"variants":{"outline":"eec1"}},"poker-chip":{"name":"poker-chip","category":"Games","tags":["casino","game","money","gambling"],"variants":{"outline":"f515"}},"polaroid":{"name":"polaroid","category":"Photography","tags":["picture","photo","camera","polarization","develop","film","lens"],"variants":{"outline":"eec2","filled":"fa4b"}},"polygon-off":{"name":"polygon-off","category":"Design","tags":["shape","form","geometry","circle","line"],"variants":{"outline":"f182"}},"polygon":{"name":"polygon","category":"Design","tags":["shape","form","geometry","circle","line"],"variants":{"outline":"efd0"}},"poo":{"name":"poo","category":"","tags":["poop","shit","crap","toilet"],"variants":{"outline":"f258","filled":"fec9"}},"pool-off":{"name":"pool-off","category":"Sport","tags":["swim","water","swimmer","holiday","swimming","vacation","relax","sport"],"variants":{"outline":"f41d"}},"pool":{"name":"pool","category":"Sport","tags":["swim","water","swimmer","holiday","swimming","vacation","relax","sport"],"variants":{"outline":"ed91"}},"power":{"name":"power","category":"Devices","tags":["on","off","turn on","turn off","electricity"],"variants":{"outline":"eb0d"}},"pray":{"name":"pray","category":"","tags":["religion","faith","christianity","islam","buddhism","judaism"],"variants":{"outline":"ecbf"}},"premium-rights":{"name":"premium-rights","category":"","tags":["money","work","job","cash","dollar"],"variants":{"outline":"efbd"}},"prescription":{"name":"prescription","category":"Health","tags":["doctor","pharmacy","drug","pills","medical","disease"],"variants":{"outline":"ef99"}},"presentation-analytics":{"name":"presentation-analytics","category":"Document","tags":["slideshow","display","exhibition","speech","topic","conference"],"variants":{"outline":"eec3","filled":"ff5d"}},"presentation-off":{"name":"presentation-off","category":"Document","tags":["slideshow","display","exhibition","speech","topic","conference"],"variants":{"outline":"f183"}},"presentation":{"name":"presentation","category":"Document","tags":["slideshow","display","exhibition","speech","topic","conference"],"variants":{"outline":"eb70","filled":"ff5c"}},"printer-off":{"name":"printer-off","category":"Devices","tags":["fax","office","device"],"variants":{"outline":"f184"}},"printer":{"name":"printer","category":"Devices","tags":["fax","office","device"],"variants":{"outline":"eb0e"}},"prism-light":{"name":"prism-light","category":"","tags":[],"variants":{"outline":"fea6"}},"prism-off":{"name":"prism-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"faaf"}},"prism-plus":{"name":"prism-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab0"}},"prism":{"name":"prism","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab1"}},"prison":{"name":"prison","category":"Map","tags":["jail","policeman","police","cop","handcuff","arrest","prisoner","thief"],"variants":{"outline":"ef79"}},"progress-alert":{"name":"progress-alert","category":"System","tags":[],"variants":{"outline":"fa07"}},"progress-bolt":{"name":"progress-bolt","category":"System","tags":[],"variants":{"outline":"fa08"}},"progress-check":{"name":"progress-check","category":"System","tags":[],"variants":{"outline":"fa09"}},"progress-down":{"name":"progress-down","category":"System","tags":[],"variants":{"outline":"fa0a"}},"progress-help":{"name":"progress-help","category":"System","tags":[],"variants":{"outline":"fa0b"}},"progress-x":{"name":"progress-x","category":"System","tags":[],"variants":{"outline":"fa0c"}},"progress":{"name":"progress","category":"System","tags":[],"variants":{"outline":"fa0d"}},"prompt":{"name":"prompt","category":"","tags":["command line","terminal","code"],"variants":{"outline":"eb0f"}},"prong":{"name":"prong","category":"","tags":[],"variants":{"outline":"fda1"}},"propeller-off":{"name":"propeller-off","category":"","tags":["rotate","blade","spiral","air","ship","fan","power"],"variants":{"outline":"f185"}},"propeller":{"name":"propeller","category":"","tags":["rotate","blade","spiral","air","ship","fan","power"],"variants":{"outline":"eec4"}},"protocol":{"name":"protocol","category":"","tags":[],"variants":{"outline":"fd81"}},"pumpkin-scary":{"name":"pumpkin-scary","category":"","tags":["halloween","horror","spooky","costume","decoration"],"variants":{"outline":"f587"}},"puzzle-2":{"name":"puzzle-2","category":"Games","tags":["jigsaw","extension","add-on"],"variants":{"outline":"ef83"}},"puzzle-off":{"name":"puzzle-off","category":"Games","tags":["jigsaw","extension","add-on"],"variants":{"outline":"f186"}},"puzzle":{"name":"puzzle","category":"Games","tags":["jigsaw","extension","add-on"],"variants":{"outline":"eb10","filled":"f699"}},"pyramid-off":{"name":"pyramid-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"f187"}},"pyramid-plus":{"name":"pyramid-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab2"}},"pyramid":{"name":"pyramid","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"eec5"}},"qrcode-off":{"name":"qrcode-off","category":"Devices","tags":["scan","data"],"variants":{"outline":"f41e"}},"qrcode":{"name":"qrcode","category":"Devices","tags":["scan","data"],"variants":{"outline":"eb11"}},"question-mark":{"name":"question-mark","category":"","tags":["sign","symbol","ask","sentence","word","letters","?"],"variants":{"outline":"ec9d"}},"quote-off":{"name":"quote-off","category":"Text","tags":["chat","message","text","punctuation","quotation","comment"],"variants":{"outline":"f188"}},"quote":{"name":"quote","category":"Text","tags":["chat","message","text","punctuation","quotation","comment"],"variants":{"outline":"efbe"}},"quotes":{"name":"quotes","category":"Text","tags":["chat","message","text","punctuation","quotation","comment"],"variants":{"outline":"fb1e"}},"radar-2":{"name":"radar-2","category":"Map","tags":["location","navigation","gps","find","signal","technology","submarine"],"variants":{"outline":"f016"}},"radar-off":{"name":"radar-off","category":"Map","tags":["location","navigation","gps","find","signal","technology","submarine"],"variants":{"outline":"f41f"}},"radar":{"name":"radar","category":"Map","tags":["location","navigation","gps","find","signal","technology","submarine"],"variants":{"outline":"f017","filled":"fe0d"}},"radio-off":{"name":"radio-off","category":"Media","tags":["music","news","sound","broadcost","communication","station"],"variants":{"outline":"f420"}},"radio":{"name":"radio","category":"Media","tags":["music","news","sound","broadcost","communication","station"],"variants":{"outline":"ef2d"}},"radioactive-off":{"name":"radioactive-off","category":"Symbols","tags":["dangerous","precarious","danger","sign","symbol","warning","caution","chernobyl","reactor","atomic","powerhouses","generator"],"variants":{"outline":"f189"}},"radioactive":{"name":"radioactive","category":"Symbols","tags":["dangerous","precarious","danger","sign","symbol","warning","caution","chernobyl","reactor","atomic","powerhouses","generator"],"variants":{"outline":"ecc0","filled":"f760"}},"radius-bottom-left":{"name":"radius-bottom-left","category":"Design","tags":["round","corner","rounded","border","css","style","bottom"],"variants":{"outline":"eec6"}},"radius-bottom-right":{"name":"radius-bottom-right","category":"Design","tags":["round","corner","rounded","border","css","style","top"],"variants":{"outline":"eec7"}},"radius-top-left":{"name":"radius-top-left","category":"Design","tags":["round","corner","rounded","border","css","style","bottom"],"variants":{"outline":"eec8"}},"radius-top-right":{"name":"radius-top-right","category":"Design","tags":["round","corner","rounded","border","css","style","top"],"variants":{"outline":"eec9"}},"rainbow-off":{"name":"rainbow-off","category":"Weather","tags":["colorful","weather","colors","colour","nature"],"variants":{"outline":"f18a"}},"rainbow":{"name":"rainbow","category":"Weather","tags":["colorful","weather","colors","colour","nature"],"variants":{"outline":"edbc"}},"rating-12-plus":{"name":"rating-12-plus","category":"Symbols","tags":["film","video","photo","movie","age","limiter"],"variants":{"outline":"f266"}},"rating-14-plus":{"name":"rating-14-plus","category":"Symbols","tags":["film","video","photo","movie","age","limiter"],"variants":{"outline":"f267"}},"rating-16-plus":{"name":"rating-16-plus","category":"Symbols","tags":["film","video","photo","movie","age","limiter"],"variants":{"outline":"f268"}},"rating-18-plus":{"name":"rating-18-plus","category":"Symbols","tags":["film","video","photo","movie","age","limiter"],"variants":{"outline":"f269"}},"rating-21-plus":{"name":"rating-21-plus","category":"Symbols","tags":["film","video","photo","movie","age","limiter"],"variants":{"outline":"f26a"}},"razor-electric":{"name":"razor-electric","category":"Health","tags":["shaver","barber","grooming","beard","moustache"],"variants":{"outline":"f4b4"}},"razor":{"name":"razor","category":"Health","tags":["shaver","barber","grooming","beard","moustache"],"variants":{"outline":"f4b5"}},"receipt-2":{"name":"receipt-2","category":"Document","tags":["bill","restaurant","shop","price","pay","money","total","tax"],"variants":{"outline":"edfa"}},"receipt-bitcoin":{"name":"receipt-bitcoin","category":"E-commerce","tags":[],"variants":{"outline":"fd66"}},"receipt-dollar":{"name":"receipt-dollar","category":"E-commerce","tags":[],"variants":{"outline":"fd67"}},"receipt-euro":{"name":"receipt-euro","category":"E-commerce","tags":[],"variants":{"outline":"fd68"}},"receipt-off":{"name":"receipt-off","category":"Document","tags":["bill","restaurant","shop","price","pay","money","total","tax"],"variants":{"outline":"edfb"}},"receipt-pound":{"name":"receipt-pound","category":"E-commerce","tags":[],"variants":{"outline":"fd69"}},"receipt-refund":{"name":"receipt-refund","category":"Document","tags":["bill","restaurant","shop","price","pay","money","total","give","back","return"],"variants":{"outline":"edfc"}},"receipt-rupee":{"name":"receipt-rupee","category":"","tags":[],"variants":{"outline":"fd82"}},"receipt-tax":{"name":"receipt-tax","category":"Document","tags":["income","percentage","money","finance","charge","obligation","taxpayer","vat"],"variants":{"outline":"edbd"}},"receipt-yen":{"name":"receipt-yen","category":"E-commerce","tags":[],"variants":{"outline":"fd6a"}},"receipt-yuan":{"name":"receipt-yuan","category":"E-commerce","tags":[],"variants":{"outline":"fd6b"}},"receipt":{"name":"receipt","category":"Document","tags":["bill","restaurant","shop","price","pay","money","total","tax"],"variants":{"outline":"edfd","filled":"ff06"}},"recharging":{"name":"recharging","category":"","tags":["battery","power","charge","socket","electricity","device","phone","laptop","low"],"variants":{"outline":"eeca"}},"record-mail-off":{"name":"record-mail-off","category":"","tags":["voice","voicemail","message"],"variants":{"outline":"f18b"}},"record-mail":{"name":"record-mail","category":"","tags":["voice","voicemail","message"],"variants":{"outline":"eb12"}},"rectangle-rounded-bottom":{"name":"rectangle-rounded-bottom","category":"Shapes","tags":[],"variants":{"outline":"faed"}},"rectangle-rounded-top":{"name":"rectangle-rounded-top","category":"Shapes","tags":[],"variants":{"outline":"faee"}},"rectangle-vertical":{"name":"rectangle-vertical","category":"Shapes","tags":["shape","geometric","math","upright"],"variants":{"outline":"ed36","filled":"f69b"}},"rectangle":{"name":"rectangle","category":"Shapes","tags":["shape","geometric","math"],"variants":{"outline":"ed37","filled":"f69a"}},"rectangular-prism-off":{"name":"rectangular-prism-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab3"}},"rectangular-prism-plus":{"name":"rectangular-prism-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab4"}},"rectangular-prism":{"name":"rectangular-prism","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab5"}},"recycle-off":{"name":"recycle-off","category":"Symbols","tags":["trash","rubbish","recyclable","reuse","waste"],"variants":{"outline":"f18c"}},"recycle":{"name":"recycle","category":"Symbols","tags":["trash","rubbish","recyclable","reuse","waste"],"variants":{"outline":"eb9b"}},"refresh-alert":{"name":"refresh-alert","category":"Arrows","tags":["synchronization","reload","restart","spinner","loader","ajax","update","arrows"],"variants":{"outline":"ed57"}},"refresh-dot":{"name":"refresh-dot","category":"Arrows","tags":["again","reload","arrows","loading","replay"],"variants":{"outline":"efbf"}},"refresh-off":{"name":"refresh-off","category":"Arrows","tags":["synchronization","reload","restart","spinner","loader","ajax","update","arrows"],"variants":{"outline":"f18d"}},"refresh":{"name":"refresh","category":"Arrows","tags":["synchronization","reload","restart","spinner","loader","ajax","update","arrows"],"variants":{"outline":"eb13"}},"regex-off":{"name":"regex-off","category":"Text","tags":["regular","expression","code","replace","programming","coding","variables"],"variants":{"outline":"f421"}},"regex":{"name":"regex","category":"Text","tags":["regular","expression","code","replace","programming","coding","variables"],"variants":{"outline":"f31f"}},"registered":{"name":"registered","category":"","tags":["copyright","trademark","rights"],"variants":{"outline":"eb14"}},"relation-many-to-many":{"name":"relation-many-to-many","category":"Database","tags":["data","model","analysis","multiple","connection","database","link"],"variants":{"outline":"ed7f","filled":"fe0c"}},"relation-one-to-many":{"name":"relation-one-to-many","category":"Database","tags":["data","model","analysis","multiple","connection","database","link"],"variants":{"outline":"ed80","filled":"fe0b"}},"relation-one-to-one":{"name":"relation-one-to-one","category":"Database","tags":["data","model","analysis","connection","database","link"],"variants":{"outline":"ed81","filled":"fe0a"}},"reload":{"name":"reload","category":"Arrows","tags":["refresh","repeat","update","sync","loading"],"variants":{"outline":"f3ae"}},"reorder":{"name":"reorder","category":"","tags":[],"variants":{"outline":"fc15"}},"repeat-off":{"name":"repeat-off","category":"Media","tags":["reuse","redo","action","replay","loop","flip"],"variants":{"outline":"f18e"}},"repeat-once":{"name":"repeat-once","category":"Media","tags":["reuse","redo","action","replay","loop"],"variants":{"outline":"eb71"}},"repeat":{"name":"repeat","category":"Media","tags":["reuse","redo","action","replay","loop","flip"],"variants":{"outline":"eb72"}},"replace-off":{"name":"replace-off","category":"","tags":["change","place","position","move","exchange"],"variants":{"outline":"f422"}},"replace":{"name":"replace","category":"","tags":["change","place","position","move","exchange"],"variants":{"outline":"ebc7","filled":"f69c"}},"report-analytics":{"name":"report-analytics","category":"Document","tags":["statistics","results","business","sales","analysis","analyse","bar","chart"],"variants":{"outline":"eecb"}},"report-medical":{"name":"report-medical","category":"Document","tags":["hospital","doctor","health","sickness","illness","test","results"],"variants":{"outline":"eecc"}},"report-money":{"name":"report-money","category":"Document","tags":["results","business","sales","analysis","analyse","finance","financial","total"],"variants":{"outline":"eecd"}},"report-off":{"name":"report-off","category":"Document","tags":["time","timesheet","analysis","analyse","results","business","company"],"variants":{"outline":"f18f"}},"report-search":{"name":"report-search","category":"Document","tags":["analytic","statistics","data","results","graph","document"],"variants":{"outline":"ef84"}},"report":{"name":"report","category":"Document","tags":["time","timesheet","analysis","analyse","results","business","company"],"variants":{"outline":"eece"}},"reserved-line":{"name":"reserved-line","category":"","tags":[],"variants":{"outline":"f9f6"}},"resize":{"name":"resize","category":"Design","tags":["picture","photo","alter","change","height","width"],"variants":{"outline":"eecf"}},"restore":{"name":"restore","category":"","tags":[],"variants":{"outline":"fafd"}},"rewind-backward-10":{"name":"rewind-backward-10","category":"Media","tags":[],"variants":{"outline":"faba"}},"rewind-backward-15":{"name":"rewind-backward-15","category":"Media","tags":[],"variants":{"outline":"fabb"}},"rewind-backward-20":{"name":"rewind-backward-20","category":"Media","tags":[],"variants":{"outline":"fabc"}},"rewind-backward-30":{"name":"rewind-backward-30","category":"Media","tags":[],"variants":{"outline":"fabd"}},"rewind-backward-40":{"name":"rewind-backward-40","category":"Media","tags":[],"variants":{"outline":"fabe"}},"rewind-backward-5":{"name":"rewind-backward-5","category":"Media","tags":[],"variants":{"outline":"fabf"}},"rewind-backward-50":{"name":"rewind-backward-50","category":"Media","tags":[],"variants":{"outline":"fac0"}},"rewind-backward-60":{"name":"rewind-backward-60","category":"Media","tags":[],"variants":{"outline":"fac1"}},"rewind-forward-10":{"name":"rewind-forward-10","category":"Media","tags":[],"variants":{"outline":"fac2"}},"rewind-forward-15":{"name":"rewind-forward-15","category":"Media","tags":[],"variants":{"outline":"fac3"}},"rewind-forward-20":{"name":"rewind-forward-20","category":"Media","tags":[],"variants":{"outline":"fac4"}},"rewind-forward-30":{"name":"rewind-forward-30","category":"Media","tags":[],"variants":{"outline":"fac5"}},"rewind-forward-40":{"name":"rewind-forward-40","category":"Media","tags":[],"variants":{"outline":"fac6"}},"rewind-forward-5":{"name":"rewind-forward-5","category":"Media","tags":[],"variants":{"outline":"fac7"}},"rewind-forward-50":{"name":"rewind-forward-50","category":"Media","tags":[],"variants":{"outline":"fac8"}},"rewind-forward-60":{"name":"rewind-forward-60","category":"Media","tags":[],"variants":{"outline":"fac9"}},"ribbon-health":{"name":"ribbon-health","category":"Symbols","tags":["medical","care","heatlh","medic","healthcare"],"variants":{"outline":"f58e"}},"rings":{"name":"rings","category":"Sport","tags":[],"variants":{"outline":"fa6a"}},"ripple-off":{"name":"ripple-off","category":"Nature","tags":["wave","water","breeze","ocean","sea"],"variants":{"outline":"f190"}},"ripple":{"name":"ripple","category":"Nature","tags":["wave","water","breeze","ocean","sea"],"variants":{"outline":"ed82"}},"road-off":{"name":"road-off","category":"Map","tags":["car","travel","journey","traffic","highway","route","racing"],"variants":{"outline":"f191"}},"road-sign":{"name":"road-sign","category":"Map","tags":["telltale","prohibitive","indicative","cautionary","codex","restrictions"],"variants":{"outline":"ecdd"}},"road":{"name":"road","category":"Map","tags":["car","travel","journey","traffic","highway","route","racing"],"variants":{"outline":"f018"}},"robot-face":{"name":"robot-face","category":"","tags":[],"variants":{"outline":"fcbe"}},"robot-off":{"name":"robot-off","category":"","tags":["technology","ai","machine","bot","android"],"variants":{"outline":"f192"}},"robot":{"name":"robot","category":"","tags":["technology","ai","machine","bot","android"],"variants":{"outline":"f00b"}},"rocket-off":{"name":"rocket-off","category":"Map","tags":["universe","galaxy","space","journey","discover","extraterrestrial","spaceship"],"variants":{"outline":"f193"}},"rocket":{"name":"rocket","category":"Map","tags":["universe","galaxy","space","journey","discover","extraterrestrial","spaceship"],"variants":{"outline":"ec45"}},"roller-skating":{"name":"roller-skating","category":"Sport","tags":["sport","hobby","fitness"],"variants":{"outline":"efd1"}},"rollercoaster-off":{"name":"rollercoaster-off","category":"Vehicles","tags":["adrenaline","height","speed","funfair","fun","attraction","extreme"],"variants":{"outline":"f423"}},"rollercoaster":{"name":"rollercoaster","category":"Vehicles","tags":["adrenaline","height","speed","funfair","fun","attraction","extreme"],"variants":{"outline":"f0a2"}},"rosette-discount-check-off":{"name":"rosette-discount-check-off","category":"E-commerce","tags":["reduction","price","cost","money","shopping","bargain","tick","done","verified","certificate","valid","official","success","invalid"],"variants":{"outline":"ff10"}},"rosette-discount-check":{"name":"rosette-discount-check","category":"E-commerce","tags":["reduction","price","cost","money","shopping","bargain","tick","done","verified","certificate","valid","official","success"],"variants":{"outline":"f1f8","filled":"f746"}},"rosette-discount-off":{"name":"rosette-discount-off","category":"E-commerce","tags":["sale","reduction","price","cost","money","shopping","bargain"],"variants":{"outline":"f3e6"}},"rosette-discount":{"name":"rosette-discount","category":"E-commerce","tags":["sale","reduction","price","cost","money","shopping","bargain"],"variants":{"outline":"ee7c","filled":"ff05"}},"rosette-number-0":{"name":"rosette-number-0","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f58f"}},"rosette-number-1":{"name":"rosette-number-1","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f590"}},"rosette-number-2":{"name":"rosette-number-2","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f591"}},"rosette-number-3":{"name":"rosette-number-3","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f592"}},"rosette-number-4":{"name":"rosette-number-4","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f593"}},"rosette-number-5":{"name":"rosette-number-5","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f594"}},"rosette-number-6":{"name":"rosette-number-6","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f595"}},"rosette-number-7":{"name":"rosette-number-7","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f596"}},"rosette-number-8":{"name":"rosette-number-8","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f597"}},"rosette-number-9":{"name":"rosette-number-9","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f598"}},"rosette":{"name":"rosette","category":"Shapes","tags":["shape","badge","star","medal"],"variants":{"outline":"f599","filled":"f69d"}},"rotate-2":{"name":"rotate-2","category":"Arrows","tags":["refresh","synchronization","reload","restart","spinner","loader","ajax","update","arrows"],"variants":{"outline":"ebb4"}},"rotate-360":{"name":"rotate-360","category":"Arrows","tags":["degree","circle","camera","spin","rotation"],"variants":{"outline":"ef85"}},"rotate-3d":{"name":"rotate-3d","category":"","tags":["rotation","geometry","3d","modeling"],"variants":{"outline":"f020"}},"rotate-clockwise-2":{"name":"rotate-clockwise-2","category":"Arrows","tags":["refresh","synchronization","reload","restart","spinner","loader","ajax","update","arrows"],"variants":{"outline":"ebb5"}},"rotate-clockwise":{"name":"rotate-clockwise","category":"Arrows","tags":["refresh","synchronization","reload","restart","spinner","loader","ajax","update","arrows"],"variants":{"outline":"eb15"}},"rotate-dot":{"name":"rotate-dot","category":"Arrows","tags":["direction","degree","circle","camera","spin","rotation"],"variants":{"outline":"efe5"}},"rotate-rectangle":{"name":"rotate-rectangle","category":"Arrows","tags":["refresh","synchronization","reload","restart","spinner","loader","ajax","update","arrows"],"variants":{"outline":"ec15"}},"rotate":{"name":"rotate","category":"Arrows","tags":["refresh","synchronization","reload","restart","spinner","loader","ajax","update","arrows"],"variants":{"outline":"eb16"}},"route-2":{"name":"route-2","category":"Map","tags":["path","journey","direction","trail","navigate","travel","way","road","route-two","2-direction"],"variants":{"outline":"f4b6"}},"route-alt-left":{"name":"route-alt-left","category":"Map","tags":["alternate-left","alternate-route","left-path","alternate-way","left-trail","alt-left-road","leftward-route","shift-left","change-left","left-road"],"variants":{"outline":"fca9"}},"route-alt-right":{"name":"route-alt-right","category":"Map","tags":["alternate-right","alternate-route","right-path","alternate-way","right-trail","alt-right-road","rightward-route","shift-right","change-right","right-road"],"variants":{"outline":"fcaa"}},"route-off":{"name":"route-off","category":"Map","tags":["path","navigation","map"],"variants":{"outline":"f194"}},"route-scan":{"name":"route-scan","category":"","tags":[],"variants":{"outline":"fcbf"}},"route-square-2":{"name":"route-square-2","category":"Map","tags":["square-route","route-square","path","journey","direction","trail","navigate","travel","way","square-direction"],"variants":{"outline":"fcab"}},"route-square":{"name":"route-square","category":"Map","tags":["path","journey","direction","trail","navigate","travel","way","square","geometric-route","square-path"],"variants":{"outline":"fcac"}},"route-x-2":{"name":"route-x-2","category":"Map","tags":["x-route","route-x","path","journey","direction","trail","navigate","travel","way","crossing"],"variants":{"outline":"fcad"}},"route-x":{"name":"route-x","category":"Map","tags":["path","journey","direction","trail","navigate","travel","way","cross","x-cross","cross-path"],"variants":{"outline":"fcae"}},"route":{"name":"route","category":"Map","tags":["path","journey","direction","trail","navigate","travel","way","road","travel-route","route-way"],"variants":{"outline":"eb17"}},"router-off":{"name":"router-off","category":"Devices","tags":["wifi","device","wireless","signal","station","cast"],"variants":{"outline":"f424"}},"router":{"name":"router","category":"Devices","tags":["wifi","device","wireless","signal","station","cast"],"variants":{"outline":"eb18"}},"row-insert-bottom":{"name":"row-insert-bottom","category":"Database","tags":["table","layout","add","below","macro","excel"],"variants":{"outline":"eed0"}},"row-insert-top":{"name":"row-insert-top","category":"Database","tags":["table","layout","add","below","macro","excel"],"variants":{"outline":"eed1"}},"row-remove":{"name":"row-remove","category":"Database","tags":[],"variants":{"outline":"fafe"}},"rss":{"name":"rss","category":"","tags":["feed","subscribe"],"variants":{"outline":"eb19"}},"rubber-stamp-off":{"name":"rubber-stamp-off","category":"Document","tags":["rubber","stamp","seal","letter","mail","document","signature"],"variants":{"outline":"f5aa"}},"rubber-stamp":{"name":"rubber-stamp","category":"Document","tags":["rubber","stamp","seal","letter","mail","document","signature"],"variants":{"outline":"f5ab"}},"ruler-2-off":{"name":"ruler-2-off","category":"Design","tags":["maths","dimensions","size","width","length","geometry","measure","technical"],"variants":{"outline":"f195"}},"ruler-2":{"name":"ruler-2","category":"Design","tags":["maths","dimensions","size","width","length","geometry","measure","technical"],"variants":{"outline":"eed2"}},"ruler-3":{"name":"ruler-3","category":"Design","tags":["maths","dimensions","size","width","length","geometry","measure","technical"],"variants":{"outline":"f290"}},"ruler-measure-2":{"name":"ruler-measure-2","category":"Design","tags":["maths","dimensions","size","width","length","geometry","measure","technical","distance"],"variants":{"outline":"ff0f"}},"ruler-measure":{"name":"ruler-measure","category":"Design","tags":["maths","dimensions","size","width","length","geometry","measure","technical","distance"],"variants":{"outline":"f291"}},"ruler-off":{"name":"ruler-off","category":"Design","tags":["maths","dimensions","size","width","length","geometry","measure","technical"],"variants":{"outline":"f196"}},"ruler":{"name":"ruler","category":"Design","tags":["maths","dimensions","size","width","length","geometry","measure","technical"],"variants":{"outline":"eb1a"}},"run":{"name":"run","category":"Sport","tags":["jog","dislocating","movement","motion","sprint"],"variants":{"outline":"ec82"}},"rv-truck":{"name":"rv-truck","category":"","tags":[],"variants":{"outline":"fcc0"}},"s-turn-down":{"name":"s-turn-down","category":"Arrows","tags":["arrow","direction","bottom","south"],"variants":{"outline":"f516"}},"s-turn-left":{"name":"s-turn-left","category":"Arrows","tags":["arrow","direction","west"],"variants":{"outline":"f517"}},"s-turn-right":{"name":"s-turn-right","category":"Arrows","tags":["arrow","direction","east"],"variants":{"outline":"f518"}},"s-turn-up":{"name":"s-turn-up","category":"Arrows","tags":["arrow","direction","top","north"],"variants":{"outline":"f519"}},"sailboat-2":{"name":"sailboat-2","category":"Vehicles","tags":["sailor","journey","sea","lake","ocean","river"],"variants":{"outline":"f5f7"}},"sailboat-off":{"name":"sailboat-off","category":"Vehicles","tags":["sailor","journey","sea","lake","ocean","river"],"variants":{"outline":"f425"}},"sailboat":{"name":"sailboat","category":"Vehicles","tags":["sailor","journey","sea","lake","ocean","river"],"variants":{"outline":"ec83"}},"salad":{"name":"salad","category":"Food","tags":["food","vegetable","vegan","healthy"],"variants":{"outline":"f50a"}},"salt":{"name":"salt","category":"Food","tags":["food","cooking","kitchen","spice","salty"],"variants":{"outline":"ef16"}},"sandbox":{"name":"sandbox","category":"System","tags":[],"variants":{"outline":"fd6c"}},"satellite-off":{"name":"satellite-off","category":"Map","tags":["orbit","space","moon","earth","planet","communication","information","celestial"],"variants":{"outline":"f197"}},"satellite":{"name":"satellite","category":"Map","tags":["orbit","space","moon","earth","planet","communication","information","celestial"],"variants":{"outline":"eed3"}},"sausage":{"name":"sausage","category":"Food","tags":["food","grill","bonfire","campfire","meat","hot-dog"],"variants":{"outline":"ef17"}},"scale-off":{"name":"scale-off","category":"","tags":["weigh","balance","amount","heavy","light","libra"],"variants":{"outline":"f198"}},"scale-outline-off":{"name":"scale-outline-off","category":"","tags":["weight","weigh","diet","healthy","measurement"],"variants":{"outline":"f199"}},"scale-outline":{"name":"scale-outline","category":"","tags":["weight","weigh","diet","healthy","measurement"],"variants":{"outline":"ef53"}},"scale":{"name":"scale","category":"","tags":["weigh","balance","amount","heavy","light","libra"],"variants":{"outline":"ebc2"}},"scan-eye":{"name":"scan-eye","category":"","tags":["technology","security","safety","safe","secure"],"variants":{"outline":"f1ff"}},"scan-position":{"name":"scan-position","category":"","tags":[],"variants":{"outline":"fdac"}},"scan":{"name":"scan","category":"","tags":["code","barcode","qr code","app","scanner","document"],"variants":{"outline":"ebc8"}},"schema-off":{"name":"schema-off","category":"Database","tags":["graph","data","infography"],"variants":{"outline":"f426"}},"schema":{"name":"schema","category":"Database","tags":["graph","data","infography"],"variants":{"outline":"f200"}},"school-bell":{"name":"school-bell","category":"","tags":["break","lesson","alarm","ring"],"variants":{"outline":"f64a"}},"school-off":{"name":"school-off","category":"Map","tags":["students","class","teachers","professors","doctors","hall","classroom","subject","science","break","lesson"],"variants":{"outline":"f19a"}},"school":{"name":"school","category":"Map","tags":["students","class","teachers","professors","doctors","hall","classroom","subject","science","break","lesson"],"variants":{"outline":"ecf7"}},"scissors-off":{"name":"scissors-off","category":"Design","tags":["cut","paper","file","document","hairdresser","blade","sharp"],"variants":{"outline":"f19b"}},"scissors":{"name":"scissors","category":"Design","tags":["cut","paper","file","document","hairdresser","blade","sharp"],"variants":{"outline":"eb1b"}},"scooter-electric":{"name":"scooter-electric","category":"Vehicles","tags":["vehicle","drive","driver","engine","motor","journey","trip"],"variants":{"outline":"ecc1"}},"scooter":{"name":"scooter","category":"Vehicles","tags":["vehicle","drive","driver","engine","motor","journey","trip"],"variants":{"outline":"ec6c"}},"scoreboard":{"name":"scoreboard","category":"Sport","tags":[],"variants":{"outline":"fa6b"}},"screen-share-off":{"name":"screen-share-off","category":"Devices","tags":["monitor","stream","tv","mirroring","cast","online"],"variants":{"outline":"ed17"}},"screen-share":{"name":"screen-share","category":"Devices","tags":["monitor","stream","tv","mirroring","cast","online"],"variants":{"outline":"ed18"}},"screenshot":{"name":"screenshot","category":"","tags":["image","capture","photo"],"variants":{"outline":"f201"}},"scribble-off":{"name":"scribble-off","category":"","tags":["kid","doodle","draw","drawing"],"variants":{"outline":"f427"}},"scribble":{"name":"scribble","category":"","tags":["kid","doodle","draw","drawing"],"variants":{"outline":"f0a3"}},"script-minus":{"name":"script-minus","category":"Document","tags":["code","programming","coding","remove","delete"],"variants":{"outline":"f2d7"}},"script-plus":{"name":"script-plus","category":"Document","tags":["code","programming","coding","add","new"],"variants":{"outline":"f2d8"}},"script-x":{"name":"script-x","category":"Document","tags":["code","programming","coding","remove","delete"],"variants":{"outline":"f2d9"}},"script":{"name":"script","category":"Document","tags":["code","programming","coding","document","development"],"variants":{"outline":"f2da"}},"scuba-diving-tank":{"name":"scuba-diving-tank","category":"Sport","tags":["dive","diving","water","open water","underwater","pressure","compressed air","air"],"variants":{"outline":"fefa","filled":"ff04"}},"scuba-diving":{"name":"scuba-diving","category":"Sport","tags":["dive","diving","water","open water","underwater"],"variants":{"outline":"fd4e"}},"scuba-mask-off":{"name":"scuba-mask-off","category":"Sport","tags":["dive","diving","water","holiday","underwater","snorkeling","equipment"],"variants":{"outline":"f428"}},"scuba-mask":{"name":"scuba-mask","category":"Sport","tags":["dive","diving","water","holiday","underwater","snorkeling","equipment"],"variants":{"outline":"eed4"}},"sdk":{"name":"sdk","category":"Development","tags":["development","programming","programmer","web","app"],"variants":{"outline":"f3af"}},"search-off":{"name":"search-off","category":"","tags":["find","magnifier","magnifying glass"],"variants":{"outline":"f19c"}},"search":{"name":"search","category":"","tags":["find","magnifier","magnifying glass"],"variants":{"outline":"eb1c"}},"section-sign":{"name":"section-sign","category":"","tags":["legal","paragraph","law"],"variants":{"outline":"f019"}},"section":{"name":"section","category":"Design","tags":["html","element","layout","divide","position","website"],"variants":{"outline":"eed5","filled":"fe09"}},"seeding-off":{"name":"seeding-off","category":"Nature","tags":["nature","greenery","grow","soil","harvest","plant","flower","tree","leaf"],"variants":{"outline":"f19d"}},"seeding":{"name":"seeding","category":"Nature","tags":["nature","greenery","grow","soil","harvest","plant","flower","tree","leaf"],"variants":{"outline":"ed51"}},"select-all":{"name":"select-all","category":"","tags":[],"variants":{"outline":"f9f7"}},"select":{"name":"select","category":"Arrows","tags":["arrows","select","dropdown","chevron","down","south","bottom","direction","input"],"variants":{"outline":"ec9e"}},"selector":{"name":"selector","category":"Arrows","tags":["arrows","select","dropdown","chevron","down","south","bottom","direction","input"],"variants":{"outline":"eb1d"}},"send-2":{"name":"send-2","category":"","tags":["transmit","dispatch","forward","deliver","message","communication","send-out","send-away","transfer","send-off"],"variants":{"outline":"fd5d"}},"send-off":{"name":"send-off","category":"Communication","tags":["message","mail","email","gmail","paper","airplane","aeroplane"],"variants":{"outline":"f429"}},"send":{"name":"send","category":"Communication","tags":["message","mail","email","gmail","paper","airplane","aeroplane"],"variants":{"outline":"eb1e"}},"seo":{"name":"seo","category":"Development","tags":["www","web","browser","search","result"],"variants":{"outline":"f26b"}},"separator-horizontal":{"name":"separator-horizontal","category":"Text","tags":["divider","space","separate","set apart","flat-lying"],"variants":{"outline":"ec79"}},"separator-vertical":{"name":"separator-vertical","category":"Text","tags":["divider","space","separate","set apart","upright"],"variants":{"outline":"ec7a"}},"separator":{"name":"separator","category":"Text","tags":["divider","space","separate","set apart"],"variants":{"outline":"ebda"}},"server-2":{"name":"server-2","category":"Devices","tags":["storage","hosting","www"],"variants":{"outline":"f07c"}},"server-bolt":{"name":"server-bolt","category":"Devices","tags":["data","database","storage","lighting","power","energy"],"variants":{"outline":"f320"}},"server-cog":{"name":"server-cog","category":"Devices","tags":["settings","storage","data","database"],"variants":{"outline":"f321"}},"server-off":{"name":"server-off","category":"Devices","tags":["storage","hosting","www"],"variants":{"outline":"f19e"}},"server":{"name":"server","category":"Devices","tags":["storage","hosting","www"],"variants":{"outline":"eb1f"}},"servicemark":{"name":"servicemark","category":"Symbols","tags":["trademark","sign","symbol","registration"],"variants":{"outline":"ec09"}},"settings-2":{"name":"settings-2","category":"System","tags":["cog","edit","gear","preferences","tools"],"variants":{"outline":"f5ac"}},"settings-automation":{"name":"settings-automation","category":"System","tags":["system","technology","automate","configure","device","program"],"variants":{"outline":"eed6"}},"settings-bolt":{"name":"settings-bolt","category":"System","tags":[],"variants":{"outline":"f9ad"}},"settings-cancel":{"name":"settings-cancel","category":"System","tags":[],"variants":{"outline":"f9ae"}},"settings-check":{"name":"settings-check","category":"System","tags":[],"variants":{"outline":"f9af"}},"settings-code":{"name":"settings-code","category":"System","tags":[],"variants":{"outline":"f9b0"}},"settings-cog":{"name":"settings-cog","category":"System","tags":[],"variants":{"outline":"f9b1"}},"settings-dollar":{"name":"settings-dollar","category":"System","tags":[],"variants":{"outline":"f9b2"}},"settings-down":{"name":"settings-down","category":"System","tags":[],"variants":{"outline":"f9b3"}},"settings-exclamation":{"name":"settings-exclamation","category":"System","tags":[],"variants":{"outline":"f9b4"}},"settings-heart":{"name":"settings-heart","category":"System","tags":[],"variants":{"outline":"f9b5"}},"settings-minus":{"name":"settings-minus","category":"System","tags":[],"variants":{"outline":"f9b6"}},"settings-off":{"name":"settings-off","category":"System","tags":["cog","edit","gear","preferences","tools"],"variants":{"outline":"f19f"}},"settings-pause":{"name":"settings-pause","category":"System","tags":[],"variants":{"outline":"f9b7"}},"settings-pin":{"name":"settings-pin","category":"System","tags":[],"variants":{"outline":"f9b8"}},"settings-plus":{"name":"settings-plus","category":"System","tags":[],"variants":{"outline":"f9b9"}},"settings-question":{"name":"settings-question","category":"System","tags":[],"variants":{"outline":"f9ba"}},"settings-search":{"name":"settings-search","category":"System","tags":[],"variants":{"outline":"f9bb"}},"settings-share":{"name":"settings-share","category":"System","tags":[],"variants":{"outline":"f9bc"}},"settings-star":{"name":"settings-star","category":"System","tags":[],"variants":{"outline":"f9bd"}},"settings-up":{"name":"settings-up","category":"System","tags":[],"variants":{"outline":"f9be"}},"settings-x":{"name":"settings-x","category":"System","tags":[],"variants":{"outline":"f9bf"}},"settings":{"name":"settings","category":"System","tags":["cog","edit","gear","preferences","tools"],"variants":{"outline":"eb20","filled":"f69e"}},"shadow-off":{"name":"shadow-off","category":"Photography","tags":["dark","sun","area","covered","dim","light","css","effect"],"variants":{"outline":"eed7"}},"shadow":{"name":"shadow","category":"Photography","tags":["dark","sun","area","covered","dim","light","css","effect"],"variants":{"outline":"eed8"}},"shape-2":{"name":"shape-2","category":"Design","tags":["draw","square","form","create","outline"],"variants":{"outline":"eed9"}},"shape-3":{"name":"shape-3","category":"Design","tags":["draw","square","form","create","outline"],"variants":{"outline":"eeda"}},"shape-off":{"name":"shape-off","category":"Design","tags":["draw","square","form","create","outline"],"variants":{"outline":"f1a0"}},"shape":{"name":"shape","category":"Design","tags":["draw","square","form","create","outline"],"variants":{"outline":"eb9c"}},"share-2":{"name":"share-2","category":"Arrows","tags":["network","link","connection"],"variants":{"outline":"f799"}},"share-3":{"name":"share-3","category":"Arrows","tags":["network","link","connection"],"variants":{"outline":"f7bd"}},"share-off":{"name":"share-off","category":"","tags":["network","link","connection"],"variants":{"outline":"f1a1"}},"share":{"name":"share","category":"","tags":["network","link","connection"],"variants":{"outline":"eb21"}},"shareplay":{"name":"shareplay","category":"Media","tags":[],"variants":{"outline":"fea5"}},"shield-bolt":{"name":"shield-bolt","category":"System","tags":[],"variants":{"outline":"f9c0"}},"shield-cancel":{"name":"shield-cancel","category":"System","tags":[],"variants":{"outline":"f9c1"}},"shield-check":{"name":"shield-check","category":"System","tags":["safety","protect","protection","yes","add"],"variants":{"outline":"eb22","filled":"f761"}},"shield-checkered":{"name":"shield-checkered","category":"System","tags":["knight","guard","defence","protect"],"variants":{"outline":"ef9a","filled":"f762"}},"shield-chevron":{"name":"shield-chevron","category":"System","tags":["knight","guard","defence","protect"],"variants":{"outline":"ef9b"}},"shield-code":{"name":"shield-code","category":"System","tags":[],"variants":{"outline":"f9c2"}},"shield-cog":{"name":"shield-cog","category":"System","tags":[],"variants":{"outline":"f9c3"}},"shield-dollar":{"name":"shield-dollar","category":"System","tags":[],"variants":{"outline":"f9c4"}},"shield-down":{"name":"shield-down","category":"System","tags":[],"variants":{"outline":"f9c5"}},"shield-exclamation":{"name":"shield-exclamation","category":"System","tags":[],"variants":{"outline":"f9c6"}},"shield-half":{"name":"shield-half","category":"System","tags":["safe","security","secure","safety","protect","protection"],"variants":{"outline":"f358","filled":"f357"}},"shield-heart":{"name":"shield-heart","category":"System","tags":[],"variants":{"outline":"f9c7"}},"shield-lock":{"name":"shield-lock","category":"System","tags":["secure","security","closed","key","safety"],"variants":{"outline":"ed58","filled":"f763"}},"shield-minus":{"name":"shield-minus","category":"System","tags":[],"variants":{"outline":"f9c8"}},"shield-off":{"name":"shield-off","category":"System","tags":["safety","protect","protection"],"variants":{"outline":"ecf8"}},"shield-pause":{"name":"shield-pause","category":"System","tags":[],"variants":{"outline":"f9c9"}},"shield-pin":{"name":"shield-pin","category":"System","tags":[],"variants":{"outline":"f9ca"}},"shield-plus":{"name":"shield-plus","category":"System","tags":[],"variants":{"outline":"f9cb"}},"shield-question":{"name":"shield-question","category":"System","tags":[],"variants":{"outline":"f9cc"}},"shield-search":{"name":"shield-search","category":"System","tags":[],"variants":{"outline":"f9cd"}},"shield-share":{"name":"shield-share","category":"System","tags":[],"variants":{"outline":"f9ce"}},"shield-star":{"name":"shield-star","category":"System","tags":[],"variants":{"outline":"f9cf"}},"shield-up":{"name":"shield-up","category":"System","tags":[],"variants":{"outline":"f9d0"}},"shield-x":{"name":"shield-x","category":"System","tags":["unprotected","protection","cancel","no"],"variants":{"outline":"eb23"}},"shield":{"name":"shield","category":"System","tags":["safety","protect","protection"],"variants":{"outline":"eb24","filled":"f69f"}},"ship-off":{"name":"ship-off","category":"Vehicles","tags":["sail","sail across","ocean","river","lake","sea","sailor","journey","transit","manufactures","containers"],"variants":{"outline":"f42a"}},"ship":{"name":"ship","category":"Vehicles","tags":["sail","sail across","ocean","river","lake","sea","sailor","journey","transit","manufactures","containers"],"variants":{"outline":"ec84"}},"shirt-off":{"name":"shirt-off","category":"","tags":["gear","outfit","mocker"],"variants":{"outline":"f1a2"}},"shirt-sport":{"name":"shirt-sport","category":"","tags":["basketball","soccer","football","player","clothes","game"],"variants":{"outline":"f26c"}},"shirt":{"name":"shirt","category":"","tags":["gear","outfit","mocker"],"variants":{"outline":"ec0a","filled":"f6a0"}},"shoe-off":{"name":"shoe-off","category":"","tags":["sport","boots","boot","footwear","sneaker","nike","adidas"],"variants":{"outline":"f1a4"}},"shoe":{"name":"shoe","category":"","tags":["sport","boots","boot","footwear","sneaker","nike","adidas"],"variants":{"outline":"efd2"}},"shopping-bag-check":{"name":"shopping-bag-check","category":"E-commerce","tags":[],"variants":{"outline":"fc16"}},"shopping-bag-discount":{"name":"shopping-bag-discount","category":"E-commerce","tags":[],"variants":{"outline":"fc17"}},"shopping-bag-edit":{"name":"shopping-bag-edit","category":"E-commerce","tags":[],"variants":{"outline":"fc18"}},"shopping-bag-exclamation":{"name":"shopping-bag-exclamation","category":"E-commerce","tags":[],"variants":{"outline":"fc19"}},"shopping-bag-heart":{"name":"shopping-bag-heart","category":"","tags":[],"variants":{"outline":"fda2"}},"shopping-bag-minus":{"name":"shopping-bag-minus","category":"E-commerce","tags":[],"variants":{"outline":"fc1a"}},"shopping-bag-plus":{"name":"shopping-bag-plus","category":"E-commerce","tags":[],"variants":{"outline":"fc1b"}},"shopping-bag-search":{"name":"shopping-bag-search","category":"E-commerce","tags":[],"variants":{"outline":"fc1c"}},"shopping-bag-x":{"name":"shopping-bag-x","category":"E-commerce","tags":[],"variants":{"outline":"fc1d"}},"shopping-bag":{"name":"shopping-bag","category":"E-commerce","tags":["shop","store","ecommerce","buy"],"variants":{"outline":"f5f8"}},"shopping-cart-bolt":{"name":"shopping-cart-bolt","category":"","tags":[],"variants":{"outline":"fb57"}},"shopping-cart-cancel":{"name":"shopping-cart-cancel","category":"","tags":[],"variants":{"outline":"fb58"}},"shopping-cart-check":{"name":"shopping-cart-check","category":"","tags":[],"variants":{"outline":"fb59"}},"shopping-cart-code":{"name":"shopping-cart-code","category":"","tags":[],"variants":{"outline":"fb5a"}},"shopping-cart-cog":{"name":"shopping-cart-cog","category":"","tags":[],"variants":{"outline":"fb5b"}},"shopping-cart-copy":{"name":"shopping-cart-copy","category":"","tags":[],"variants":{"outline":"fb5c"}},"shopping-cart-discount":{"name":"shopping-cart-discount","category":"","tags":[],"variants":{"outline":"fb5d"}},"shopping-cart-dollar":{"name":"shopping-cart-dollar","category":"","tags":[],"variants":{"outline":"fb5e"}},"shopping-cart-down":{"name":"shopping-cart-down","category":"","tags":[],"variants":{"outline":"fb5f"}},"shopping-cart-exclamation":{"name":"shopping-cart-exclamation","category":"","tags":[],"variants":{"outline":"fb60"}},"shopping-cart-heart":{"name":"shopping-cart-heart","category":"","tags":[],"variants":{"outline":"fb61"}},"shopping-cart-minus":{"name":"shopping-cart-minus","category":"","tags":[],"variants":{"outline":"fb62"}},"shopping-cart-off":{"name":"shopping-cart-off","category":"E-commerce","tags":["shop","store","buy","purchase","product","bag","trolley","supermarket","grocery"],"variants":{"outline":"eedc"}},"shopping-cart-pause":{"name":"shopping-cart-pause","category":"","tags":[],"variants":{"outline":"fb63"}},"shopping-cart-pin":{"name":"shopping-cart-pin","category":"","tags":[],"variants":{"outline":"fb64"}},"shopping-cart-plus":{"name":"shopping-cart-plus","category":"","tags":[],"variants":{"outline":"fb65"}},"shopping-cart-question":{"name":"shopping-cart-question","category":"","tags":[],"variants":{"outline":"fb66"}},"shopping-cart-search":{"name":"shopping-cart-search","category":"","tags":[],"variants":{"outline":"fb67"}},"shopping-cart-share":{"name":"shopping-cart-share","category":"","tags":[],"variants":{"outline":"fb68"}},"shopping-cart-star":{"name":"shopping-cart-star","category":"","tags":[],"variants":{"outline":"fb69"}},"shopping-cart-up":{"name":"shopping-cart-up","category":"","tags":[],"variants":{"outline":"fb6a"}},"shopping-cart-x":{"name":"shopping-cart-x","category":"","tags":[],"variants":{"outline":"fb6b"}},"shopping-cart":{"name":"shopping-cart","category":"E-commerce","tags":["shop","store","buy","purchase","product","bag","trolley","supermarket","grocery"],"variants":{"outline":"eb25","filled":"fc3f"}},"shovel-pitchforks":{"name":"shovel-pitchforks","category":"","tags":["shovel","pitchfork","digging-tool","gardening","agriculture","farm-tool","manual-labor","soil","gardening-implement","dig"],"variants":{"outline":"fd3a"}},"shovel":{"name":"shovel","category":"","tags":["garden","tool","digging","farm","dirt","gardening"],"variants":{"outline":"f1d9"}},"shredder":{"name":"shredder","category":"Devices","tags":["paper","document","destroy","device","office","confidential"],"variants":{"outline":"eedf"}},"sign-left":{"name":"sign-left","category":"Map","tags":["direction","west","navigation","arrow","navigate"],"variants":{"outline":"f06b","filled":"f6a1"}},"sign-right":{"name":"sign-right","category":"Map","tags":["direction","east","navigation","arrow","navigate"],"variants":{"outline":"f06c","filled":"f6a2"}},"signal-2g":{"name":"signal-2g","category":"Devices","tags":["mobile","network","phone","wifi","connection"],"variants":{"outline":"f79a"}},"signal-3g":{"name":"signal-3g","category":"Devices","tags":["mobile","network","connetion","wi-fi","wireless","smartphone","technology"],"variants":{"outline":"f1ee"}},"signal-4g-plus":{"name":"signal-4g-plus","category":"Devices","tags":["mobile","network","connetion","wi-fi","wireless","smartphone","technology"],"variants":{"outline":"f259"}},"signal-4g":{"name":"signal-4g","category":"Devices","tags":["mobile","network","connetion","wi-fi","wireless","smartphone","technology"],"variants":{"outline":"f1ef"}},"signal-5g":{"name":"signal-5g","category":"Devices","tags":["mobile","network","connetion","wi-fi","wireless","smartphone","technology"],"variants":{"outline":"f1f0"}},"signal-6g":{"name":"signal-6g","category":"Devices","tags":[],"variants":{"outline":"f9f8"}},"signal-e":{"name":"signal-e","category":"Devices","tags":[],"variants":{"outline":"f9f9"}},"signal-g":{"name":"signal-g","category":"Devices","tags":[],"variants":{"outline":"f9fa"}},"signal-h-plus":{"name":"signal-h-plus","category":"Devices","tags":[],"variants":{"outline":"f9fb"}},"signal-h":{"name":"signal-h","category":"Devices","tags":[],"variants":{"outline":"f9fc"}},"signal-lte":{"name":"signal-lte","category":"Devices","tags":[],"variants":{"outline":"f9fd"}},"signature-off":{"name":"signature-off","category":"Text","tags":["name","certficate","sign","edit","write","document","writing"],"variants":{"outline":"f1a5"}},"signature":{"name":"signature","category":"Text","tags":["name","certficate","sign","edit","write","document","writing"],"variants":{"outline":"eee0"}},"sitemap-off":{"name":"sitemap-off","category":"Development","tags":["page","webpage","website","list","roadmap","index"],"variants":{"outline":"f1a6"}},"sitemap":{"name":"sitemap","category":"Development","tags":["page","webpage","website","list","roadmap","index"],"variants":{"outline":"eb9d"}},"skateboard-off":{"name":"skateboard-off","category":"Vehicles","tags":["toy","vehicle","electrical"],"variants":{"outline":"f42b"}},"skateboard":{"name":"skateboard","category":"Vehicles","tags":["toy","vehicle","electrical"],"variants":{"outline":"ecc2"}},"skateboarding":{"name":"skateboarding","category":"Sport","tags":[],"variants":{"outline":"faca"}},"skew-x":{"name":"skew-x","category":"","tags":["skew-horizontal","tilt-x","slant-x","distort-horizontal","angled","slanted","tilted","diagonal","oblique","slope-x"],"variants":{"outline":"fd3b"}},"skew-y":{"name":"skew-y","category":"","tags":["skew-vertical","tilt-y","slant-y","distort-vertical","angled","slanted","tilted","diagonal","oblique","slope-y"],"variants":{"outline":"fd3c"}},"ski-jumping":{"name":"ski-jumping","category":"Sport","tags":[],"variants":{"outline":"fa6c"}},"skull":{"name":"skull","category":"Health","tags":["halloween","skeleton","dead","pirate","danger","horror"],"variants":{"outline":"f292"}},"slash":{"name":"slash","category":"Math","tags":["sign","divide","dash"],"variants":{"outline":"f4f9"}},"slashes":{"name":"slashes","category":"","tags":["sign","key","button","dash","divide"],"variants":{"outline":"f588"}},"sleigh":{"name":"sleigh","category":"Vehicles","tags":["winter","christmas","snow","santa","transport","sledge"],"variants":{"outline":"ef9c"}},"slice":{"name":"slice","category":"Design","tags":["knife","cut","chop","portion","kitchen","tool"],"variants":{"outline":"ebdb"}},"slideshow":{"name":"slideshow","category":"Text","tags":["photo","picture","video","presentation","camera","display","ad"],"variants":{"outline":"ebc9"}},"smart-home-off":{"name":"smart-home-off","category":"Buildings","tags":["apple","devices","connection","link","wifi","bluetooth"],"variants":{"outline":"f1a7"}},"smart-home":{"name":"smart-home","category":"Buildings","tags":["apple","devices","connection","link","wifi","bluetooth"],"variants":{"outline":"ecde"}},"smoking-no":{"name":"smoking-no","category":"Health","tags":["ban","prohibition","cigarette","public place"],"variants":{"outline":"ecc3"}},"smoking":{"name":"smoking","category":"Health","tags":["cigarette","public place"],"variants":{"outline":"ecc4"}},"snowboarding":{"name":"snowboarding","category":"","tags":[],"variants":{"outline":"fd4f"}},"snowflake-off":{"name":"snowflake-off","category":"Weather","tags":["winter","weather","cold","frost"],"variants":{"outline":"f1a8"}},"snowflake":{"name":"snowflake","category":"Weather","tags":["winter","weather","cold","frost"],"variants":{"outline":"ec0b"}},"snowman":{"name":"snowman","category":"","tags":["winter","christmas","snow","cold","frosty"],"variants":{"outline":"f26d"}},"soccer-field":{"name":"soccer-field","category":"Sport","tags":["football","pitch","player","vall","goal","goalkeeper","kick","ball","score","sport","sportsman"],"variants":{"outline":"ed92"}},"social-off":{"name":"social-off","category":"","tags":["society","community","collectivity"],"variants":{"outline":"f1a9"}},"social":{"name":"social","category":"","tags":["society","community","collectivity"],"variants":{"outline":"ebec"}},"sock":{"name":"sock","category":"","tags":["clothing","clothes","foot","feet","leg","knit","wool","cotton","ankle"],"variants":{"outline":"eee1"}},"sofa-off":{"name":"sofa-off","category":"","tags":["chair","seat","home","furniture","couch"],"variants":{"outline":"f42c"}},"sofa":{"name":"sofa","category":"","tags":["chair","seat","home","furniture","couch"],"variants":{"outline":"efaf"}},"solar-electricity":{"name":"solar-electricity","category":"","tags":[],"variants":{"outline":"fcc1"}},"solar-panel-2":{"name":"solar-panel-2","category":"","tags":["energy","sun","power","ecology","electricity"],"variants":{"outline":"f7be"}},"solar-panel":{"name":"solar-panel","category":"","tags":["energy","sun","power","ecology","electricity"],"variants":{"outline":"f7bf"}},"sort-0-9":{"name":"sort-0-9","category":"Text","tags":["numbers","one","two","three","four","five","numerical"],"variants":{"outline":"f54d"}},"sort-9-0":{"name":"sort-9-0","category":"Text","tags":["numbers","one","two","three","four","five","numerical"],"variants":{"outline":"f54e"}},"sort-a-z":{"name":"sort-a-z","category":"Text","tags":["alphabet","letters","alphabetical"],"variants":{"outline":"f54f"}},"sort-ascending-2":{"name":"sort-ascending-2","category":"Text","tags":["filter","classify","arrange","order"],"variants":{"outline":"eee2","filled":"ff5b"}},"sort-ascending-letters":{"name":"sort-ascending-letters","category":"Text","tags":["filter","classify","arrange","order"],"variants":{"outline":"ef18"}},"sort-ascending-numbers":{"name":"sort-ascending-numbers","category":"Text","tags":["filter","classify","arrange","order"],"variants":{"outline":"ef19"}},"sort-ascending-shapes":{"name":"sort-ascending-shapes","category":"","tags":[],"variants":{"outline":"fd94","filled":"ff5a"}},"sort-ascending-small-big":{"name":"sort-ascending-small-big","category":"","tags":[],"variants":{"outline":"fd95"}},"sort-ascending":{"name":"sort-ascending","category":"Text","tags":["filter","classify","arrange","order"],"variants":{"outline":"eb26"}},"sort-descending-2":{"name":"sort-descending-2","category":"Text","tags":["filter","classify","arrange","order"],"variants":{"outline":"eee3","filled":"ff59"}},"sort-descending-letters":{"name":"sort-descending-letters","category":"Text","tags":["filter","classify","arrange","order"],"variants":{"outline":"ef1a"}},"sort-descending-numbers":{"name":"sort-descending-numbers","category":"Text","tags":["filter","classify","arrange","order"],"variants":{"outline":"ef1b"}},"sort-descending-shapes":{"name":"sort-descending-shapes","category":"","tags":[],"variants":{"outline":"fd97","filled":"ff58"}},"sort-descending-small-big":{"name":"sort-descending-small-big","category":"","tags":[],"variants":{"outline":"fd96"}},"sort-descending":{"name":"sort-descending","category":"Text","tags":["filter","classify","arrange","order"],"variants":{"outline":"eb27"}},"sort-z-a":{"name":"sort-z-a","category":"Text","tags":["alphabet","letters","alphabetical"],"variants":{"outline":"f550"}},"sos":{"name":"sos","category":"","tags":["help","emergency","signal","message","alert"],"variants":{"outline":"f24a"}},"soup-off":{"name":"soup-off","category":"Food","tags":["food","cooking","restaurant","bowl","hot","kitchen"],"variants":{"outline":"f42d"}},"soup":{"name":"soup","category":"Food","tags":["food","cooking","restaurant","bowl","hot","kitchen"],"variants":{"outline":"ef2e","filled":"fe08"}},"source-code":{"name":"source-code","category":"","tags":["programming","coding","html","development"],"variants":{"outline":"f4a2"}},"space-off":{"name":"space-off","category":"Text","tags":["keyboard","type","gap"],"variants":{"outline":"f1aa"}},"space":{"name":"space","category":"Text","tags":["keyboard","type","gap"],"variants":{"outline":"ec0c"}},"spaces":{"name":"spaces","category":"","tags":[],"variants":{"outline":"fea4"}},"spacing-horizontal":{"name":"spacing-horizontal","category":"Document","tags":["align","between","text","gap"],"variants":{"outline":"ef54"}},"spacing-vertical":{"name":"spacing-vertical","category":"Document","tags":["align","between","text","gap"],"variants":{"outline":"ef55"}},"spade":{"name":"spade","category":"Shapes","tags":["cards","casino","poker","shapes","gamble"],"variants":{"outline":"effa","filled":"f6a3"}},"sparkles":{"name":"sparkles","category":"","tags":["star","light","fire","shine"],"variants":{"outline":"f6d7"}},"speakerphone":{"name":"speakerphone","category":"Media","tags":["voice","loud","microphone","loudspeaker","event","protest","speaker","shout","listen"],"variants":{"outline":"ed61"}},"speedboat":{"name":"speedboat","category":"Vehicles","tags":["motorboat","holiday","sea","ocean","engine","travel","lake","summer"],"variants":{"outline":"ed93"}},"sphere-off":{"name":"sphere-off","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab6"}},"sphere-plus":{"name":"sphere-plus","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab7"}},"sphere":{"name":"sphere","category":"Shapes","tags":["3d","pattern","abstract","geometric","shape"],"variants":{"outline":"fab8"}},"spider":{"name":"spider","category":"Animals","tags":["halloween","animal","scary","horror","cobweb","insect"],"variants":{"outline":"f293"}},"spiral-off":{"name":"spiral-off","category":"","tags":["hypnosis","rotation","growth"],"variants":{"outline":"f42e"}},"spiral":{"name":"spiral","category":"","tags":["hypnosis","rotation","growth"],"variants":{"outline":"f294"}},"sport-billard":{"name":"sport-billard","category":"Sport","tags":["pool","game","ball","pub","entertainment"],"variants":{"outline":"eee4"}},"spray":{"name":"spray","category":"","tags":["paint","clean","hygiene","graffiti"],"variants":{"outline":"f50b"}},"spy-off":{"name":"spy-off","category":"","tags":["security","incognito","privacy","browser","web"],"variants":{"outline":"f42f"}},"spy":{"name":"spy","category":"","tags":["security","incognito","privacy","browser","web"],"variants":{"outline":"f227"}},"sql":{"name":"sql","category":"Extensions","tags":["file","document","type","format","extencion"],"variants":{"outline":"f7c0"}},"square-arrow-down":{"name":"square-arrow-down","category":"Arrows","tags":["direction","shape","bottom","south"],"variants":{"outline":"f4b7","filled":"fb31"}},"square-arrow-left":{"name":"square-arrow-left","category":"Arrows","tags":["direction","shape","west"],"variants":{"outline":"f4b8","filled":"fb32"}},"square-arrow-right":{"name":"square-arrow-right","category":"Arrows","tags":["direction","shape","east"],"variants":{"outline":"f4b9","filled":"fb33"}},"square-arrow-up":{"name":"square-arrow-up","category":"Arrows","tags":["direction","shape","north","top"],"variants":{"outline":"f4ba","filled":"fb34"}},"square-asterisk":{"name":"square-asterisk","category":"","tags":["shapes","star","password","security"],"variants":{"outline":"f01a","filled":"fb35"}},"square-check":{"name":"square-check","category":"Shapes","tags":["checkbox","yes"],"variants":{"outline":"eb28","filled":"f76d"}},"square-chevron-down":{"name":"square-chevron-down","category":"Arrows","tags":["shape","south","bottom","direction"],"variants":{"outline":"f627","filled":"fb36"}},"square-chevron-left":{"name":"square-chevron-left","category":"Arrows","tags":["shape","direction","west"],"variants":{"outline":"f628","filled":"fb37"}},"square-chevron-right":{"name":"square-chevron-right","category":"Arrows","tags":["shape","direction","east"],"variants":{"outline":"f629","filled":"fb38"}},"square-chevron-up":{"name":"square-chevron-up","category":"Arrows","tags":["shape","direction","north","top"],"variants":{"outline":"f62a","filled":"fb39"}},"square-chevrons-down":{"name":"square-chevrons-down","category":"Arrows","tags":["shape","south","bottom","direction"],"variants":{"outline":"f64b","filled":"fb3a"}},"square-chevrons-left":{"name":"square-chevrons-left","category":"Arrows","tags":["shape","direction","west"],"variants":{"outline":"f64c","filled":"fb3b"}},"square-chevrons-right":{"name":"square-chevrons-right","category":"Arrows","tags":["shape","direction","east"],"variants":{"outline":"f64d","filled":"fb3c"}},"square-chevrons-up":{"name":"square-chevrons-up","category":"Arrows","tags":["shape","direction","north","top"],"variants":{"outline":"f64e","filled":"fb3d"}},"square-dot":{"name":"square-dot","category":"Shapes","tags":["corner","shape","element","point"],"variants":{"outline":"ed59","filled":"fb3e"}},"square-f0":{"name":"square-f0","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f526","filled":"f76e"}},"square-f1":{"name":"square-f1","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f527","filled":"f76f"}},"square-f2":{"name":"square-f2","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f528","filled":"f770"}},"square-f3":{"name":"square-f3","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f529","filled":"f771"}},"square-f4":{"name":"square-f4","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f52a","filled":"f772"}},"square-f5":{"name":"square-f5","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f52b","filled":"f773"}},"square-f6":{"name":"square-f6","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f52c","filled":"f774"}},"square-f7":{"name":"square-f7","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f52d","filled":"f775"}},"square-f8":{"name":"square-f8","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f52e","filled":"f776"}},"square-f9":{"name":"square-f9","category":"System","tags":["shape","keyboard","button","key","hotkey"],"variants":{"outline":"f52f","filled":"f777"}},"square-forbid-2":{"name":"square-forbid-2","category":"","tags":["box","disabled","off","block"],"variants":{"outline":"ed5a"}},"square-forbid":{"name":"square-forbid","category":"","tags":["box","disabled","off","block"],"variants":{"outline":"ed5b"}},"square-half":{"name":"square-half","category":"Design","tags":["shapes","pattern","geometric","highlight","geometry"],"variants":{"outline":"effb"}},"square-key":{"name":"square-key","category":"","tags":["shape","lock","door","acsses"],"variants":{"outline":"f638"}},"square-letter-a":{"name":"square-letter-a","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f47c","filled":"fe07"}},"square-letter-b":{"name":"square-letter-b","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f47d","filled":"fe06"}},"square-letter-c":{"name":"square-letter-c","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f47e","filled":"fe05"}},"square-letter-d":{"name":"square-letter-d","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f47f","filled":"fe04"}},"square-letter-e":{"name":"square-letter-e","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f480","filled":"fe03"}},"square-letter-f":{"name":"square-letter-f","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f481","filled":"fe02"}},"square-letter-g":{"name":"square-letter-g","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f482","filled":"fe01"}},"square-letter-h":{"name":"square-letter-h","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f483","filled":"fe00"}},"square-letter-i":{"name":"square-letter-i","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f484","filled":"fdff"}},"square-letter-j":{"name":"square-letter-j","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f485","filled":"fdfe"}},"square-letter-k":{"name":"square-letter-k","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f486","filled":"fdfd"}},"square-letter-l":{"name":"square-letter-l","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f487","filled":"fdfc"}},"square-letter-m":{"name":"square-letter-m","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f488","filled":"fdfb"}},"square-letter-n":{"name":"square-letter-n","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f489","filled":"fdfa"}},"square-letter-o":{"name":"square-letter-o","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f48a","filled":"fdf9"}},"square-letter-p":{"name":"square-letter-p","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f48b","filled":"fdf8"}},"square-letter-q":{"name":"square-letter-q","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f48c","filled":"fdf7"}},"square-letter-r":{"name":"square-letter-r","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f48d","filled":"fdf6"}},"square-letter-s":{"name":"square-letter-s","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f48e","filled":"fdf5"}},"square-letter-t":{"name":"square-letter-t","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f48f","filled":"fdf4"}},"square-letter-u":{"name":"square-letter-u","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f490","filled":"fdf3"}},"square-letter-v":{"name":"square-letter-v","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f4bb","filled":"fdf2"}},"square-letter-w":{"name":"square-letter-w","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f491","filled":"fdf1"}},"square-letter-x":{"name":"square-letter-x","category":"Letters","tags":["cancel","close","delete","remove","times","clear","no"],"variants":{"outline":"f4bc","filled":"fdf0"}},"square-letter-y":{"name":"square-letter-y","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f492","filled":"fdef"}},"square-letter-z":{"name":"square-letter-z","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f493","filled":"fdee"}},"square-minus":{"name":"square-minus","category":"Shapes","tags":["remove","indeterminate"],"variants":{"outline":"eb29","filled":"fb3f"}},"square-number-0":{"name":"square-number-0","category":"Numbers","tags":["zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eee5","filled":"f764"}},"square-number-1":{"name":"square-number-1","category":"Numbers","tags":["one","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eee6","filled":"f765"}},"square-number-2":{"name":"square-number-2","category":"Numbers","tags":["two","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eee7","filled":"f7fa"}},"square-number-3":{"name":"square-number-3","category":"Numbers","tags":["three","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eee8","filled":"f766"}},"square-number-4":{"name":"square-number-4","category":"Numbers","tags":["four","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eee9","filled":"f767"}},"square-number-5":{"name":"square-number-5","category":"Numbers","tags":["five","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eeea","filled":"f768"}},"square-number-6":{"name":"square-number-6","category":"Numbers","tags":["six","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eeeb","filled":"f769"}},"square-number-7":{"name":"square-number-7","category":"Numbers","tags":["seven","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eeec","filled":"f76a"}},"square-number-8":{"name":"square-number-8","category":"Numbers","tags":["eight","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eeed","filled":"f76b"}},"square-number-9":{"name":"square-number-9","category":"Numbers","tags":["nine","zero","number","digit","quantity","amount","order","maths","sum","total"],"variants":{"outline":"eeee","filled":"f76c"}},"square-off":{"name":"square-off","category":"Shapes","tags":["checkbox","box","shape"],"variants":{"outline":"eeef"}},"square-percentage":{"name":"square-percentage","category":"","tags":[],"variants":{"outline":"fd83"}},"square-plus-2":{"name":"square-plus-2","category":"Shapes","tags":[],"variants":{"outline":"fc96"}},"square-plus":{"name":"square-plus","category":"Shapes","tags":["add","create","new"],"variants":{"outline":"eb2a"}},"square-root-2":{"name":"square-root-2","category":"Math","tags":["mathematics","maths","science","calculate","calculator","algebra"],"variants":{"outline":"eef0"}},"square-root":{"name":"square-root","category":"Math","tags":["mathematics","maths","science","calculate","calculator","algebra"],"variants":{"outline":"eef1"}},"square-rotated-forbid-2":{"name":"square-rotated-forbid-2","category":"","tags":["shape","geometry","rhombus","ban","restricted"],"variants":{"outline":"f01b"}},"square-rotated-forbid":{"name":"square-rotated-forbid","category":"","tags":["shape","geometry","rhombus","ban","restricted"],"variants":{"outline":"f01c"}},"square-rotated-off":{"name":"square-rotated-off","category":"Shapes","tags":["shape","sign","geometry","geometric","quadrilateral","rhombus"],"variants":{"outline":"eef2"}},"square-rotated":{"name":"square-rotated","category":"Shapes","tags":["shape","sign","geometry","geometric","quadrilateral","rhombus"],"variants":{"outline":"ecdf","filled":"f6a4"}},"square-rounded-arrow-down":{"name":"square-rounded-arrow-down","category":"Arrows","tags":["shape","south","bottom","direction"],"variants":{"outline":"f639","filled":"f6db"}},"square-rounded-arrow-left":{"name":"square-rounded-arrow-left","category":"Arrows","tags":["shape","direction","west"],"variants":{"outline":"f63a","filled":"f6dc"}},"square-rounded-arrow-right":{"name":"square-rounded-arrow-right","category":"Arrows","tags":["shape","direction","east"],"variants":{"outline":"f63b","filled":"f6dd"}},"square-rounded-arrow-up":{"name":"square-rounded-arrow-up","category":"Arrows","tags":["shape","direction","north","top"],"variants":{"outline":"f63c","filled":"f6de"}},"square-rounded-check":{"name":"square-rounded-check","category":"Shapes","tags":["shape","tick","accpet","done","yes"],"variants":{"outline":"f63d","filled":"f6df"}},"square-rounded-chevron-down":{"name":"square-rounded-chevron-down","category":"Arrows","tags":["shape","south","bottom","direction"],"variants":{"outline":"f62b","filled":"f6e0"}},"square-rounded-chevron-left":{"name":"square-rounded-chevron-left","category":"Arrows","tags":["shape","direction","west"],"variants":{"outline":"f62c","filled":"f6e1"}},"square-rounded-chevron-right":{"name":"square-rounded-chevron-right","category":"Arrows","tags":["shape","direction","east"],"variants":{"outline":"f62d","filled":"f6e2"}},"square-rounded-chevron-up":{"name":"square-rounded-chevron-up","category":"Arrows","tags":["shape","direction","north","top"],"variants":{"outline":"f62e","filled":"f6e3"}},"square-rounded-chevrons-down":{"name":"square-rounded-chevrons-down","category":"Arrows","tags":["shape","south","bottom","direction"],"variants":{"outline":"f64f","filled":"f6e4"}},"square-rounded-chevrons-left":{"name":"square-rounded-chevrons-left","category":"Arrows","tags":["shape","direction","west"],"variants":{"outline":"f650","filled":"f6e5"}},"square-rounded-chevrons-right":{"name":"square-rounded-chevrons-right","category":"Arrows","tags":["shape","direction","east"],"variants":{"outline":"f651","filled":"f6e6"}},"square-rounded-chevrons-up":{"name":"square-rounded-chevrons-up","category":"Arrows","tags":["shape","direction","north","top"],"variants":{"outline":"f652","filled":"f6e7"}},"square-rounded-letter-a":{"name":"square-rounded-letter-a","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5ae","filled":"fded"}},"square-rounded-letter-b":{"name":"square-rounded-letter-b","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5af","filled":"fdec"}},"square-rounded-letter-c":{"name":"square-rounded-letter-c","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b0","filled":"fdeb"}},"square-rounded-letter-d":{"name":"square-rounded-letter-d","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b1","filled":"fdea"}},"square-rounded-letter-e":{"name":"square-rounded-letter-e","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b2","filled":"fde9"}},"square-rounded-letter-f":{"name":"square-rounded-letter-f","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b3","filled":"fde8"}},"square-rounded-letter-g":{"name":"square-rounded-letter-g","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b4","filled":"fde7"}},"square-rounded-letter-h":{"name":"square-rounded-letter-h","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b5","filled":"fde6"}},"square-rounded-letter-i":{"name":"square-rounded-letter-i","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b6","filled":"fde5"}},"square-rounded-letter-j":{"name":"square-rounded-letter-j","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b7","filled":"fde4"}},"square-rounded-letter-k":{"name":"square-rounded-letter-k","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b8","filled":"fde3"}},"square-rounded-letter-l":{"name":"square-rounded-letter-l","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5b9","filled":"fde2"}},"square-rounded-letter-m":{"name":"square-rounded-letter-m","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5ba","filled":"fde1"}},"square-rounded-letter-n":{"name":"square-rounded-letter-n","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5bb","filled":"fde0"}},"square-rounded-letter-o":{"name":"square-rounded-letter-o","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5bc","filled":"fddf"}},"square-rounded-letter-p":{"name":"square-rounded-letter-p","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5bd","filled":"fdde"}},"square-rounded-letter-q":{"name":"square-rounded-letter-q","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5be","filled":"fddd"}},"square-rounded-letter-r":{"name":"square-rounded-letter-r","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5bf","filled":"fddc"}},"square-rounded-letter-s":{"name":"square-rounded-letter-s","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5c0","filled":"fddb"}},"square-rounded-letter-t":{"name":"square-rounded-letter-t","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5c1","filled":"fdda"}},"square-rounded-letter-u":{"name":"square-rounded-letter-u","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5c2","filled":"fdd9"}},"square-rounded-letter-v":{"name":"square-rounded-letter-v","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5c3","filled":"fdd8"}},"square-rounded-letter-w":{"name":"square-rounded-letter-w","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5c4","filled":"fdd7"}},"square-rounded-letter-x":{"name":"square-rounded-letter-x","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5c5","filled":"fdd6"}},"square-rounded-letter-y":{"name":"square-rounded-letter-y","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5c6","filled":"fdd5"}},"square-rounded-letter-z":{"name":"square-rounded-letter-z","category":"Letters","tags":["shape","alphabet","sign","latin"],"variants":{"outline":"f5c7","filled":"fdd4"}},"square-rounded-minus-2":{"name":"square-rounded-minus-2","category":"Shapes","tags":[],"variants":{"outline":"fc97"}},"square-rounded-minus":{"name":"square-rounded-minus","category":"Shapes","tags":["shape","delete","remove","close","cancel"],"variants":{"outline":"f63e","filled":"fb40"}},"square-rounded-number-0":{"name":"square-rounded-number-0","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5c8","filled":"f778"}},"square-rounded-number-1":{"name":"square-rounded-number-1","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5c9","filled":"f779"}},"square-rounded-number-2":{"name":"square-rounded-number-2","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5ca","filled":"f77a"}},"square-rounded-number-3":{"name":"square-rounded-number-3","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5cb","filled":"f77b"}},"square-rounded-number-4":{"name":"square-rounded-number-4","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5cc","filled":"f77c"}},"square-rounded-number-5":{"name":"square-rounded-number-5","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5cd","filled":"f77d"}},"square-rounded-number-6":{"name":"square-rounded-number-6","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5ce","filled":"f77e"}},"square-rounded-number-7":{"name":"square-rounded-number-7","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5cf","filled":"f77f"}},"square-rounded-number-8":{"name":"square-rounded-number-8","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5d0","filled":"f780"}},"square-rounded-number-9":{"name":"square-rounded-number-9","category":"Numbers","tags":["shape","number","digit"],"variants":{"outline":"f5d1","filled":"f781"}},"square-rounded-percentage":{"name":"square-rounded-percentage","category":"","tags":[],"variants":{"outline":"fd84"}},"square-rounded-plus-2":{"name":"square-rounded-plus-2","category":"Shapes","tags":[],"variants":{"outline":"fc98"}},"square-rounded-plus":{"name":"square-rounded-plus","category":"Shapes","tags":["shape","add","new","create"],"variants":{"outline":"f63f","filled":"f6e8"}},"square-rounded-x":{"name":"square-rounded-x","category":"Shapes","tags":["shape","close","delete","cross"],"variants":{"outline":"f640","filled":"f6e9"}},"square-rounded":{"name":"square-rounded","category":"Shapes","tags":["shape","box","figure","geometry"],"variants":{"outline":"f59a","filled":"f6a5"}},"square-toggle-horizontal":{"name":"square-toggle-horizontal","category":"Design","tags":["box","clone","move"],"variants":{"outline":"eef3"}},"square-toggle":{"name":"square-toggle","category":"Design","tags":["box","clone","move"],"variants":{"outline":"eef4"}},"square-x":{"name":"square-x","category":"Shapes","tags":["cancel","close","delete","remove","times","clear","no"],"variants":{"outline":"eb2b","filled":"fb41"}},"square":{"name":"square","category":"Shapes","tags":["checkbox","box","shape"],"variants":{"outline":"eb2c","filled":"fc40"}},"squares-diagonal":{"name":"squares-diagonal","category":"Design","tags":["boxes","layers"],"variants":{"outline":"eef5"}},"squares-selected":{"name":"squares-selected","category":"","tags":[],"variants":{"outline":"fea3"}},"squares":{"name":"squares","category":"Design","tags":["boxes","layers"],"variants":{"outline":"eef6","filled":"fe9f"}},"stack-2":{"name":"stack-2","category":"Design","tags":["pile","elements","layout","wrap"],"variants":{"outline":"eef7","filled":"fdd3"}},"stack-3":{"name":"stack-3","category":"Design","tags":["pile","elements","layout","wrap"],"variants":{"outline":"ef9d","filled":"fdd2"}},"stack-back":{"name":"stack-back","category":"","tags":[],"variants":{"outline":"fd26"}},"stack-backward":{"name":"stack-backward","category":"","tags":[],"variants":{"outline":"fd27"}},"stack-forward":{"name":"stack-forward","category":"","tags":[],"variants":{"outline":"fd28"}},"stack-front":{"name":"stack-front","category":"","tags":[],"variants":{"outline":"fd29"}},"stack-middle":{"name":"stack-middle","category":"","tags":[],"variants":{"outline":"fd2a"}},"stack-pop":{"name":"stack-pop","category":"Design","tags":["data","level","layout","arrow","out"],"variants":{"outline":"f234"}},"stack-push":{"name":"stack-push","category":"Design","tags":["arrange","data","level","layout","arrow"],"variants":{"outline":"f235"}},"stack":{"name":"stack","category":"Design","tags":["pile","elements","layout","wrap"],"variants":{"outline":"eb2d","filled":"fdd1"}},"stairs-down":{"name":"stairs-down","category":"Map","tags":["building","step","floor","staircase","clamber"],"variants":{"outline":"eca4"}},"stairs-up":{"name":"stairs-up","category":"Map","tags":["building","step","floor","staircase","entryway"],"variants":{"outline":"eca5"}},"stairs":{"name":"stairs","category":"Map","tags":["building","step","floor","staircase"],"variants":{"outline":"eca6"}},"star-half":{"name":"star-half","category":"System","tags":["favorite","like","mark","bookmark","grade"],"variants":{"outline":"ed19","filled":"f6a7"}},"star-off":{"name":"star-off","category":"System","tags":["favorite","like","mark","bookmark","grade"],"variants":{"outline":"ed62"}},"star":{"name":"star","category":"System","tags":["favorite","like","mark","bookmark","grade"],"variants":{"outline":"eb2e","filled":"f6a6"}},"stars-off":{"name":"stars-off","category":"System","tags":["favorite","like","mark","grade","bookmark","space","universe","extraterrestrial","galaxy"],"variants":{"outline":"f430"}},"stars":{"name":"stars","category":"System","tags":["favorite","like","mark","grade","bookmark","space","universe","extraterrestrial","galaxy"],"variants":{"outline":"ed38","filled":"f6a8"}},"status-change":{"name":"status-change","category":"","tags":["available","unavailable","switch"],"variants":{"outline":"f3b0"}},"steam":{"name":"steam","category":"","tags":["app","social","games","platform","software"],"variants":{"outline":"f24b"}},"steering-wheel-off":{"name":"steering-wheel-off","category":"Vehicles","tags":["drive","vehicle","direction","turn","holding","racing"],"variants":{"outline":"f431"}},"steering-wheel":{"name":"steering-wheel","category":"Vehicles","tags":["drive","vehicle","direction","turn","holding","racing"],"variants":{"outline":"ec7b","filled":"ff03"}},"step-into":{"name":"step-into","category":"Arrows","tags":["vector","placement","among","within"],"variants":{"outline":"ece0"}},"step-out":{"name":"step-out","category":"Arrows","tags":["vector","placement","outside","except"],"variants":{"outline":"ece1"}},"stereo-glasses":{"name":"stereo-glasses","category":"","tags":["cinema","3d","eyewear","film","movie"],"variants":{"outline":"f4cb"}},"stethoscope-off":{"name":"stethoscope-off","category":"Health","tags":["doctor","medical","physician","test","examination","health","illness","sickness","scrutiny","hospital"],"variants":{"outline":"f432"}},"stethoscope":{"name":"stethoscope","category":"Health","tags":["doctor","medical","physician","test","examination","health","illness","sickness","scrutiny","hospital"],"variants":{"outline":"edbe"}},"sticker-2":{"name":"sticker-2","category":"","tags":["label-2","adhesive","decorative-label","tag-2","sticky-note","decal","post-it","sticker-label","paper-sticker","2nd-sticker"],"variants":{"outline":"fd3d"}},"sticker":{"name":"sticker","category":"","tags":["label","stamp","adhesive"],"variants":{"outline":"eb2f"}},"storm-off":{"name":"storm-off","category":"Weather","tags":["weather","cloud","lighting","rain","wind","tornado"],"variants":{"outline":"f433"}},"storm":{"name":"storm","category":"Weather","tags":["weather","cloud","lighting","rain","wind","tornado"],"variants":{"outline":"f24c"}},"stretching-2":{"name":"stretching-2","category":"Sport","tags":[],"variants":{"outline":"fa6d"}},"stretching":{"name":"stretching","category":"Sport","tags":["exercise","yoga","workout","fitness","gym","body"],"variants":{"outline":"f2db"}},"strikethrough":{"name":"strikethrough","category":"Text","tags":["typography","horizontal","deleted","removed","unimportant"],"variants":{"outline":"eb9e"}},"submarine":{"name":"submarine","category":"Vehicles","tags":["sea","ocean","underwater","shipwater","war"],"variants":{"outline":"ed94"}},"subscript":{"name":"subscript","category":"Text","tags":["typography","below","formula","maths","fraction"],"variants":{"outline":"eb9f"}},"subtask":{"name":"subtask","category":"","tags":["management","break down","work"],"variants":{"outline":"ec9f"}},"sum-off":{"name":"sum-off","category":"Math","tags":["equation","add","plus","amount","total"],"variants":{"outline":"f1ab"}},"sum":{"name":"sum","category":"Math","tags":["equation","add","plus","amount","total"],"variants":{"outline":"eb73"}},"sun-electricity":{"name":"sun-electricity","category":"","tags":[],"variants":{"outline":"fcc2"}},"sun-high":{"name":"sun-high","category":"Weather","tags":["temperature","hot","wheater","thermometer","forecast"],"variants":{"outline":"f236"}},"sun-low":{"name":"sun-low","category":"Weather","tags":["temperature","cold","wheater","thermometer","forecast"],"variants":{"outline":"f237"}},"sun-moon":{"name":"sun-moon","category":"Weather","tags":["weather","day","night","hot","cold"],"variants":{"outline":"f4a3"}},"sun-off":{"name":"sun-off","category":"Weather","tags":["weather","light","mode","brightness"],"variants":{"outline":"ed63"}},"sun-wind":{"name":"sun-wind","category":"Weather","tags":["temperature","wheater","thermometer","forecast","windy"],"variants":{"outline":"f238"}},"sun":{"name":"sun","category":"Weather","tags":["weather","light","mode","brightness"],"variants":{"outline":"eb30","filled":"f6a9"}},"sunglasses":{"name":"sunglasses","category":"Health","tags":["summer","sun","look","shades","eyewear"],"variants":{"outline":"f239","filled":"fec8"}},"sunrise":{"name":"sunrise","category":"Weather","tags":["west","horizon","landscape","evening"],"variants":{"outline":"ef1c"}},"sunset-2":{"name":"sunset-2","category":"Weather","tags":["east","horizon","landscape","morning"],"variants":{"outline":"f23a"}},"sunset":{"name":"sunset","category":"Weather","tags":["east","horizon","landscape","morning"],"variants":{"outline":"ec31"}},"superscript":{"name":"superscript","category":"Text","tags":["typography","above","maths","fraction","trademark","footer"],"variants":{"outline":"eba0"}},"svg":{"name":"svg","category":"Extensions","tags":["file","format","extension","graphic","filetype"],"variants":{"outline":"f25a"}},"swimming":{"name":"swimming","category":"Sport","tags":["sport","water","pool","style","athletics","competitive"],"variants":{"outline":"ec92"}},"swipe-down":{"name":"swipe-down","category":"Arrows","tags":["gesture","swipe","downward-swipe","scroll-down","slide-down","touch-gesture","screen-swipe","gesture-control","interaction","user-swipe"],"variants":{"outline":"fd5e","filled":"ff57"}},"swipe-left":{"name":"swipe-left","category":"Arrows","tags":["gesture","swipe","leftward-swipe","scroll-left","slide-left","touch-gesture","screen-swipe","gesture-control","interaction","user-swipe"],"variants":{"outline":"fd5f","filled":"ff56"}},"swipe-right":{"name":"swipe-right","category":"Arrows","tags":["gesture","swipe","rightward-swipe","scroll-right","slide-right","touch-gesture","screen-swipe","gesture-control","interaction","user-swipe"],"variants":{"outline":"fd60","filled":"ff55"}},"swipe-up":{"name":"swipe-up","category":"Arrows","tags":["gesture","swipe","upward-swipe","scroll-up","slide-up","touch-gesture","screen-swipe","gesture-control","interaction","user-swipe"],"variants":{"outline":"fd61","filled":"ff54"}},"swipe":{"name":"swipe","category":"","tags":["right","left","gesture","scroll"],"variants":{"outline":"f551"}},"switch-2":{"name":"switch-2","category":"Arrows","tags":["arrows","direction","music","spotify","change"],"variants":{"outline":"edbf"}},"switch-3":{"name":"switch-3","category":"Arrows","tags":["arrows","direction","music","spotify","change"],"variants":{"outline":"edc0"}},"switch-horizontal":{"name":"switch-horizontal","category":"Arrows","tags":["toggle","left","right","arrows"],"variants":{"outline":"eb31"}},"switch-vertical":{"name":"switch-vertical","category":"Arrows","tags":["toggle","up","down","arrows"],"variants":{"outline":"eb32"}},"switch":{"name":"switch","category":"Arrows","tags":["toggle","arrows"],"variants":{"outline":"eb33"}},"sword-off":{"name":"sword-off","category":"","tags":["weapon","knight","blade","war","minecraft","warrior"],"variants":{"outline":"f434"}},"sword":{"name":"sword","category":"","tags":["weapon","knight","blade","war","minecraft","warrior"],"variants":{"outline":"f030"}},"swords":{"name":"swords","category":"","tags":["weapon","knight","blade","war","minecraft","warrior"],"variants":{"outline":"f132"}},"table-alias":{"name":"table-alias","category":"Database","tags":["data","database","chart"],"variants":{"outline":"f25b"}},"table-column":{"name":"table-column","category":"Database","tags":["table","column","data-table","spreadsheet","table-structure","columnar","information","grid","table-columnar","dataset"],"variants":{"outline":"faff"}},"table-down":{"name":"table-down","category":"Database","tags":["table","down","arrow-down","table-arrow","descending","sort-down","data-table","directional","arrange-down","table-order"],"variants":{"outline":"fa1c"}},"table-export":{"name":"table-export","category":"Database","tags":["spreadsheet","layout","grid","arrange","row","column","cells","sheet","arrow"],"variants":{"outline":"eef8"}},"table-heart":{"name":"table-heart","category":"Database","tags":["table","heart","like","favorite","love","data-table","table-icon","heart-symbol","table-like","table-favorite"],"variants":{"outline":"fa1d"}},"table-import":{"name":"table-import","category":"Database","tags":["spreadsheet","layout","grid","arrange","row","column","cells","sheet","arrow"],"variants":{"outline":"eef9"}},"table-minus":{"name":"table-minus","category":"Database","tags":["table","minus","remove","subtract","delete","data-table","table-operation","table-remove","subtract-from-table","exclude"],"variants":{"outline":"fa1e"}},"table-off":{"name":"table-off","category":"Database","tags":["spreadsheet","layout","grid","arrange","row","column"],"variants":{"outline":"eefa"}},"table-options":{"name":"table-options","category":"Database","tags":["edit","chart","customization","repair","settings"],"variants":{"outline":"f25c"}},"table-plus":{"name":"table-plus","category":"Database","tags":["table","plus","add","insert","include","data-table","table-operation","table-add","add-to-table","include-in-table"],"variants":{"outline":"fa1f"}},"table-row":{"name":"table-row","category":"Database","tags":["table","row","data-table","spreadsheet","table-structure","row-wise","information","grid","table-row-wise","dataset"],"variants":{"outline":"fb00"}},"table-share":{"name":"table-share","category":"Database","tags":["table","share","share-table","data-sharing","collaboration","data-table","table-collaboration","table-cooperation","share-data","spreadsheet"],"variants":{"outline":"fa20"}},"table-shortcut":{"name":"table-shortcut","category":"Database","tags":["data","database","chart","network","server"],"variants":{"outline":"f25d"}},"table":{"name":"table","category":"Database","tags":["spreadsheet","layout","grid","arrange","row","column"],"variants":{"outline":"eba1","filled":"f782"}},"tag-off":{"name":"tag-off","category":"E-commerce","tags":["label","price"],"variants":{"outline":"efc0"}},"tag-starred":{"name":"tag-starred","category":"E-commerce","tags":["tag","starred","star","favorite","label","tagging","tagged-star","marked","tag-star","highlighted"],"variants":{"outline":"fc99"}},"tag":{"name":"tag","category":"E-commerce","tags":["label","price"],"variants":{"outline":"eb34","filled":"ff02"}},"tags-off":{"name":"tags-off","category":"E-commerce","tags":["label","price","shopping","promotion"],"variants":{"outline":"efc1"}},"tags":{"name":"tags","category":"E-commerce","tags":["label","price","shopping","promotion"],"variants":{"outline":"ef86","filled":"ff01"}},"tallymark-1":{"name":"tallymark-1","category":"Math","tags":["sign","symbol","numerical","consistent","system","counting"],"variants":{"outline":"ec46"}},"tallymark-2":{"name":"tallymark-2","category":"Math","tags":["sign","symbol","numerical","consistent","system","counting"],"variants":{"outline":"ec47"}},"tallymark-3":{"name":"tallymark-3","category":"Math","tags":["sign","symbol","numerical","consistent","system","counting"],"variants":{"outline":"ec48"}},"tallymark-4":{"name":"tallymark-4","category":"Math","tags":["sign","symbol","numerical","consistent","system","counting"],"variants":{"outline":"ec49"}},"tallymarks":{"name":"tallymarks","category":"Math","tags":["sign","symbol","numerical","consistent","system","counting"],"variants":{"outline":"ec4a"}},"tank":{"name":"tank","category":"Vehicles","tags":["war","military","armour","vehicle","gun","attack","shoot","battle","battlefield"],"variants":{"outline":"ed95"}},"target-arrow":{"name":"target-arrow","category":"Sport","tags":["goal","aim","archery","archer"],"variants":{"outline":"f51a"}},"target-off":{"name":"target-off","category":"Map","tags":["focus","bullseye","aim"],"variants":{"outline":"f1ad"}},"target":{"name":"target","category":"Map","tags":["focus","bullseye","aim"],"variants":{"outline":"eb35"}},"tax-euro":{"name":"tax-euro","category":"","tags":[],"variants":{"outline":"fef0"}},"tax-pound":{"name":"tax-pound","category":"","tags":[],"variants":{"outline":"feef"}},"tax":{"name":"tax","category":"","tags":[],"variants":{"outline":"feee"}},"teapot":{"name":"teapot","category":"","tags":["kettle","kitchen","hot","coffee","kitchenware"],"variants":{"outline":"f552"}},"telescope-off":{"name":"telescope-off","category":"","tags":["astronomy","moon","observation","vision","space","astrology"],"variants":{"outline":"f1ae"}},"telescope":{"name":"telescope","category":"","tags":["astronomy","moon","observation","vision","space","astrology"],"variants":{"outline":"f07d"}},"temperature-celsius":{"name":"temperature-celsius","category":"Weather","tags":["weather","celcius","fahrenheit","cold","hot"],"variants":{"outline":"eb36"}},"temperature-fahrenheit":{"name":"temperature-fahrenheit","category":"Weather","tags":["weather","celcius","fahrenheit","cold","hot"],"variants":{"outline":"eb37"}},"temperature-minus":{"name":"temperature-minus","category":"Weather","tags":["weather","celcius","fahrenheit","cold","hot"],"variants":{"outline":"ebed"}},"temperature-off":{"name":"temperature-off","category":"Weather","tags":["weather","celcius","fahrenheit","cold","hot"],"variants":{"outline":"f1af"}},"temperature-plus":{"name":"temperature-plus","category":"Weather","tags":["weather","celcius","fahrenheit","cold","hot"],"variants":{"outline":"ebee"}},"temperature-snow":{"name":"temperature-snow","category":"","tags":[],"variants":{"outline":"fda3"}},"temperature-sun":{"name":"temperature-sun","category":"","tags":[],"variants":{"outline":"fda4"}},"temperature":{"name":"temperature","category":"Weather","tags":["weather","celcius","fahrenheit","cold","hot"],"variants":{"outline":"eb38"}},"template-off":{"name":"template-off","category":"Design","tags":["grid","columns","masonry","collage"],"variants":{"outline":"f1b0"}},"template":{"name":"template","category":"Design","tags":["grid","columns","masonry","collage"],"variants":{"outline":"eb39"}},"tent-off":{"name":"tent-off","category":"Map","tags":["camping","holiday","vacation","outdoor","survival","travel","adventure"],"variants":{"outline":"f435"}},"tent":{"name":"tent","category":"Map","tags":["camping","holiday","vacation","outdoor","survival","travel","adventure"],"variants":{"outline":"eefb"}},"terminal-2":{"name":"terminal-2","category":"","tags":["console","command","git","command line","command prompt"],"variants":{"outline":"ebef"}},"terminal":{"name":"terminal","category":"","tags":["console","command","git","command line","command prompt"],"variants":{"outline":"ebdc"}},"test-pipe-2":{"name":"test-pipe-2","category":"","tags":["sample","color","flask","liquid","container","glass","chemistry","test","laboratory","experimental","beta"],"variants":{"outline":"f0a4","filled":"ff53"}},"test-pipe-off":{"name":"test-pipe-off","category":"","tags":["sample","color","flask","liquid","container","glass","chemistry","test","laboratory","experimental","beta"],"variants":{"outline":"f1b1"}},"test-pipe":{"name":"test-pipe","category":"","tags":["sample","color","flask","liquid","container","glass","chemistry","test","laboratory","experimental","beta"],"variants":{"outline":"eb3a"}},"tex":{"name":"tex","category":"Text","tags":["file","document","type","format","filetype"],"variants":{"outline":"f4e0"}},"text-caption":{"name":"text-caption","category":"Text","tags":["document","file","lettering","image","picture"],"variants":{"outline":"f4a4"}},"text-color":{"name":"text-color","category":"Text","tags":["format","document","file","edit"],"variants":{"outline":"f2dc"}},"text-decrease":{"name":"text-decrease","category":"Text","tags":["indent","minimalize","smaller","editor","size","edit"],"variants":{"outline":"f202"}},"text-direction-ltr":{"name":"text-direction-ltr","category":"Text","tags":["left","right","bidi"],"variants":{"outline":"eefc"}},"text-direction-rtl":{"name":"text-direction-rtl","category":"Text","tags":["left","right","bidi"],"variants":{"outline":"eefd"}},"text-grammar":{"name":"text-grammar","category":"","tags":[],"variants":{"outline":"fd6d"}},"text-increase":{"name":"text-increase","category":"Text","tags":["expand","margin","size","editor","edit"],"variants":{"outline":"f203"}},"text-orientation":{"name":"text-orientation","category":"Text","tags":["aglinment","file","document","edit","right"],"variants":{"outline":"f2a4"}},"text-plus":{"name":"text-plus","category":"Text","tags":["add","new","document","file","edit"],"variants":{"outline":"f2a5"}},"text-recognition":{"name":"text-recognition","category":"Text","tags":["language","processing","detection"],"variants":{"outline":"f204"}},"text-resize":{"name":"text-resize","category":"Design","tags":["edit","editor","scale","font","bigger","smaller"],"variants":{"outline":"ef87"}},"text-scan-2":{"name":"text-scan-2","category":"","tags":[],"variants":{"outline":"fcc3"}},"text-size":{"name":"text-size","category":"Text","tags":["font","edit","document","type","letter"],"variants":{"outline":"f2b1"}},"text-spellcheck":{"name":"text-spellcheck","category":"Text","tags":["grammar","spelling","ortography"],"variants":{"outline":"f2a6"}},"text-wrap-column":{"name":"text-wrap-column","category":"Text","tags":["wrap","column","text","typography","writing"],"variants":{"outline":"feb2"}},"text-wrap-disabled":{"name":"text-wrap-disabled","category":"Text","tags":["text","alignment","position"],"variants":{"outline":"eca7"}},"text-wrap":{"name":"text-wrap","category":"Text","tags":["wrap","column","text","typography","writing"],"variants":{"outline":"ebdd"}},"texture":{"name":"texture","category":"","tags":["pattern","abstract","decoration","background","fashion"],"variants":{"outline":"f51b"}},"theater":{"name":"theater","category":"Map","tags":["movie","film","show","mask","entertainment"],"variants":{"outline":"f79b"}},"thermometer":{"name":"thermometer","category":"Health","tags":["temperature","hot","cold","weather","medical","fever","celsius"],"variants":{"outline":"ef67"}},"thumb-down-off":{"name":"thumb-down-off","category":"System","tags":["dislike","bad","emotion"],"variants":{"outline":"f436"}},"thumb-down":{"name":"thumb-down","category":"System","tags":["dislike","bad","emotion"],"variants":{"outline":"eb3b","filled":"f6aa"}},"thumb-up-off":{"name":"thumb-up-off","category":"System","tags":["like","emotion","good","love"],"variants":{"outline":"f437"}},"thumb-up":{"name":"thumb-up","category":"System","tags":["like","emotion","good","love"],"variants":{"outline":"eb3c","filled":"f6ab"}},"tic-tac":{"name":"tic-tac","category":"Sport","tags":["toe","game","strategy","cross","circle"],"variants":{"outline":"f51c"}},"ticket-off":{"name":"ticket-off","category":"","tags":["cinema","event","theatre","entry","fine","coupon","pass"],"variants":{"outline":"f1b2"}},"ticket":{"name":"ticket","category":"","tags":["cinema","event","theatre","entry","fine","coupon","pass"],"variants":{"outline":"eb3d"}},"tie":{"name":"tie","category":"","tags":["suit","buisness","fashion","clothes","accessory","clothing"],"variants":{"outline":"f07e"}},"tilde":{"name":"tilde","category":"","tags":["key","sign","about","rounding","math"],"variants":{"outline":"f4a5"}},"tilt-shift-off":{"name":"tilt-shift-off","category":"Photography","tags":["filter","shift","photography","photo"],"variants":{"outline":"f1b3"}},"tilt-shift":{"name":"tilt-shift","category":"Photography","tags":["filter","shift","photography","photo"],"variants":{"outline":"eefe","filled":"fec7"}},"time-duration-0":{"name":"time-duration-0","category":"System","tags":[],"variants":{"outline":"fad4"}},"time-duration-10":{"name":"time-duration-10","category":"System","tags":[],"variants":{"outline":"fad5"}},"time-duration-15":{"name":"time-duration-15","category":"System","tags":[],"variants":{"outline":"fad6"}},"time-duration-30":{"name":"time-duration-30","category":"System","tags":[],"variants":{"outline":"fad7"}},"time-duration-45":{"name":"time-duration-45","category":"System","tags":[],"variants":{"outline":"fad8"}},"time-duration-5":{"name":"time-duration-5","category":"System","tags":[],"variants":{"outline":"fad9"}},"time-duration-60":{"name":"time-duration-60","category":"System","tags":[],"variants":{"outline":"fada"}},"time-duration-90":{"name":"time-duration-90","category":"System","tags":[],"variants":{"outline":"fadb"}},"time-duration-off":{"name":"time-duration-off","category":"System","tags":[],"variants":{"outline":"fadc"}},"timeline-event-exclamation":{"name":"timeline-event-exclamation","category":"Development","tags":["calendar","schedule","date","error","warring"],"variants":{"outline":"f662"}},"timeline-event-minus":{"name":"timeline-event-minus","category":"Development","tags":["calendar","schedule","date","delete","remove"],"variants":{"outline":"f663"}},"timeline-event-plus":{"name":"timeline-event-plus","category":"Development","tags":["calendar","schedule","date","add","new"],"variants":{"outline":"f664"}},"timeline-event-text":{"name":"timeline-event-text","category":"Development","tags":["calendar","schedule","date","message","chat"],"variants":{"outline":"f665"}},"timeline-event-x":{"name":"timeline-event-x","category":"Development","tags":["calendar","schedule","date","remove","cross","delete"],"variants":{"outline":"f666"}},"timeline-event":{"name":"timeline-event","category":"Development","tags":["process","plan","planning","diagram","chart","roadmap"],"variants":{"outline":"f553","filled":"fd18"}},"timeline":{"name":"timeline","category":"","tags":["process","plan","planning","diagram","chart","roadmap"],"variants":{"outline":"f031"}},"timezone":{"name":"timezone","category":"","tags":[],"variants":{"outline":"feed"}},"tip-jar-euro":{"name":"tip-jar-euro","category":"","tags":[],"variants":{"outline":"feec"}},"tip-jar-pound":{"name":"tip-jar-pound","category":"","tags":[],"variants":{"outline":"feeb"}},"tip-jar":{"name":"tip-jar","category":"","tags":[],"variants":{"outline":"feea"}},"tir":{"name":"tir","category":"Vehicles","tags":["delivery","transportation","transport","logistics","vehicle","goods"],"variants":{"outline":"ebf0"}},"toggle-left":{"name":"toggle-left","category":"System","tags":["on","off","switch"],"variants":{"outline":"eb3e","filled":"fec0"}},"toggle-right":{"name":"toggle-right","category":"System","tags":["on","off","switch"],"variants":{"outline":"eb3f","filled":"febf"}},"toilet-paper-off":{"name":"toilet-paper-off","category":"","tags":["bathroom","hygiene","wc","cleaning","rubbing"],"variants":{"outline":"f1b4"}},"toilet-paper":{"name":"toilet-paper","category":"","tags":["bathroom","hygiene","wc","cleaning","rubbing"],"variants":{"outline":"efd3"}},"toml":{"name":"toml","category":"Extensions","tags":[],"variants":{"outline":"fa5d"}},"tool":{"name":"tool","category":"System","tags":["preferences","edit","settings"],"variants":{"outline":"eb40"}},"tools-kitchen-2-off":{"name":"tools-kitchen-2-off","category":"Map","tags":["knife","fork","spoon","cutlery","eat","restaurant","menu","cafe","cook","cut","soup","dinner","breakfast","dining","plate","dish"],"variants":{"outline":"f1b5"}},"tools-kitchen-2":{"name":"tools-kitchen-2","category":"Map","tags":["knife","fork","spoon","cutlery","eat","restaurant","menu","cafe","cook","cut","soup","dinner","breakfast","dining","plate","dish"],"variants":{"outline":"eeff"}},"tools-kitchen-3":{"name":"tools-kitchen-3","category":"","tags":[],"variants":{"outline":"fd2b"}},"tools-kitchen-off":{"name":"tools-kitchen-off","category":"Map","tags":["knife","fork","spoon","cutlery","eat","restaurant","menu","cafe","cook","cut","soup","dinner","breakfast","dining","plate","dish"],"variants":{"outline":"f1b6"}},"tools-kitchen":{"name":"tools-kitchen","category":"Map","tags":["knife","fork","spoon","cutlery","eat","restaurant","menu","cafe","cook","cut","soup","dinner","breakfast","dining","plate","dish"],"variants":{"outline":"ed64"}},"tools-off":{"name":"tools-off","category":"Design","tags":["preferences","edit","settings"],"variants":{"outline":"f1b7"}},"tools":{"name":"tools","category":"Design","tags":["preferences","edit","settings"],"variants":{"outline":"ebca"}},"tooltip":{"name":"tooltip","category":"System","tags":["info","help","information","advise"],"variants":{"outline":"f2dd"}},"topology-bus":{"name":"topology-bus","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5d9"}},"topology-complex":{"name":"topology-complex","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5da"}},"topology-full-hierarchy":{"name":"topology-full-hierarchy","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5db"}},"topology-full":{"name":"topology-full","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5dc"}},"topology-ring-2":{"name":"topology-ring-2","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5dd"}},"topology-ring-3":{"name":"topology-ring-3","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5de"}},"topology-ring":{"name":"topology-ring","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5df"}},"topology-star-2":{"name":"topology-star-2","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5e0"}},"topology-star-3":{"name":"topology-star-3","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5e1"}},"topology-star-ring-2":{"name":"topology-star-ring-2","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5e2"}},"topology-star-ring-3":{"name":"topology-star-ring-3","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5e3"}},"topology-star-ring":{"name":"topology-star-ring","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5e4"}},"topology-star":{"name":"topology-star","category":"Computers","tags":["hierarchy","network","structure","connection"],"variants":{"outline":"f5e5"}},"torii":{"name":"torii","category":"Symbols","tags":["japan","gate","asia","building","monument"],"variants":{"outline":"f59b"}},"tornado":{"name":"tornado","category":"Weather","tags":["wind","rotate","storm","spin","spinning","air","catastrophe","vortex"],"variants":{"outline":"ece2"}},"tournament":{"name":"tournament","category":"Sport","tags":["competition","competitor","sport","game","play","champion"],"variants":{"outline":"ecd0"}},"tower-off":{"name":"tower-off","category":"Buildings","tags":["building","castle","fortress","palace"],"variants":{"outline":"f2ca"}},"tower":{"name":"tower","category":"Buildings","tags":["building","castle","fortress","palace"],"variants":{"outline":"f2cb"}},"track":{"name":"track","category":"Vehicles","tags":["trail","path","route","train","railway","railroad"],"variants":{"outline":"ef00"}},"tractor":{"name":"tractor","category":"Vehicles","tags":["countryside","vehicle","harvest","machine","motor","farm","trailer"],"variants":{"outline":"ec0d"}},"trademark":{"name":"trademark","category":"Symbols","tags":["legal","product","company","own","ownership","brand","law","right","certificate"],"variants":{"outline":"ec0e"}},"traffic-cone-off":{"name":"traffic-cone-off","category":"Map","tags":["street","road","vehicle","repair","warning","lane","drive"],"variants":{"outline":"f1b8"}},"traffic-cone":{"name":"traffic-cone","category":"Map","tags":["street","road","vehicle","repair","warning","lane","drive"],"variants":{"outline":"ec0f"}},"traffic-lights-off":{"name":"traffic-lights-off","category":"Map","tags":["street","road","green","red","yellow","vehicle","stop","drive","crossing","pedestrian","crossroads","junction","intersection"],"variants":{"outline":"f1b9"}},"traffic-lights":{"name":"traffic-lights","category":"Map","tags":["street","road","green","red","yellow","vehicle","stop","drive","crossing","pedestrian","crossroads","junction","intersection"],"variants":{"outline":"ed39"}},"train":{"name":"train","category":"Vehicles","tags":["railway","rails","tgv","journey","travel","network","route","passenger"],"variants":{"outline":"ed96"}},"transaction-bitcoin":{"name":"transaction-bitcoin","category":"","tags":[],"variants":{"outline":"fd6e"}},"transaction-dollar":{"name":"transaction-dollar","category":"E-commerce","tags":[],"variants":{"outline":"fd6f"}},"transaction-euro":{"name":"transaction-euro","category":"E-commerce","tags":[],"variants":{"outline":"fd70"}},"transaction-pound":{"name":"transaction-pound","category":"E-commerce","tags":[],"variants":{"outline":"fd71"}},"transaction-rupee":{"name":"transaction-rupee","category":"","tags":[],"variants":{"outline":"fd85"}},"transaction-yen":{"name":"transaction-yen","category":"E-commerce","tags":[],"variants":{"outline":"fd72"}},"transaction-yuan":{"name":"transaction-yuan","category":"E-commerce","tags":[],"variants":{"outline":"fd73"}},"transfer-in":{"name":"transfer-in","category":"E-commerce","tags":["input","insert","import","send"],"variants":{"outline":"ef2f"}},"transfer-out":{"name":"transfer-out","category":"E-commerce","tags":["output","export","send"],"variants":{"outline":"ef30"}},"transfer-vertical":{"name":"transfer-vertical","category":"","tags":[],"variants":{"outline":"fc1e"}},"transfer":{"name":"transfer","category":"","tags":[],"variants":{"outline":"fc1f"}},"transform-point-bottom-left":{"name":"transform-point-bottom-left","category":"","tags":[],"variants":{"outline":"fda5"}},"transform-point-bottom-right":{"name":"transform-point-bottom-right","category":"","tags":[],"variants":{"outline":"fda6"}},"transform-point-top-left":{"name":"transform-point-top-left","category":"","tags":[],"variants":{"outline":"fda7"}},"transform-point-top-right":{"name":"transform-point-top-right","category":"","tags":[],"variants":{"outline":"fda8"}},"transform-point":{"name":"transform-point","category":"","tags":[],"variants":{"outline":"fda9"}},"transform":{"name":"transform","category":"","tags":["change","convert","adaptation","direction"],"variants":{"outline":"f38e","filled":"f6ac"}},"transition-bottom":{"name":"transition-bottom","category":"Arrows","tags":["direction","south","down","moving"],"variants":{"outline":"f2b2","filled":"fdd0"}},"transition-left":{"name":"transition-left","category":"Arrows","tags":["direction","west","moving"],"variants":{"outline":"f2b3","filled":"fdcf"}},"transition-right":{"name":"transition-right","category":"Arrows","tags":["direction","east","moving"],"variants":{"outline":"f2b4","filled":"fdce"}},"transition-top":{"name":"transition-top","category":"Arrows","tags":["direction","north","up","moving"],"variants":{"outline":"f2b5","filled":"fdcd"}},"trash-off":{"name":"trash-off","category":"System","tags":["garbage","delete","remove","bin","ash-bin","uninstall","dustbin"],"variants":{"outline":"ed65"}},"trash-x":{"name":"trash-x","category":"System","tags":["bin","litter","recycle","remove","delete","throw","away","waste"],"variants":{"outline":"ef88","filled":"f784"}},"trash":{"name":"trash","category":"System","tags":["garbage","delete","remove","bin","ash-bin","uninstall","dustbin"],"variants":{"outline":"eb41","filled":"f783"}},"treadmill":{"name":"treadmill","category":"Sport","tags":[],"variants":{"outline":"fa6e"}},"tree":{"name":"tree","category":"Map","tags":["nature","greenery","park","leaf","trunk","stem","root","forest","garden"],"variants":{"outline":"ef01"}},"trees":{"name":"trees","category":"Map","tags":["nature","greenery","park","leaf","trunk","stem","root","forest","garden"],"variants":{"outline":"ec10"}},"trekking":{"name":"trekking","category":"Sport","tags":["adventure","travel","walking","hiking","activity"],"variants":{"outline":"f5ad"}},"trending-down-2":{"name":"trending-down-2","category":"Arrows","tags":["arrow","decrease","fall","progress"],"variants":{"outline":"edc1"}},"trending-down-3":{"name":"trending-down-3","category":"Arrows","tags":["arrow","decrease","fall","progress"],"variants":{"outline":"edc2"}},"trending-down":{"name":"trending-down","category":"Arrows","tags":["arrow","decrease","fall","progress"],"variants":{"outline":"eb42"}},"trending-up-2":{"name":"trending-up-2","category":"Arrows","tags":["arrow","grow","increase","progress"],"variants":{"outline":"edc3"}},"trending-up-3":{"name":"trending-up-3","category":"Arrows","tags":["arrow","grow","increase","progress"],"variants":{"outline":"edc4"}},"trending-up":{"name":"trending-up","category":"Arrows","tags":["arrow","grow","increase","progress"],"variants":{"outline":"eb43"}},"triangle-inverted":{"name":"triangle-inverted","category":"Shapes","tags":["shape","geometry","geometric","graphic","pyramid","design"],"variants":{"outline":"f01d","filled":"f6ae"}},"triangle-minus-2":{"name":"triangle-minus-2","category":"Shapes","tags":[],"variants":{"outline":"fc9a"}},"triangle-minus":{"name":"triangle-minus","category":"Shapes","tags":[],"variants":{"outline":"fc9b"}},"triangle-off":{"name":"triangle-off","category":"Shapes","tags":["delta","shape"],"variants":{"outline":"ef02"}},"triangle-plus-2":{"name":"triangle-plus-2","category":"Shapes","tags":[],"variants":{"outline":"fc9c"}},"triangle-plus":{"name":"triangle-plus","category":"Shapes","tags":[],"variants":{"outline":"fc9d"}},"triangle-square-circle":{"name":"triangle-square-circle","category":"Shapes","tags":["shape","geometry","round","angle"],"variants":{"outline":"ece8","filled":"fb42"}},"triangle":{"name":"triangle","category":"Shapes","tags":["delta","shape"],"variants":{"outline":"eb44","filled":"f6ad"}},"triangles":{"name":"triangles","category":"Shapes","tags":["shapes","figure","geometry","geometric","pyramid","design"],"variants":{"outline":"f0a5"}},"trident":{"name":"trident","category":"","tags":["three","spear","weapon","sharp","tool"],"variants":{"outline":"ecc5"}},"trolley":{"name":"trolley","category":"Vehicles","tags":["shopping","market","shop","delivery"],"variants":{"outline":"f4cc"}},"trophy-off":{"name":"trophy-off","category":"","tags":["success","win","prize","winner"],"variants":{"outline":"f438"}},"trophy":{"name":"trophy","category":"","tags":["success","win","prize","winner"],"variants":{"outline":"eb45","filled":"f6af"}},"trowel":{"name":"trowel","category":"","tags":["tool","garden","equipment","mason","cement"],"variants":{"outline":"f368"}},"truck-delivery":{"name":"truck-delivery","category":"E-commerce","tags":["order","purchase","online","shop","store","e-commerce","lorry"],"variants":{"outline":"ec4b"}},"truck-loading":{"name":"truck-loading","category":"E-commerce","tags":["transport","delivery","logistics","vehicle"],"variants":{"outline":"f1da"}},"truck-off":{"name":"truck-off","category":"Vehicles","tags":["transport","vahicle","van","lorry","cargo","delivery"],"variants":{"outline":"ef03"}},"truck-return":{"name":"truck-return","category":"E-commerce","tags":["order","purchase","online","shop","store","e-commerce","lorry"],"variants":{"outline":"ec4c"}},"truck":{"name":"truck","category":"Vehicles","tags":["transport","vahicle","van","lorry","cargo","delivery"],"variants":{"outline":"ebc4"}},"txt":{"name":"txt","category":"Extensions","tags":["file","format","type","document","filetype"],"variants":{"outline":"f3b1"}},"typeface":{"name":"typeface","category":"","tags":[],"variants":{"outline":"fdab"}},"typography-off":{"name":"typography-off","category":"Text","tags":["type","display","typeface","point size","line length","line-spacing","letter-spacing","font"],"variants":{"outline":"f1ba"}},"typography":{"name":"typography","category":"Text","tags":["type","display","typeface","point size","line length","line-spacing","letter-spacing","font"],"variants":{"outline":"ebc5"}},"u-turn-left":{"name":"u-turn-left","category":"Arrows","tags":[],"variants":{"outline":"fea2"}},"u-turn-right":{"name":"u-turn-right","category":"Arrows","tags":[],"variants":{"outline":"fea1"}},"ufo-off":{"name":"ufo-off","category":"","tags":["alien","space","astronomy","spaceship","galaxy"],"variants":{"outline":"f26e"}},"ufo":{"name":"ufo","category":"","tags":["alien","space","astronomy","spaceship","galaxy"],"variants":{"outline":"f26f"}},"umbrella-2":{"name":"umbrella-2","category":"","tags":["rain","weather","storm","wet","autumn","fall"],"variants":{"outline":"ff0e"}},"umbrella-closed-2":{"name":"umbrella-closed-2","category":"","tags":[],"variants":{"outline":"ff0d"}},"umbrella-closed":{"name":"umbrella-closed","category":"","tags":["rain","weather","storm","wet","autumn","fall"],"variants":{"outline":"ff0c"}},"umbrella-off":{"name":"umbrella-off","category":"","tags":["rain","weather","storm","wet","autumn","fall"],"variants":{"outline":"f1bb"}},"umbrella":{"name":"umbrella","category":"","tags":["rain","weather","storm","wet","autumn","fall"],"variants":{"outline":"ebf1","filled":"f6b0"}},"underline":{"name":"underline","category":"Text","tags":["underscore","emphasis","horizontal","typography"],"variants":{"outline":"eba2"}},"universe":{"name":"universe","category":"","tags":[],"variants":{"outline":"fcc4"}},"unlink":{"name":"unlink","category":"Text","tags":["chain","url","address","remove","broke","unconnect"],"variants":{"outline":"eb46"}},"upload":{"name":"upload","category":"Arrows","tags":["file","arrow"],"variants":{"outline":"eb47"}},"urgent":{"name":"urgent","category":"","tags":["alert","important"],"variants":{"outline":"eb48"}},"usb":{"name":"usb","category":"","tags":["drive","cable","plug","device","technology","connect"],"variants":{"outline":"f00c"}},"user-bitcoin":{"name":"user-bitcoin","category":"","tags":[],"variants":{"outline":"ff30"}},"user-bolt":{"name":"user-bolt","category":"System","tags":[],"variants":{"outline":"f9d1"}},"user-cancel":{"name":"user-cancel","category":"System","tags":[],"variants":{"outline":"f9d2"}},"user-check":{"name":"user-check","category":"System","tags":["tick","person","account","role"],"variants":{"outline":"eb49"}},"user-circle":{"name":"user-circle","category":"System","tags":["account","avatar","profile","role"],"variants":{"outline":"ef68"}},"user-code":{"name":"user-code","category":"System","tags":[],"variants":{"outline":"f9d3"}},"user-cog":{"name":"user-cog","category":"System","tags":[],"variants":{"outline":"f9d4"}},"user-dollar":{"name":"user-dollar","category":"System","tags":[],"variants":{"outline":"f9d5"}},"user-down":{"name":"user-down","category":"System","tags":[],"variants":{"outline":"f9d6"}},"user-edit":{"name":"user-edit","category":"System","tags":[],"variants":{"outline":"f7cc"}},"user-exclamation":{"name":"user-exclamation","category":"System","tags":["user","account","note","excitement","admiration","mark"],"variants":{"outline":"ec12"}},"user-heart":{"name":"user-heart","category":"System","tags":[],"variants":{"outline":"f7cd"}},"user-hexagon":{"name":"user-hexagon","category":"","tags":[],"variants":{"outline":"fc4e"}},"user-minus":{"name":"user-minus","category":"System","tags":["remove","cancel","person","account","unsubscribe","role"],"variants":{"outline":"eb4a"}},"user-off":{"name":"user-off","category":"System","tags":["person","account"],"variants":{"outline":"ecf9"}},"user-pause":{"name":"user-pause","category":"System","tags":[],"variants":{"outline":"f9d7"}},"user-pentagon":{"name":"user-pentagon","category":"","tags":[],"variants":{"outline":"fc4f"}},"user-pin":{"name":"user-pin","category":"System","tags":[],"variants":{"outline":"f7ce"}},"user-plus":{"name":"user-plus","category":"System","tags":["add","create","new","person","people","follow","subscribe","role"],"variants":{"outline":"eb4b"}},"user-question":{"name":"user-question","category":"System","tags":[],"variants":{"outline":"f7cf"}},"user-scan":{"name":"user-scan","category":"System","tags":["identity","biometric","authentication","recognition","profile","verification","user-data","user-profile","scan-identity","identity-verification"],"variants":{"outline":"fcaf"}},"user-screen":{"name":"user-screen","category":"Media","tags":[],"variants":{"outline":"fea0"}},"user-search":{"name":"user-search","category":"System","tags":["find","account","profile","magnifier"],"variants":{"outline":"ef89"}},"user-share":{"name":"user-share","category":"System","tags":[],"variants":{"outline":"f9d8"}},"user-shield":{"name":"user-shield","category":"System","tags":[],"variants":{"outline":"f7d0"}},"user-square-rounded":{"name":"user-square-rounded","category":"","tags":[],"variants":{"outline":"fc50"}},"user-square":{"name":"user-square","category":"","tags":[],"variants":{"outline":"fc51"}},"user-star":{"name":"user-star","category":"System","tags":[],"variants":{"outline":"f7d1"}},"user-up":{"name":"user-up","category":"System","tags":[],"variants":{"outline":"f7d2"}},"user-x":{"name":"user-x","category":"System","tags":["cancel","remove","person","account","unsubscribe"],"variants":{"outline":"eb4c"}},"user":{"name":"user","category":"System","tags":["person","account"],"variants":{"outline":"eb4d","filled":"fd19"}},"users-group":{"name":"users-group","category":"System","tags":[],"variants":{"outline":"fa21"}},"users-minus":{"name":"users-minus","category":"System","tags":[],"variants":{"outline":"fa0e"}},"users-plus":{"name":"users-plus","category":"System","tags":[],"variants":{"outline":"fa0f"}},"users":{"name":"users","category":"System","tags":["people","persons","accounts"],"variants":{"outline":"ebf2"}},"uv-index":{"name":"uv-index","category":"Weather","tags":["sun","ultraviolet","radiation"],"variants":{"outline":"f3b2"}},"ux-circle":{"name":"ux-circle","category":"Design","tags":["user","experience"],"variants":{"outline":"f369"}},"vaccine-bottle-off":{"name":"vaccine-bottle-off","category":"Health","tags":["medical","medicine","pharmacy","covid","virus","drug"],"variants":{"outline":"f439"}},"vaccine-bottle":{"name":"vaccine-bottle","category":"Health","tags":["medical","medicine","pharmacy","covid","virus","drug"],"variants":{"outline":"ef69"}},"vaccine-off":{"name":"vaccine-off","category":"Health","tags":["illness","sickness","disease","injection","medicine","medical","doctor","nurse"],"variants":{"outline":"f1bc"}},"vaccine":{"name":"vaccine","category":"Health","tags":["illness","sickness","disease","injection","medicine","medical","doctor","nurse"],"variants":{"outline":"ef04"}},"vacuum-cleaner":{"name":"vacuum-cleaner","category":"","tags":["robot","clean","hoover","home","electronics"],"variants":{"outline":"f5e6"}},"variable-minus":{"name":"variable-minus","category":"Math","tags":["off","delete","maths","mathematics","science","calculate","function"],"variants":{"outline":"f36a"}},"variable-off":{"name":"variable-off","category":"Math","tags":["maths","mathematics","science","calculate","function"],"variants":{"outline":"f1bd"}},"variable-plus":{"name":"variable-plus","category":"Math","tags":["add","new","maths","mathematics","science","calculate","function"],"variants":{"outline":"f36b"}},"variable":{"name":"variable","category":"Math","tags":["maths","mathematics","science","calculate","function"],"variants":{"outline":"ef05"}},"vector-bezier-2":{"name":"vector-bezier-2","category":"Design","tags":["curve","parametric","design","vector graphics","representation"],"variants":{"outline":"f1a3"}},"vector-bezier-arc":{"name":"vector-bezier-arc","category":"Design","tags":["curve","drafting","reshape","shape"],"variants":{"outline":"f4cd"}},"vector-bezier-circle":{"name":"vector-bezier-circle","category":"Design","tags":["curve","drafting","reshape","shape"],"variants":{"outline":"f4ce"}},"vector-bezier":{"name":"vector-bezier","category":"Design","tags":["curve","parametric","design","vector graphics","representation"],"variants":{"outline":"ef1d"}},"vector-off":{"name":"vector-off","category":"Design","tags":["curve","parametric","design","vector graphics","placement"],"variants":{"outline":"f1be"}},"vector-spline":{"name":"vector-spline","category":"Design","tags":["math","line","curve","geometry"],"variants":{"outline":"f565"}},"vector-triangle-off":{"name":"vector-triangle-off","category":"Design","tags":["curve","parametric","design","vector graphics","placement"],"variants":{"outline":"f1bf"}},"vector-triangle":{"name":"vector-triangle","category":"Design","tags":["curve","parametric","design","vector graphics","placement"],"variants":{"outline":"eca8"}},"vector":{"name":"vector","category":"Design","tags":["curve","parametric","design","vector graphics","placement"],"variants":{"outline":"eca9"}},"venus":{"name":"venus","category":"Symbols","tags":["female"],"variants":{"outline":"ec86"}},"versions-off":{"name":"versions-off","category":"Development","tags":["app","variation","different","variant","alternative"],"variants":{"outline":"f1c0"}},"versions":{"name":"versions","category":"Development","tags":["app","variation","different","variant","alternative"],"variants":{"outline":"ed52","filled":"f6b1"}},"video-minus":{"name":"video-minus","category":"Media","tags":["film","shoot","recording","taping","camera","remotion"],"variants":{"outline":"ed1f"}},"video-off":{"name":"video-off","category":"Media","tags":["film","shoot","recording","taping","camera"],"variants":{"outline":"ed20"}},"video-plus":{"name":"video-plus","category":"Media","tags":["film","shoot","recording","taping","camera","closeup"],"variants":{"outline":"ed21"}},"video":{"name":"video","category":"Media","tags":["film","shoot","recording","taping","camera"],"variants":{"outline":"ed22"}},"view-360-arrow":{"name":"view-360-arrow","category":"","tags":["rotate","view","degree","virtual","vr"],"variants":{"outline":"f62f"}},"view-360-number":{"name":"view-360-number","category":"","tags":["degree","rotation","reality","camera"],"variants":{"outline":"f566"}},"view-360-off":{"name":"view-360-off","category":"","tags":["panoramic","degrees","image","around"],"variants":{"outline":"f1c1"}},"view-360":{"name":"view-360","category":"","tags":["panoramic","degrees","image","around"],"variants":{"outline":"ed84"}},"viewfinder-off":{"name":"viewfinder-off","category":"Map","tags":["target","aim","focus"],"variants":{"outline":"f1c2"}},"viewfinder":{"name":"viewfinder","category":"Map","tags":["target","aim","focus"],"variants":{"outline":"eb4e"}},"viewport-narrow":{"name":"viewport-narrow","category":"Devices","tags":["data","account","excel","tight"],"variants":{"outline":"ebf3"}},"viewport-short":{"name":"viewport-short","category":"","tags":[],"variants":{"outline":"fee9"}},"viewport-tall":{"name":"viewport-tall","category":"","tags":[],"variants":{"outline":"fee8"}},"viewport-wide":{"name":"viewport-wide","category":"Devices","tags":["data","account","broad","excel"],"variants":{"outline":"ebf4"}},"vinyl":{"name":"vinyl","category":"Devices","tags":["music","audio","dj","sound","retro","musical"],"variants":{"outline":"f00d"}},"vip-off":{"name":"vip-off","category":"","tags":["premium","exclusive","staff","expensive"],"variants":{"outline":"f43a"}},"vip":{"name":"vip","category":"","tags":["premium","exclusive","staff","expensive"],"variants":{"outline":"f3b3"}},"virus-off":{"name":"virus-off","category":"Health","tags":["infection","illness","cell","infectious","health"],"variants":{"outline":"ed66"}},"virus-search":{"name":"virus-search","category":"Health","tags":["covid","coronavirus","biology","infection","infected","cell","viral","infectious","disease"],"variants":{"outline":"ed67"}},"virus":{"name":"virus","category":"Health","tags":["infection","illness","cell","infectious","health"],"variants":{"outline":"eb74"}},"vocabulary-off":{"name":"vocabulary-off","category":"Text","tags":["language","traffic","text","book","study","dictionary"],"variants":{"outline":"f43b"}},"vocabulary":{"name":"vocabulary","category":"Text","tags":["language","traffic","text","book","study","dictionary"],"variants":{"outline":"ef1e"}},"volcano":{"name":"volcano","category":"Map","tags":["erumption","lava","nature","danger","explosion"],"variants":{"outline":"f79c"}},"volume-2":{"name":"volume-2","category":"Media","tags":["music","sound","speaker"],"variants":{"outline":"eb4f"}},"volume-3":{"name":"volume-3","category":"Media","tags":["mute","music","sound","off","speaker"],"variants":{"outline":"eb50"}},"volume-off":{"name":"volume-off","category":"Media","tags":["music","sound","speaker"],"variants":{"outline":"f1c3"}},"volume":{"name":"volume","category":"Media","tags":["music","sound","speaker"],"variants":{"outline":"eb51"}},"vs":{"name":"vs","category":"","tags":[],"variants":{"outline":"fc52"}},"walk":{"name":"walk","category":"Sport","tags":["ambulation","dislocating","movement","motion","destination"],"variants":{"outline":"ec87"}},"wall-off":{"name":"wall-off","category":"","tags":["brick","security","firewall","building","renovation","construction"],"variants":{"outline":"f43c"}},"wall":{"name":"wall","category":"","tags":["brick","security","firewall","building","renovation","construction"],"variants":{"outline":"ef7a"}},"wallet-off":{"name":"wallet-off","category":"","tags":["money","pay","banknote","coin","payment","bank"],"variants":{"outline":"f1c4"}},"wallet":{"name":"wallet","category":"","tags":["money","pay","banknote","coin","payment","bank"],"variants":{"outline":"eb75"}},"wallpaper-off":{"name":"wallpaper-off","category":"","tags":["picture","image","photo","decoration","house","room","decor"],"variants":{"outline":"f1c5"}},"wallpaper":{"name":"wallpaper","category":"","tags":["picture","image","photo","decoration","house","room","decor"],"variants":{"outline":"ef56"}},"wand-off":{"name":"wand-off","category":"","tags":["magic","tool","color","pixel","design"],"variants":{"outline":"f1c6"}},"wand":{"name":"wand","category":"","tags":["magic","tool","color","pixel","design"],"variants":{"outline":"ebcb"}},"wash-dry-1":{"name":"wash-dry-1","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f2fa"}},"wash-dry-2":{"name":"wash-dry-2","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f2fb"}},"wash-dry-3":{"name":"wash-dry-3","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f2fc"}},"wash-dry-a":{"name":"wash-dry-a","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f2fd"}},"wash-dry-dip":{"name":"wash-dry-dip","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f2fe"}},"wash-dry-f":{"name":"wash-dry-f","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f2ff"}},"wash-dry-flat":{"name":"wash-dry-flat","category":"Laundry","tags":[],"variants":{"outline":"fa7f"}},"wash-dry-hang":{"name":"wash-dry-hang","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f300"}},"wash-dry-off":{"name":"wash-dry-off","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f301"}},"wash-dry-p":{"name":"wash-dry-p","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f302"}},"wash-dry-shade":{"name":"wash-dry-shade","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f303"}},"wash-dry-w":{"name":"wash-dry-w","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f322"}},"wash-dry":{"name":"wash-dry","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f304"}},"wash-dryclean-off":{"name":"wash-dryclean-off","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f323"}},"wash-dryclean":{"name":"wash-dryclean","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f305"}},"wash-eco":{"name":"wash-eco","category":"Laundry","tags":[],"variants":{"outline":"fa80"}},"wash-gentle":{"name":"wash-gentle","category":"Laundry","tags":["laundry","clean","clear","clothes","machine","delicate"],"variants":{"outline":"f306"}},"wash-hand":{"name":"wash-hand","category":"Laundry","tags":[],"variants":{"outline":"fa81"}},"wash-machine":{"name":"wash-machine","category":"Devices","tags":["bathroom","clean","cleaning","laundry","machine","clothes"],"variants":{"outline":"f25e"}},"wash-off":{"name":"wash-off","category":"Laundry","tags":["clean","cleaning","hygiene","laundry","clothes"],"variants":{"outline":"f307"}},"wash-press":{"name":"wash-press","category":"Laundry","tags":["laundry","clean","clear","clothes","machine","permanent"],"variants":{"outline":"f308"}},"wash-temperature-1":{"name":"wash-temperature-1","category":"Laundry","tags":["laundry","clean","clear","clothes","low","cold"],"variants":{"outline":"f309"}},"wash-temperature-2":{"name":"wash-temperature-2","category":"Laundry","tags":["laundry","clean","clear","clothes","low","cold"],"variants":{"outline":"f30a"}},"wash-temperature-3":{"name":"wash-temperature-3","category":"Laundry","tags":["laundry","clean","clear","clothes","medium"],"variants":{"outline":"f30b"}},"wash-temperature-4":{"name":"wash-temperature-4","category":"Laundry","tags":["laundry","clean","clear","clothes","high","hot"],"variants":{"outline":"f30c"}},"wash-temperature-5":{"name":"wash-temperature-5","category":"Laundry","tags":["laundry","clean","clear","clothes","high","hot"],"variants":{"outline":"f30d"}},"wash-temperature-6":{"name":"wash-temperature-6","category":"Laundry","tags":["laundry","clean","clear","clothes","high","hot"],"variants":{"outline":"f30e"}},"wash-tumble-dry":{"name":"wash-tumble-dry","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f30f"}},"wash-tumble-off":{"name":"wash-tumble-off","category":"Laundry","tags":["laundry","clean","clear","clothes"],"variants":{"outline":"f310"}},"wash":{"name":"wash","category":"Laundry","tags":["clean","cleaning","hygiene","laundry","clothes"],"variants":{"outline":"f311"}},"waterpolo":{"name":"waterpolo","category":"Sport","tags":[],"variants":{"outline":"fa6f"}},"wave-saw-tool":{"name":"wave-saw-tool","category":"","tags":["pulse","signal","ratio","rate","volume"],"variants":{"outline":"ecd3"}},"wave-sine":{"name":"wave-sine","category":"","tags":["pulse","signal","ratio","rate","volume"],"variants":{"outline":"ecd4"}},"wave-square":{"name":"wave-square","category":"","tags":["pulse","signal","ratio","rate","volume"],"variants":{"outline":"ecd5"}},"waves-electricity":{"name":"waves-electricity","category":"","tags":[],"variants":{"outline":"fcc5"}},"webhook-off":{"name":"webhook-off","category":"Development","tags":["communication","interaction","comunity","browser"],"variants":{"outline":"f43d"}},"webhook":{"name":"webhook","category":"Development","tags":["communication","interaction","comunity","browser"],"variants":{"outline":"f01e"}},"weight":{"name":"weight","category":"","tags":["gym","fitness","balance","exercise","sport"],"variants":{"outline":"f589"}},"wheel":{"name":"wheel","category":"","tags":[],"variants":{"outline":"fc64"}},"wheelchair-off":{"name":"wheelchair-off","category":"Vehicles","tags":["disabled","disability","patient","medical","handicapped"],"variants":{"outline":"f43e"}},"wheelchair":{"name":"wheelchair","category":"Vehicles","tags":["disabled","disability","patient","medical","handicapped"],"variants":{"outline":"f1db"}},"whirl":{"name":"whirl","category":"Weather","tags":["cosmos","galaxy","space","spin","spiral","hypnosis"],"variants":{"outline":"f51d"}},"wifi-0":{"name":"wifi-0","category":"Devices","tags":["online","connection","signal","wireless"],"variants":{"outline":"eba3"}},"wifi-1":{"name":"wifi-1","category":"Devices","tags":["online","connection","signal","wireless"],"variants":{"outline":"eba4"}},"wifi-2":{"name":"wifi-2","category":"Devices","tags":["online","connection","signal","wireless"],"variants":{"outline":"eba5"}},"wifi-off":{"name":"wifi-off","category":"Devices","tags":["online","connection","signal","wireless"],"variants":{"outline":"ecfa"}},"wifi":{"name":"wifi","category":"Devices","tags":["online","connection","signal","wireless"],"variants":{"outline":"eb52"}},"wind-electricity":{"name":"wind-electricity","category":"","tags":[],"variants":{"outline":"fcc6"}},"wind-off":{"name":"wind-off","category":"Weather","tags":["weather","breeze","tornado","typhoon","cyclone","hurricane"],"variants":{"outline":"f1c7"}},"wind":{"name":"wind","category":"Weather","tags":["weather","breeze","tornado","typhoon","cyclone","hurricane"],"variants":{"outline":"ec34"}},"windmill-off":{"name":"windmill-off","category":"Map","tags":["generate","power","blade","energy","electricity"],"variants":{"outline":"f1c8"}},"windmill":{"name":"windmill","category":"Map","tags":["generate","power","blade","energy","electricity"],"variants":{"outline":"ed85","filled":"f6b2"}},"window-maximize":{"name":"window-maximize","category":"System","tags":["fullscreen","browser","size","full","resize"],"variants":{"outline":"f1f1"}},"window-minimize":{"name":"window-minimize","category":"System","tags":["screen","browser","size","resize","minimum"],"variants":{"outline":"f1f2"}},"window-off":{"name":"window-off","category":"","tags":["house","view","glass","apartment","vehicle","light","frame","home","building"],"variants":{"outline":"f1c9"}},"window":{"name":"window","category":"","tags":["house","view","glass","apartment","vehicle","light","frame","home","building"],"variants":{"outline":"ef06"}},"windsock":{"name":"windsock","category":"Map","tags":["weather","meteorology","windy","storm","wind"],"variants":{"outline":"f06d"}},"wiper-wash":{"name":"wiper-wash","category":"Vehicles","tags":["car","pane","vehicle","sprinkler","scour"],"variants":{"outline":"ecaa"}},"wiper":{"name":"wiper","category":"Vehicles","tags":["car","pane","vehicle","sprinkler","scour"],"variants":{"outline":"ecab"}},"woman":{"name":"woman","category":"","tags":["girl","female","gender"],"variants":{"outline":"eb53","filled":"fdcc"}},"wood":{"name":"wood","category":"","tags":["tree","forest","natural","timber","log"],"variants":{"outline":"f359"}},"world-bolt":{"name":"world-bolt","category":"Map","tags":[],"variants":{"outline":"f9d9"}},"world-cancel":{"name":"world-cancel","category":"Map","tags":[],"variants":{"outline":"f9da"}},"world-check":{"name":"world-check","category":"Map","tags":[],"variants":{"outline":"f9db"}},"world-code":{"name":"world-code","category":"Map","tags":[],"variants":{"outline":"f9dc"}},"world-cog":{"name":"world-cog","category":"Map","tags":[],"variants":{"outline":"f9dd"}},"world-dollar":{"name":"world-dollar","category":"Map","tags":[],"variants":{"outline":"f9de"}},"world-down":{"name":"world-down","category":"Map","tags":[],"variants":{"outline":"f9df"}},"world-download":{"name":"world-download","category":"Map","tags":["global","down","globe","arrow","earth"],"variants":{"outline":"ef8a"}},"world-exclamation":{"name":"world-exclamation","category":"Map","tags":[],"variants":{"outline":"f9e0"}},"world-heart":{"name":"world-heart","category":"Map","tags":[],"variants":{"outline":"f9e1"}},"world-latitude":{"name":"world-latitude","category":"Map","tags":["earth","globe","global","language","union"],"variants":{"outline":"ed2e"}},"world-longitude":{"name":"world-longitude","category":"Map","tags":["earth","globe","global","language","union"],"variants":{"outline":"ed2f"}},"world-minus":{"name":"world-minus","category":"Map","tags":[],"variants":{"outline":"f9e2"}},"world-off":{"name":"world-off","category":"Map","tags":["earth","globe","global","language","union"],"variants":{"outline":"f1ca"}},"world-pause":{"name":"world-pause","category":"Map","tags":[],"variants":{"outline":"f9e3"}},"world-pin":{"name":"world-pin","category":"Map","tags":[],"variants":{"outline":"f9e4"}},"world-plus":{"name":"world-plus","category":"Map","tags":[],"variants":{"outline":"f9e5"}},"world-question":{"name":"world-question","category":"Map","tags":[],"variants":{"outline":"f9e6"}},"world-search":{"name":"world-search","category":"Map","tags":[],"variants":{"outline":"f9e7"}},"world-share":{"name":"world-share","category":"Map","tags":[],"variants":{"outline":"f9e8"}},"world-star":{"name":"world-star","category":"Map","tags":[],"variants":{"outline":"f9e9"}},"world-up":{"name":"world-up","category":"Map","tags":[],"variants":{"outline":"f9ea"}},"world-upload":{"name":"world-upload","category":"Map","tags":["earth","global","up","globe","arrow","internet"],"variants":{"outline":"ef8b"}},"world-www":{"name":"world-www","category":"Map","tags":["internet","online","web","website","browser"],"variants":{"outline":"f38f"}},"world-x":{"name":"world-x","category":"Map","tags":[],"variants":{"outline":"f9eb"}},"world":{"name":"world","category":"Map","tags":["earth","globe","global","language","union"],"variants":{"outline":"eb54"}},"wrecking-ball":{"name":"wrecking-ball","category":"Vehicles","tags":["demolish","building","wrecker","metal","swing","knock","down"],"variants":{"outline":"ed97"}},"writing-off":{"name":"writing-off","category":"Text","tags":["name","certficate","sign","edit","write","document","pen","drawing","contract","signature"],"variants":{"outline":"f1cb"}},"writing-sign-off":{"name":"writing-sign-off","category":"Text","tags":["name","certficate","sign","edit","write","document","writing","pen"],"variants":{"outline":"f1cc"}},"writing-sign":{"name":"writing-sign","category":"Text","tags":["name","certficate","sign","edit","write","document","writing","pen"],"variants":{"outline":"ef07"}},"writing":{"name":"writing","category":"Text","tags":["name","certficate","sign","edit","write","document","pen","drawing","contract","signature"],"variants":{"outline":"ef08"}},"x":{"name":"x","category":"","tags":["cancel","remove","delete","empty","close"],"variants":{"outline":"eb55"}},"xbox-a":{"name":"xbox-a","category":"Devices","tags":["controller","joystick","button"],"variants":{"outline":"f2b6","filled":"fdcb"}},"xbox-b":{"name":"xbox-b","category":"Devices","tags":["controller","joystick","button"],"variants":{"outline":"f2b7","filled":"fdca"}},"xbox-x":{"name":"xbox-x","category":"Devices","tags":["controller","joystick","button"],"variants":{"outline":"f2b8","filled":"fdc9"}},"xbox-y":{"name":"xbox-y","category":"Devices","tags":["controller","joystick","button"],"variants":{"outline":"f2b9","filled":"fdc8"}},"xd":{"name":"xd","category":"","tags":[],"variants":{"outline":"fa33"}},"xxx":{"name":"xxx","category":"","tags":[],"variants":{"outline":"fc20"}},"yin-yang":{"name":"yin-yang","category":"Symbols","tags":["equality","good","evil","balance","peace"],"variants":{"outline":"ec35","filled":"f785"}},"yoga":{"name":"yoga","category":"Sport","tags":["pose","sport","meditation","fitness"],"variants":{"outline":"f01f"}},"zeppelin-off":{"name":"zeppelin-off","category":"Vehicles","tags":["airship","transport","ballon","flying","travel"],"variants":{"outline":"f43f"}},"zeppelin":{"name":"zeppelin","category":"Vehicles","tags":["airship","transport","ballon","flying","travel"],"variants":{"outline":"f270","filled":"fdc7"}},"zip":{"name":"zip","category":"Extensions","tags":["file","document","folder","compress","archive","filetype"],"variants":{"outline":"f3b4"}},"zodiac-aquarius":{"name":"zodiac-aquarius","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecac"}},"zodiac-aries":{"name":"zodiac-aries","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecad"}},"zodiac-cancer":{"name":"zodiac-cancer","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecae"}},"zodiac-capricorn":{"name":"zodiac-capricorn","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecaf"}},"zodiac-gemini":{"name":"zodiac-gemini","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecb0"}},"zodiac-leo":{"name":"zodiac-leo","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecb1"}},"zodiac-libra":{"name":"zodiac-libra","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecb2"}},"zodiac-pisces":{"name":"zodiac-pisces","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecb3"}},"zodiac-sagittarius":{"name":"zodiac-sagittarius","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecb4"}},"zodiac-scorpio":{"name":"zodiac-scorpio","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecb5"}},"zodiac-taurus":{"name":"zodiac-taurus","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecb6"}},"zodiac-virgo":{"name":"zodiac-virgo","category":"Zodiac","tags":["sign","horoscope","constellation","stars"],"variants":{"outline":"ecb7"}},"zoom-cancel":{"name":"zoom-cancel","category":"Map","tags":["magnifying glass"],"variants":{"outline":"ec4d","filled":"fdc6"}},"zoom-check":{"name":"zoom-check","category":"Map","tags":["verify","magnifying","glass","magnifier","ok","done"],"variants":{"outline":"ef09","filled":"f786"}},"zoom-code":{"name":"zoom-code","category":"Map","tags":["inspect","marketing","search","markup","coding","magnifier"],"variants":{"outline":"f07f","filled":"fdc5"}},"zoom-exclamation":{"name":"zoom-exclamation","category":"Map","tags":["alert","caution","error","search","warning"],"variants":{"outline":"f080","filled":"fdc4"}},"zoom-in-area":{"name":"zoom-in-area","category":"Map","tags":["selected","square","magnifier","enlargement"],"variants":{"outline":"f1dc","filled":"f788"}},"zoom-in":{"name":"zoom-in","category":"Map","tags":["magnifying glass"],"variants":{"outline":"eb56","filled":"f789"}},"zoom-money":{"name":"zoom-money","category":"Map","tags":["magnifying","glass","magnifier","earn","pay","sum","total","finance","financial"],"variants":{"outline":"ef0a","filled":"fdc3"}},"zoom-out-area":{"name":"zoom-out-area","category":"Map","tags":["selected","square","magnifier","diminishing"],"variants":{"outline":"f1dd","filled":"fdc2"}},"zoom-out":{"name":"zoom-out","category":"Map","tags":["magnifying glass"],"variants":{"outline":"eb57","filled":"f78a"}},"zoom-pan":{"name":"zoom-pan","category":"Map","tags":["enlargement","shifting","magnifier"],"variants":{"outline":"f1de","filled":"fdc1"}},"zoom-question":{"name":"zoom-question","category":"Map","tags":["ask","help","support","cue","?"],"variants":{"outline":"edeb","filled":"fdc0"}},"zoom-replace":{"name":"zoom-replace","category":"Map","tags":["find","change","switch","swap"],"variants":{"outline":"f2a7"}},"zoom-reset":{"name":"zoom-reset","category":"Map","tags":["refresh","default","settings","vision"],"variants":{"outline":"f295"}},"zoom-scan":{"name":"zoom-scan","category":"System","tags":["magnify","enlarge","analyze","focus","enhance","view","magnification","zoom-in","scan-zoom","magnify-scan"],"variants":{"outline":"fcb0","filled":"fdbf"}},"zoom":{"name":"zoom","category":"","tags":["find","magnifier","magnifying glass"],"variants":{"outline":"fdaa","filled":"f787"}},"zzz-off":{"name":"zzz-off","category":"","tags":["sleep","sleeping","bed","dream","snooze","rest"],"variants":{"outline":"f440"}},"zzz":{"name":"zzz","category":"","tags":["sleep","sleeping","bed","dream","snooze","rest"],"variants":{"outline":"f228"}}} \ No newline at end of file diff --git a/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.ttf b/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.ttf new file mode 100644 index 0000000000..24ccd00e9e Binary files /dev/null and b/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.ttf differ diff --git a/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.woff b/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.woff new file mode 100644 index 0000000000..e9a04839d5 Binary files /dev/null and b/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.woff differ diff --git a/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.woff2 b/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.woff2 new file mode 100644 index 0000000000..a70119c01b Binary files /dev/null and b/src/backend/InvenTree/InvenTree/static/tabler-icons/tabler-icons.woff2 differ diff --git a/src/backend/InvenTree/InvenTree/status_codes.py b/src/backend/InvenTree/InvenTree/status_codes.py index 81d713f59c..adb5a359d8 100644 --- a/src/backend/InvenTree/InvenTree/status_codes.py +++ b/src/backend/InvenTree/InvenTree/status_codes.py @@ -4,6 +4,6 @@ This file remains here for backwards compatibility, as external plugins may import status codes from this file. """ -from build.status_codes import * -from order.status_codes import * -from stock.status_codes import * +from build.status_codes import * # noqa: F403 +from order.status_codes import * # noqa: F403 +from stock.status_codes import * # noqa: F403 diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 65115d6862..21195c9c75 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -118,7 +118,7 @@ def check_daily_holdoff(task_name: str, n_days: int = 1) -> bool: if last_success: threshold = datetime.now() - timedelta(days=n_days) - if last_success > threshold: + if last_success.date() > threshold.date(): logger.info( "Last successful run for '%s' was too recent - skipping task", task_name ) @@ -256,8 +256,8 @@ def offload_task( _func(*args, **kwargs) except Exception as exc: log_error('InvenTree.offload_task') - raise_warning(f"WARNING: '{taskname}' not started due to {str(exc)}") - return False + raise_warning(f"WARNING: '{taskname}' failed due to {str(exc)}") + raise exc # Finally, task either completed successfully or was offloaded return True diff --git a/src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py b/src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py index 00641abc19..ad476ba671 100644 --- a/src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py +++ b/src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py @@ -438,9 +438,9 @@ def progress_bar(val, max_val, *args, **kwargs): @register.simple_tag() -def get_color_theme_css(username): +def get_color_theme_css(user): """Return the custom theme .css file for the selected user.""" - user_theme_name = get_user_color_theme(username) + user_theme_name = get_user_color_theme(user) # Build path to CSS sheet inventree_css_sheet = os.path.join('css', 'color-themes', user_theme_name + '.css') @@ -451,12 +451,18 @@ def get_color_theme_css(username): @register.simple_tag() -def get_user_color_theme(username): +def get_user_color_theme(user): """Get current user color theme.""" from common.models import ColorTheme try: - user_theme = ColorTheme.objects.filter(user=username).get() + if not user.is_authenticated: + return 'default' + except Exception: + return 'default' + + try: + user_theme = ColorTheme.objects.filter(user_obj=user).get() user_theme_name = user_theme.name if not user_theme_name or not ColorTheme.is_valid_choice(user_theme): user_theme_name = 'default' diff --git a/src/backend/InvenTree/InvenTree/test_api.py b/src/backend/InvenTree/InvenTree/test_api.py index ea1a6c5b4a..e462af3b50 100644 --- a/src/backend/InvenTree/InvenTree/test_api.py +++ b/src/backend/InvenTree/InvenTree/test_api.py @@ -62,6 +62,7 @@ class APITests(InvenTreeAPITestCase): """Tests for the InvenTree API.""" fixtures = ['location', 'category', 'part', 'stock'] + roles = ['part.view'] token = None auto_login = False @@ -132,6 +133,7 @@ class APITests(InvenTreeAPITestCase): # Now log in! self.basicAuth() + self.assignRole('part.view') response = self.get(url) @@ -147,12 +149,17 @@ class APITests(InvenTreeAPITestCase): role_names = roles.keys() - # By default, 'view' permissions are provided + # By default, no permissions are provided for rule in RuleSet.RULESET_NAMES: self.assertIn(rule, role_names) - self.assertIn('view', roles[rule]) + if roles[rule] is None: + continue + if rule == 'part': + self.assertIn('view', roles[rule]) + else: + self.assertNotIn('view', roles[rule]) self.assertNotIn('add', roles[rule]) self.assertNotIn('change', roles[rule]) self.assertNotIn('delete', roles[rule]) @@ -297,6 +304,7 @@ class SearchTests(InvenTreeAPITestCase): 'order', 'sales_order', ] + roles = ['build.view', 'part.view'] def test_empty(self): """Test empty request.""" @@ -331,6 +339,19 @@ class SearchTests(InvenTreeAPITestCase): {'search': '01', 'limit': 2, 'purchaseorder': {}, 'salesorder': {}}, expected_code=200, ) + self.assertEqual( + response.data['purchaseorder'], + {'error': 'User does not have permission to view this model'}, + ) + + # Add permissions and try again + self.assignRole('purchase_order.view') + self.assignRole('sales_order.view') + response = self.post( + reverse('api-search'), + {'search': '01', 'limit': 2, 'purchaseorder': {}, 'salesorder': {}}, + expected_code=200, + ) self.assertEqual(response.data['purchaseorder']['count'], 1) self.assertEqual(response.data['salesorder']['count'], 0) diff --git a/src/backend/InvenTree/InvenTree/test_middleware.py b/src/backend/InvenTree/InvenTree/test_middleware.py index c4fcc52858..e00ea8a00f 100644 --- a/src/backend/InvenTree/InvenTree/test_middleware.py +++ b/src/backend/InvenTree/InvenTree/test_middleware.py @@ -71,6 +71,7 @@ class MiddlewareTests(InvenTreeTestCase): def test_error_exceptions(self): """Test that ignored errors are not logged.""" + self.assignRole('part.view') def check(excpected_nbr=0): # Check that errors are empty diff --git a/src/backend/InvenTree/InvenTree/test_sso.py b/src/backend/InvenTree/InvenTree/test_sso.py new file mode 100644 index 0000000000..e20f11d3ae --- /dev/null +++ b/src/backend/InvenTree/InvenTree/test_sso.py @@ -0,0 +1,121 @@ +"""Test the sso module functionality.""" + +from django.contrib.auth.models import Group, User +from django.test import override_settings +from django.test.testcases import TransactionTestCase + +from allauth.socialaccount.models import SocialAccount, SocialLogin + +from common.models import InvenTreeSetting +from InvenTree import sso +from InvenTree.forms import RegistratonMixin + + +class Dummy: + """Simulate super class of RegistratonMixin.""" + + def save_user(self, _request, user: User, *args) -> User: + """This method is only used that the super() call of RegistrationMixin does not fail.""" + return user + + +class MockRegistrationMixin(RegistratonMixin, Dummy): + """Mocked implementation of the RegistrationMixin.""" + + +class TestSsoGroupSync(TransactionTestCase): + """Tests for the SSO group sync feature.""" + + def setUp(self): + """Construct sociallogin object for test cases.""" + # configure SSO + InvenTreeSetting.set_setting('LOGIN_ENABLE_SSO_GROUP_SYNC', True) + InvenTreeSetting.set_setting('SSO_GROUP_KEY', 'groups') + InvenTreeSetting.set_setting( + 'SSO_GROUP_MAP', '{"idp_group": "inventree_group"}' + ) + # configure sociallogin + extra_data = {'groups': ['idp_group']} + self.group = Group(name='inventree_group') + self.group.save() + # ensure default group exists + user = User(username='testuser', first_name='Test', last_name='User') + user.save() + account = SocialAccount(user=user, extra_data=extra_data) + self.sociallogin = SocialLogin(account=account) + + def test_group_added_to_user(self): + """Check that a new SSO group is added to the user.""" + user: User = self.sociallogin.account.user + self.assertEqual(user.groups.count(), 0) + sso.ensure_sso_groups(None, self.sociallogin) + self.assertEqual(user.groups.count(), 1) + self.assertEqual(user.groups.first().name, 'inventree_group') + + def test_group_already_exists(self): + """Check that existing SSO group is not modified.""" + user: User = self.sociallogin.account.user + user.groups.add(self.group) + self.assertEqual(user.groups.count(), 1) + self.assertEqual(user.groups.first().name, 'inventree_group') + sso.ensure_sso_groups(None, self.sociallogin) + self.assertEqual(user.groups.count(), 1) + self.assertEqual(user.groups.first().name, 'inventree_group') + + @override_settings(SSO_REMOVE_GROUPS=True) + def test_remove_non_sso_group(self): + """Check that any group not provided by IDP is removed.""" + user: User = self.sociallogin.account.user + # group must be saved to database first + group = Group(name='local_group') + group.save() + user.groups.add(group) + self.assertEqual(user.groups.count(), 1) + self.assertEqual(user.groups.first().name, 'local_group') + sso.ensure_sso_groups(None, self.sociallogin) + self.assertEqual(user.groups.count(), 1) + self.assertEqual(user.groups.first().name, 'inventree_group') + + def test_override_default_group_with_sso_group(self): + """The default group should be overridden if SSO groups are available.""" + user: User = self.sociallogin.account.user + self.assertEqual(user.groups.count(), 0) + Group(id=42, name='default_group').save() + InvenTreeSetting.set_setting('SIGNUP_GROUP', 42) + sso.ensure_sso_groups(None, self.sociallogin) + MockRegistrationMixin().save_user(None, user, None) + self.assertEqual(user.groups.count(), 1) + self.assertEqual(user.groups.first().name, 'inventree_group') + + def test_default_group_without_sso_group(self): + """If no SSO group is specified, the default group should be applied.""" + self.sociallogin.account.extra_data = {} + user: User = self.sociallogin.account.user + self.assertEqual(user.groups.count(), 0) + Group(id=42, name='default_group').save() + InvenTreeSetting.set_setting('SIGNUP_GROUP', 42) + sso.ensure_sso_groups(None, self.sociallogin) + MockRegistrationMixin().save_user(None, user, None) + self.assertEqual(user.groups.count(), 1) + self.assertEqual(user.groups.first().name, 'default_group') + + @override_settings(SSO_REMOVE_GROUPS=True) + def test_remove_groups_overrides_default_group(self): + """If no SSO group is specified, the default group should not be added if SSO_REMOVE_GROUPS=True.""" + user: User = self.sociallogin.account.user + self.sociallogin.account.extra_data = {} + self.assertEqual(user.groups.count(), 0) + Group(id=42, name='default_group').save() + InvenTreeSetting.set_setting('SIGNUP_GROUP', 42) + sso.ensure_sso_groups(None, self.sociallogin) + MockRegistrationMixin().save_user(None, user, None) + # second ensure_sso_groups will be called by signal if social account changes + sso.ensure_sso_groups(None, self.sociallogin) + self.assertEqual(user.groups.count(), 0) + + def test_sso_group_created_if_not_exists(self): + """If the mapped group does not exist, a new group with the same name should be created.""" + self.group.delete() + self.assertEqual(Group.objects.filter(name='inventree_group').count(), 0) + sso.ensure_sso_groups(None, self.sociallogin) + self.assertEqual(Group.objects.filter(name='inventree_group').count(), 1) diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index 165c981edd..5f2093a8fe 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -1,6 +1,5 @@ """Test general functions and helpers.""" -import json import os import time from datetime import datetime, timedelta @@ -789,33 +788,6 @@ class TestIncrement(TestCase): self.assertEqual(result, b) -class TestMakeBarcode(TestCase): - """Tests for barcode string creation.""" - - def test_barcode_extended(self): - """Test creation of barcode with extended data.""" - bc = helpers.MakeBarcode( - 'part', 3, {'id': 3, 'url': 'www.google.com'}, brief=False - ) - - self.assertIn('part', bc) - self.assertIn('tool', bc) - self.assertIn('"tool": "InvenTree"', bc) - - data = json.loads(bc) - - self.assertEqual(data['part']['id'], 3) - self.assertEqual(data['part']['url'], 'www.google.com') - - def test_barcode_brief(self): - """Test creation of simple barcode.""" - bc = helpers.MakeBarcode('stockitem', 7) - - data = json.loads(bc) - self.assertEqual(len(data), 1) - self.assertEqual(data['stockitem'], 7) - - class TestDownloadFile(TestCase): """Tests for DownloadFile.""" diff --git a/src/backend/InvenTree/InvenTree/tracing.py b/src/backend/InvenTree/InvenTree/tracing.py index 3d3eda28a3..dd90a330dd 100644 --- a/src/backend/InvenTree/InvenTree/tracing.py +++ b/src/backend/InvenTree/InvenTree/tracing.py @@ -22,9 +22,6 @@ from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExport import InvenTree.ready from InvenTree.version import inventreeVersion -# Logger configuration -logger = logging.getLogger('inventree') - def setup_tracing( endpoint: str, @@ -46,6 +43,9 @@ def setup_tracing( if InvenTree.ready.isImportingData() or InvenTree.ready.isRunningMigrations(): return + # Logger configuration + logger = logging.getLogger('inventree') + if resources_input is None: resources_input = {} if auth is None: diff --git a/src/backend/InvenTree/InvenTree/unit_test.py b/src/backend/InvenTree/InvenTree/unit_test.py index aee89660f3..2b525b9aa5 100644 --- a/src/backend/InvenTree/InvenTree/unit_test.py +++ b/src/backend/InvenTree/InvenTree/unit_test.py @@ -84,6 +84,9 @@ def getNewestMigrationFile(app, exclude_extension=True): newest_num = num newest_file = f + if not newest_file: # pragma: no cover + return newest_file + if exclude_extension: newest_file = newest_file.replace('.py', '') @@ -152,6 +155,17 @@ class UserMixin: """Lougout current user.""" self.client.logout() + @classmethod + def clearRoles(cls): + """Remove all user roles from the registered user.""" + for ruleset in cls.group.rule_sets.all(): + ruleset.can_view = False + ruleset.can_change = False + ruleset.can_delete = False + ruleset.can_add = False + + ruleset.save() + @classmethod def assignRole(cls, role=None, assign_all: bool = False, group=None): """Set the user roles for the registered user. @@ -190,7 +204,8 @@ class UserMixin: ruleset.can_add = True ruleset.save() - break + if not assign_all: + break class PluginMixin: @@ -229,7 +244,7 @@ class ExchangeRateMixin: class InvenTreeTestCase(ExchangeRateMixin, UserMixin, TestCase): - """Testcase with user setup buildin.""" + """Testcase with user setup build in.""" pass @@ -267,7 +282,7 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): f'Query count exceeded at {url}: Expected < {value} queries, got {n}' ) # pragma: no cover - if verbose: + if verbose or n >= value: msg = '\r\n%s' % json.dumps( context.captured_queries, indent=4 ) # pragma: no cover @@ -296,7 +311,7 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): if hasattr(response, 'content'): print('content:', response.content) - self.assertEqual(expected_code, response.status_code) + self.assertEqual(response.status_code, expected_code) def getActions(self, url): """Return a dict of the 'actions' available at a given endpoint. @@ -314,17 +329,17 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): 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) + expected_code = kwargs.pop('expected_code', None) + max_queries = kwargs.pop('max_query_count', self.MAX_QUERY_COUNT) + max_query_time = kwargs.pop('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 @@ -401,12 +416,12 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): # Extract filename disposition = response.headers['Content-Disposition'] - result = re.search(r'attachment; filename="([\w.]+)"', disposition) + result = re.search(r'attachment; filename="([\w\d\-.]+)"', disposition) fn = result.groups()[0] if expected_fn is not None: - self.assertEqual(expected_fn, fn) + self.assertRegex(fn, expected_fn) if decode: # Decode data and return as StringIO file object diff --git a/src/backend/InvenTree/InvenTree/urls.py b/src/backend/InvenTree/InvenTree/urls.py index 81716ea3dd..e9aaa524d3 100644 --- a/src/backend/InvenTree/InvenTree/urls.py +++ b/src/backend/InvenTree/InvenTree/urls.py @@ -21,6 +21,7 @@ from sesame.views import LoginView import build.api import common.api import company.api +import importer.api import machine.api import order.api import part.api @@ -34,6 +35,7 @@ from company.urls import company_urls, manufacturer_part_urls, supplier_part_url from order.urls import order_urls from part.urls import part_urls from plugin.urls import get_plugin_urls +from stock.api import test_statistics_api_urls from stock.urls import stock_urls from web.urls import api_urls as web_api_urls from web.urls import urlpatterns as platform_urls @@ -80,11 +82,19 @@ admin.site.site_header = 'InvenTree Admin' apipatterns = [ # Global search + path('admin/', include(common.api.admin_api_urls)), + path('bom/', include(part.api.bom_api_urls)), + path('build/', include(build.api.build_api_urls)), + path('company/', include(company.api.company_api_urls)), + path('importer/', include(importer.api.importer_api_urls)), + path('label/', include(report.api.label_api_urls)), + path('machine/', include(machine.api.machine_api_urls)), + path('order/', include(order.api.order_api_urls)), + path('part/', include(part.api.part_api_urls)), + path('report/', include(report.api.report_api_urls)), path('search/', APISearchView.as_view(), name='api-search'), path('settings/', include(common.api.settings_api_urls)), - 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('stock/', include(stock.api.stock_api_urls)), path( 'generate/', include([ @@ -100,14 +110,8 @@ apipatterns = [ ), ]), ), - 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(report.api.label_api_urls)), - path('report/', include(report.api.report_api_urls)), - path('machine/', include(machine.api.machine_api_urls)), + path('test-statistics/', include(test_statistics_api_urls)), path('user/', include(users.api.user_urls)), - path('admin/', include(common.api.admin_api_urls)), path('web/', include(web_api_urls)), # Plugin endpoints path('', include(plugin.api.plugin_api_urls)), diff --git a/src/backend/InvenTree/InvenTree/validators.py b/src/backend/InvenTree/InvenTree/validators.py index d01d79f633..f2a85bc18f 100644 --- a/src/backend/InvenTree/InvenTree/validators.py +++ b/src/backend/InvenTree/InvenTree/validators.py @@ -13,6 +13,7 @@ from jinja2 import Template from moneyed import CURRENCIES import InvenTree.conversion +from common.settings import get_global_setting def validate_physical_units(unit): @@ -63,14 +64,10 @@ class AllowedURLValidator(validators.URLValidator): def __call__(self, value): """Validate the URL.""" - import common.models - self.schemes = allowable_url_schemes() # Determine if 'strict' URL validation is required (i.e. if the URL must have a schema prefix) - strict_urls = common.models.InvenTreeSetting.get_setting( - 'INVENTREE_STRICT_URLS', True, cache=False - ) + strict_urls = get_global_setting('INVENTREE_STRICT_URLS', cache=False) if not strict_urls: # Allow URLs which do not have a provided schema diff --git a/src/backend/InvenTree/InvenTree/version.py b/src/backend/InvenTree/InvenTree/version.py index 6c67752cb5..a33bec5e93 100644 --- a/src/backend/InvenTree/InvenTree/version.py +++ b/src/backend/InvenTree/InvenTree/version.py @@ -3,6 +3,7 @@ Provides information on the current InvenTree version """ +import logging import os import pathlib import platform @@ -14,20 +15,29 @@ from datetime import timedelta as td import django from django.conf import settings -from dulwich.repo import NotGitRepository, Repo - -from common.settings import get_global_setting - from .api_version import INVENTREE_API_TEXT, INVENTREE_API_VERSION # InvenTree software version -INVENTREE_SW_VERSION = '0.16.0 dev' +INVENTREE_SW_VERSION = '0.17.0 dev' + + +logger = logging.getLogger('inventree') + # Discover git try: + from dulwich.repo import Repo + main_repo = Repo(pathlib.Path(__file__).parent.parent.parent.parent.parent) main_commit = main_repo[main_repo.head()] -except (NotGitRepository, FileNotFoundError): +except (ImportError, ModuleNotFoundError): + logger.warning( + 'Warning: Dulwich module not found, git information will not be available.' + ) + main_repo = None + main_commit = None +except Exception: + main_repo = None main_commit = None @@ -53,13 +63,17 @@ def checkMinPythonVersion(): def inventreeInstanceName(): """Returns the InstanceName settings for the current database.""" - return get_global_setting('INVENTREE_INSTANCE', '') + from common.settings import get_global_setting + + return get_global_setting('INVENTREE_INSTANCE') def inventreeInstanceTitle(): """Returns the InstanceTitle for the current database.""" - if get_global_setting('INVENTREE_INSTANCE_TITLE', False): - return get_global_setting('INVENTREE_INSTANCE', 'InvenTree') + from common.settings import get_global_setting + + if get_global_setting('INVENTREE_INSTANCE_TITLE'): + return get_global_setting('INVENTREE_INSTANCE') return 'InvenTree' @@ -103,7 +117,7 @@ def inventreeDocUrl(): def inventreeAppUrl(): """Return URL for InvenTree app site.""" - return f'https://docs.inventree.org/app/' + return 'https://docs.inventree.org/app/' def inventreeCreditsUrl(): @@ -121,6 +135,8 @@ def isInvenTreeUpToDate(): A background task periodically queries GitHub for latest version, and stores it to the database as "_INVENTREE_LATEST_VERSION" """ + from common.settings import get_global_setting + latest = get_global_setting( '_INVENTREE_LATEST_VERSION', backup_value=None, create=False ) diff --git a/src/backend/InvenTree/InvenTree/views.py b/src/backend/InvenTree/InvenTree/views.py index 176e704b19..4f2293b894 100644 --- a/src/backend/InvenTree/InvenTree/views.py +++ b/src/backend/InvenTree/InvenTree/views.py @@ -614,7 +614,7 @@ class AppearanceSelectView(RedirectView): """Get current user color theme.""" try: user_theme = common_models.ColorTheme.objects.filter( - user=self.request.user + user_obj=self.request.user ).get() except common_models.ColorTheme.DoesNotExist: user_theme = None @@ -631,7 +631,7 @@ class AppearanceSelectView(RedirectView): # Create theme entry if user did not select one yet if not user_theme: user_theme = common_models.ColorTheme() - user_theme.user = request.user + user_theme.user_obj = request.user if theme: try: diff --git a/src/backend/InvenTree/build/api.py b/src/backend/InvenTree/build/api.py index dd0e3bb6b6..e84ffe4396 100644 --- a/src/backend/InvenTree/build/api.py +++ b/src/backend/InvenTree/build/api.py @@ -8,19 +8,20 @@ from django.contrib.auth.models import User from rest_framework.exceptions import ValidationError -from django_filters.rest_framework import DjangoFilterBackend from django_filters import rest_framework as rest_filters -from InvenTree.api import AttachmentMixin, APIDownloadMixin, ListCreateDestroyAPIView, MetadataView +from importer.mixins import DataExportViewMixin + +from InvenTree.api import BulkDeleteMixin, MetadataView from generic.states.api import StatusView -from InvenTree.helpers import str2bool, isNull, DownloadFile +from InvenTree.helpers import str2bool, isNull from build.status_codes import BuildStatus, BuildStatusGroups from InvenTree.mixins import CreateAPI, RetrieveUpdateDestroyAPI, ListCreateAPI import common.models import build.admin import build.serializers -from build.models import Build, BuildLine, BuildItem, BuildOrderAttachment +from build.models import Build, BuildLine, BuildItem import part.models from users.models import Owner from InvenTree.filters import SEARCH_ORDER_FILTER_ALIAS @@ -125,7 +126,7 @@ class BuildMixin: return queryset -class BuildList(APIDownloadMixin, BuildMixin, ListCreateAPI): +class BuildList(DataExportViewMixin, BuildMixin, ListCreateAPI): """API endpoint for accessing a list of Build objects. - GET: Return list of objects (with filters) @@ -176,15 +177,6 @@ class BuildList(APIDownloadMixin, BuildMixin, ListCreateAPI): return queryset - def download_queryset(self, queryset, export_format): - """Download the queryset data as a file.""" - dataset = build.admin.BuildResource().export(queryset=queryset) - - filedata = dataset.export(export_format) - filename = f"InvenTree_BuildOrders.{export_format}" - - return DownloadFile(filedata, filename) - def filter_queryset(self, queryset): """Custom query filtering for the BuildList endpoint.""" queryset = super().filter_queryset(queryset) @@ -351,7 +343,7 @@ class BuildLineEndpoint: return queryset -class BuildLineList(BuildLineEndpoint, ListCreateAPI): +class BuildLineList(BuildLineEndpoint, DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of BuildLine objects""" filterset_class = BuildLineFilter @@ -367,6 +359,8 @@ class BuildLineList(BuildLineEndpoint, ListCreateAPI): 'unit_quantity', 'available_stock', 'trackable', + 'allow_variants', + 'inherited', ] ordering_field_aliases = { @@ -376,6 +370,8 @@ class BuildLineList(BuildLineEndpoint, ListCreateAPI): 'consumable': 'bom_item__consumable', 'optional': 'bom_item__optional', 'trackable': 'bom_item__sub_part__trackable', + 'allow_variants': 'bom_item__allow_variants', + 'inherited': 'bom_item__inherited', } search_fields = [ @@ -474,9 +470,19 @@ class BuildFinish(BuildOrderContextMixin, CreateAPI): """API endpoint for marking a build as finished (completed).""" queryset = Build.objects.none() - serializer_class = build.serializers.BuildCompleteSerializer + def get_queryset(self): + """Return the queryset for the BuildFinish API endpoint.""" + + queryset = super().get_queryset() + queryset = queryset.prefetch_related( + 'build_lines', + 'build_lines__allocations' + ) + + return queryset + class BuildAutoAllocate(BuildOrderContextMixin, CreateAPI): """API endpoint for 'automatically' allocating stock against a build order. @@ -488,7 +494,6 @@ class BuildAutoAllocate(BuildOrderContextMixin, CreateAPI): """ queryset = Build.objects.none() - serializer_class = build.serializers.BuildAutoAllocationSerializer @@ -504,10 +509,22 @@ class BuildAllocate(BuildOrderContextMixin, CreateAPI): """ queryset = Build.objects.none() - serializer_class = build.serializers.BuildAllocationSerializer +class BuildIssue(BuildOrderContextMixin, CreateAPI): + """API endpoint for issuing a BuildOrder.""" + + queryset = Build.objects.all() + serializer_class = build.serializers.BuildIssueSerializer + + +class BuildHold(BuildOrderContextMixin, CreateAPI): + """API endpoint for placing a BuildOrder on hold.""" + + queryset = Build.objects.all() + serializer_class = build.serializers.BuildHoldSerializer + class BuildCancel(BuildOrderContextMixin, CreateAPI): """API endpoint for cancelling a BuildOrder.""" @@ -553,15 +570,17 @@ class BuildItemFilter(rest_filters.FilterSet): return queryset.filter(install_into=None) -class BuildItemList(ListCreateAPI): +class BuildItemList(DataExportViewMixin, BulkDeleteMixin, ListCreateAPI): """API endpoint for accessing a list of BuildItem objects. - GET: Return list of objects - POST: Create a new BuildItem object """ + queryset = BuildItem.objects.all() serializer_class = build.serializers.BuildItemSerializer filterset_class = BuildItemFilter + filter_backends = SEARCH_ORDER_FILTER_ALIAS def get_serializer(self, *args, **kwargs): """Returns a BuildItemSerializer instance based on the request.""" @@ -577,16 +596,25 @@ class BuildItemList(ListCreateAPI): return self.serializer_class(*args, **kwargs) def get_queryset(self): - """Override the queryset method, to allow filtering by stock_item.part.""" - queryset = BuildItem.objects.all() + """Override the queryset method, to perform custom prefetch.""" + queryset = super().get_queryset() queryset = queryset.select_related( 'build_line', 'build_line__build', + 'build_line__bom_item', + 'build_line__bom_item__part', + 'build_line__bom_item__sub_part', 'install_into', 'stock_item', 'stock_item__location', 'stock_item__part', + 'stock_item__supplier_part__part', + 'stock_item__supplier_part__supplier', + 'stock_item__supplier_part__manufacturer_part', + 'stock_item__supplier_part__manufacturer_part__manufacturer', + ).prefetch_related( + 'stock_item__location__tags', ) return queryset @@ -609,37 +637,30 @@ class BuildItemList(ListCreateAPI): return queryset - filter_backends = [ - DjangoFilterBackend, + ordering_fields = [ + 'part', + 'sku', + 'quantity', + 'location', + 'reference', ] + ordering_field_aliases = { + 'part': 'stock_item__part__name', + 'sku': 'stock_item__supplier_part__SKU', + 'location': 'stock_item__location__name', + 'reference': 'build_line__bom_item__reference', + } -class BuildAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): - """API endpoint for listing (and creating) BuildOrderAttachment objects.""" - - queryset = BuildOrderAttachment.objects.all() - serializer_class = build.serializers.BuildAttachmentSerializer - - filterset_fields = [ - 'build', + search_fields = [ + 'stock_item__supplier_part__SKU', + 'stock_item__part__name', + 'build_line__bom_item__reference', ] -class BuildAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): - """Detail endpoint for a BuildOrderAttachment object.""" - - queryset = BuildOrderAttachment.objects.all() - serializer_class = build.serializers.BuildAttachmentSerializer - - build_api_urls = [ - # Attachments - path('attachment/', include([ - path('/', BuildAttachmentDetail.as_view(), name='api-build-attachment-detail'), - path('', BuildAttachmentList.as_view(), name='api-build-attachment-list'), - ])), - # Build lines path('line/', include([ path('/', BuildLineDetail.as_view(), name='api-build-line-detail'), @@ -663,6 +684,8 @@ build_api_urls = [ path('create-output/', BuildOutputCreate.as_view(), name='api-build-output-create'), path('delete-outputs/', BuildOutputDelete.as_view(), name='api-build-output-delete'), path('scrap-outputs/', BuildOutputScrap.as_view(), name='api-build-output-scrap'), + path('issue/', BuildIssue.as_view(), name='api-build-issue'), + path('hold/', BuildHold.as_view(), name='api-build-hold'), path('finish/', BuildFinish.as_view(), name='api-build-finish'), path('cancel/', BuildCancel.as_view(), name='api-build-cancel'), path('unallocate/', BuildUnallocate.as_view(), name='api-build-unallocate'), diff --git a/src/backend/InvenTree/build/migrations/0021_auto_20201020_0908_squashed_0026_auto_20201023_1228.py b/src/backend/InvenTree/build/migrations/0021_auto_20201020_0908_squashed_0026_auto_20201023_1228.py index 8db4a7f952..5094d74c6d 100644 --- a/src/backend/InvenTree/build/migrations/0021_auto_20201020_0908_squashed_0026_auto_20201023_1228.py +++ b/src/backend/InvenTree/build/migrations/0021_auto_20201020_0908_squashed_0026_auto_20201023_1228.py @@ -5,6 +5,8 @@ from django.db import migrations, models import django.db.models.deletion import mptt.fields +from build.status_codes import BuildStatus + class Migration(migrations.Migration): @@ -40,7 +42,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='build', name='status', - field=models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'Production'), (30, 'Cancelled'), (40, 'Complete')], default=10, help_text='Build status code', validators=[django.core.validators.MinValueValidator(0)], verbose_name='Build Status'), + field=models.PositiveIntegerField(choices=BuildStatus.items(), default=BuildStatus.PENDING.value, help_text='Build status code', validators=[django.core.validators.MinValueValidator(0)], verbose_name='Build Status'), ), migrations.AlterField( model_name='build', diff --git a/src/backend/InvenTree/build/migrations/0022_buildorderattachment.py b/src/backend/InvenTree/build/migrations/0022_buildorderattachment.py index 0256649027..47ecbf7f98 100644 --- a/src/backend/InvenTree/build/migrations/0022_buildorderattachment.py +++ b/src/backend/InvenTree/build/migrations/0022_buildorderattachment.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): name='BuildOrderAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment)), + ('attachment', models.FileField(help_text='Select file to attach', upload_to='attachments')), ('comment', models.CharField(blank=True, help_text='File comment', max_length=100)), ('upload_date', models.DateField(auto_now_add=True, null=True)), ('build', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='build.Build')), diff --git a/src/backend/InvenTree/build/migrations/0027_auto_20210404_2016.py b/src/backend/InvenTree/build/migrations/0027_auto_20210404_2016.py index f4a2c1afde..6d34eae5b5 100644 --- a/src/backend/InvenTree/build/migrations/0027_auto_20210404_2016.py +++ b/src/backend/InvenTree/build/migrations/0027_auto_20210404_2016.py @@ -65,7 +65,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='buildorderattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), ), migrations.AlterField( model_name='buildorderattachment', diff --git a/src/backend/InvenTree/build/migrations/0033_auto_20211128_0151.py b/src/backend/InvenTree/build/migrations/0033_auto_20211128_0151.py index db8df848ce..5558fe8973 100644 --- a/src/backend/InvenTree/build/migrations/0033_auto_20211128_0151.py +++ b/src/backend/InvenTree/build/migrations/0033_auto_20211128_0151.py @@ -20,6 +20,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='buildorderattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), ), ] diff --git a/src/backend/InvenTree/build/migrations/0051_delete_buildorderattachment.py b/src/backend/InvenTree/build/migrations/0051_delete_buildorderattachment.py new file mode 100644 index 0000000000..d600bd240f --- /dev/null +++ b/src/backend/InvenTree/build/migrations/0051_delete_buildorderattachment.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.12 on 2024-06-09 09:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0050_auto_20240508_0138'), + ('common', '0026_auto_20240608_1238'), + ('company', '0069_company_active'), + ('order', '0099_alter_salesorder_status'), + ('part', '0123_parttesttemplate_choices'), + ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') + ] + + operations = [ + migrations.DeleteModel( + name='BuildOrderAttachment', + ), + ] diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py index 31bf282d59..adde7080da 100644 --- a/src/backend/InvenTree/build/models.py +++ b/src/backend/InvenTree/build/models.py @@ -2,7 +2,6 @@ import decimal import logging -import os from datetime import datetime from django.conf import settings @@ -26,6 +25,7 @@ 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 +from generic.states import StateTransitionMixin import InvenTree.fields import InvenTree.helpers @@ -50,11 +50,13 @@ logger = logging.getLogger('inventree') class Build( report.mixins.InvenTreeReportMixin, + InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, InvenTree.models.MetadataMixin, InvenTree.models.PluginValidationMixin, InvenTree.models.ReferenceIndexingMixin, + StateTransitionMixin, MPTTModel): """A Build object organises the creation of new StockItem objects from other existing StockItem objects. @@ -103,7 +105,7 @@ class Build( } @classmethod - def api_defaults(cls, request): + def api_defaults(cls, request=None): """Return default values for this model when issuing an API OPTIONS request.""" defaults = { 'reference': generate_next_build_reference(), @@ -114,13 +116,42 @@ class Build( return defaults + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return "BO" + def save(self, *args, **kwargs): """Custom save method for the BuildOrder model""" self.validate_reference_field(self.reference) self.reference_int = self.rebuild_reference_field(self.reference) + # Check part when initially creating the build order + if not self.pk or self.has_field_changed('part'): + if get_global_setting('BUILDORDER_REQUIRE_VALID_BOM'): + # Check that the BOM is valid + if not self.part.is_bom_valid(): + raise ValidationError({ + 'part': _('Assembly BOM has not been validated') + }) + + if get_global_setting('BUILDORDER_REQUIRE_ACTIVE_PART'): + # Check that the part is active + if not self.part.active: + raise ValidationError({ + 'part': _('Build order cannot be created for an inactive part') + }) + + if get_global_setting('BUILDORDER_REQUIRE_LOCKED_PART'): + # Check that the part is locked + if not self.part.locked: + raise ValidationError({ + 'part': _('Build order cannot be created for an unlocked part') + }) + # 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() @@ -364,9 +395,9 @@ class Build( def sub_builds(self, cascade=True): """Return all Build Order objects under this one.""" if cascade: - return Build.objects.filter(parent=self.pk) - descendants = self.get_descendants(include_self=True) - Build.objects.filter(parent__pk__in=[d.pk for d in descendants]) + return self.get_descendants(include_self=False) + else: + return self.get_children() def sub_build_count(self, cascade=True): """Return the number of sub builds under this one. @@ -376,6 +407,11 @@ class Build( """ return self.sub_builds(cascade=cascade).count() + @property + def has_open_child_builds(self): + """Return True if this build order has any open child builds.""" + return self.sub_builds().filter(status__in=BuildStatusGroups.ACTIVE_CODES).exists() + @property def is_overdue(self): """Returns true if this build is "overdue". @@ -544,6 +580,13 @@ class Build( - Completed count must meet the required quantity - Untracked parts must be allocated """ + + if get_global_setting('BUILDORDER_REQUIRE_CLOSED_CHILDS') and self.has_open_child_builds: + return False + + if self.status != BuildStatus.PRODUCTION.value: + return False + if self.incomplete_count > 0: return False @@ -572,8 +615,22 @@ class Build( def complete_build(self, user, trim_allocated_stock=False): """Mark this build as complete.""" + return self.handle_transition( + self.status, BuildStatus.COMPLETE.value, self, self._action_complete, user=user, trim_allocated_stock=trim_allocated_stock + ) + + def _action_complete(self, *args, **kwargs): + """Action to be taken when a build is completed.""" + import build.tasks + trim_allocated_stock = kwargs.pop('trim_allocated_stock', False) + user = kwargs.pop('user', None) + + # Prevent completion if there are open child builds + if get_global_setting('BUILDORDER_REQUIRE_CLOSED_CHILDS') and self.has_open_child_builds: + return + if self.incomplete_count > 0: return @@ -635,6 +692,59 @@ class Build( target_exclude=[user], ) + @transaction.atomic + def issue_build(self): + """Mark the Build as IN PRODUCTION. + + Args: + user: The user who is issuing the build + """ + return self.handle_transition( + self.status, BuildStatus.PENDING.value, self, self._action_issue + ) + + @property + def can_issue(self): + """Returns True if this BuildOrder can be issued.""" + return self.status in [ + BuildStatus.PENDING.value, + BuildStatus.ON_HOLD.value, + ] + + def _action_issue(self, *args, **kwargs): + """Perform the action to mark this order as PRODUCTION.""" + + if self.can_issue: + self.status = BuildStatus.PRODUCTION.value + self.save() + + trigger_event('build.issued', id=self.pk) + + @transaction.atomic + def hold_build(self): + """Mark the Build as ON HOLD.""" + + return self.handle_transition( + self.status, BuildStatus.ON_HOLD.value, self, self._action_hold + ) + + @property + def can_hold(self): + """Returns True if this BuildOrder can be placed on hold""" + return self.status in [ + BuildStatus.PENDING.value, + BuildStatus.PRODUCTION.value, + ] + + def _action_hold(self, *args, **kwargs): + """Action to be taken when a build is placed on hold.""" + + if self.can_hold: + self.status = BuildStatus.ON_HOLD.value + self.save() + + trigger_event('build.hold', id=self.pk) + @transaction.atomic def cancel_build(self, user, **kwargs): """Mark the Build as CANCELLED. @@ -644,8 +754,17 @@ class Build( - Save the Build object """ + return self.handle_transition( + self.status, BuildStatus.CANCELLED.value, self, self._action_cancel, user=user, **kwargs + ) + + def _action_cancel(self, *args, **kwargs): + """Action to be taken when a build is cancelled.""" + import build.tasks + user = kwargs.pop('user', None) + remove_allocated_stock = kwargs.get('remove_allocated_stock', False) remove_incomplete_outputs = kwargs.get('remove_incomplete_outputs', False) @@ -867,7 +986,10 @@ class Build( items_to_save = [] items_to_delete = [] - for build_line in self.untracked_line_items: + lines = self.untracked_line_items + lines = lines.prefetch_related('allocations') + + for build_line in lines: reduce_by = build_line.allocated_quantity() - build_line.quantity @@ -1246,7 +1368,7 @@ class Build( @property def is_complete(self): """Returns True if the build status is COMPLETE.""" - return self.status == BuildStatus.COMPLETE + return self.status == BuildStatus.COMPLETE.value @transaction.atomic def create_build_line_items(self, prevent_duplicates=True): @@ -1322,16 +1444,6 @@ def after_save_build(sender, instance: Build, created: bool, **kwargs): instance.update_build_line_items() -class BuildOrderAttachment(InvenTree.models.InvenTreeAttachment): - """Model for storing file attachments against a BuildOrder object.""" - - def getSubdir(self): - """Return the media file subdirectory for storing BuildOrder attachments""" - return os.path.join('bo_files', str(self.build.id)) - - build = models.ForeignKey(Build, on_delete=models.CASCADE, related_name='attachments') - - class BuildLine(report.mixins.InvenTreeReportMixin, InvenTree.models.InvenTreeModel): """A BuildLine object links a BOMItem to a Build. diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 4be7409fde..ef73686a9b 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -1,5 +1,7 @@ """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 _ @@ -13,8 +15,7 @@ from django.db.models.functions import Coalesce from rest_framework import serializers from rest_framework.serializers import ValidationError -from InvenTree.serializers import InvenTreeModelSerializer, InvenTreeAttachmentSerializer -from InvenTree.serializers import UserSerializer +from InvenTree.serializers import InvenTreeModelSerializer, UserSerializer import InvenTree.helpers from InvenTree.serializers import InvenTreeDecimalField, NotesFieldMixin @@ -22,18 +23,22 @@ from stock.status_codes import StockStatus from stock.generators import generate_batch_code from stock.models import StockItem, StockLocation -from stock.serializers import StockItemSerializerBrief, LocationSerializer +from stock.serializers import StockItemSerializerBrief, LocationBriefSerializer import common.models from common.serializers import ProjectCodeSerializer +from common.settings import get_global_setting +from importer.mixins import DataImportExportSerializerMixin +import company.serializers import part.filters -from part.serializers import BomItemSerializer, PartSerializer, PartBriefSerializer +import part.serializers as part_serializers from users.serializers import OwnerSerializer -from .models import Build, BuildLine, BuildItem, BuildOrderAttachment +from .models import Build, BuildLine, BuildItem +from .status_codes import BuildStatus -class BuildSerializer(NotesFieldMixin, InvenTreeModelSerializer): +class BuildSerializer(NotesFieldMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer): """Serializes a Build object.""" class Meta: @@ -51,8 +56,10 @@ class BuildSerializer(NotesFieldMixin, InvenTreeModelSerializer): 'destination', 'parent', 'part', + 'part_name', 'part_detail', 'project_code', + 'project_code_label', 'project_code_detail', 'overdue', 'reference', @@ -83,7 +90,9 @@ class BuildSerializer(NotesFieldMixin, InvenTreeModelSerializer): status_text = serializers.CharField(source='get_status_display', read_only=True) - part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + part_detail = part_serializers.PartBriefSerializer(source='part', many=False, read_only=True) + + part_name = serializers.CharField(source='part.name', read_only=True, label=_('Part Name')) quantity = InvenTreeDecimalField() @@ -95,6 +104,8 @@ class BuildSerializer(NotesFieldMixin, InvenTreeModelSerializer): barcode_hash = serializers.CharField(read_only=True) + project_code_label = serializers.CharField(source='project_code.code', read_only=True, label=_('Project Code Label')) + project_code_detail = ProjectCodeSerializer(source='project_code', many=False, read_only=True) @staticmethod @@ -125,7 +136,7 @@ class BuildSerializer(NotesFieldMixin, InvenTreeModelSerializer): super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) reference = serializers.CharField(required=True) @@ -202,7 +213,7 @@ class BuildOutputQuantitySerializer(BuildOutputSerializer): quantity = serializers.DecimalField( max_digits=15, decimal_places=5, - min_value=0, + min_value=Decimal(0), required=True, label=_('Quantity'), help_text=_('Enter quantity for build output'), @@ -249,7 +260,7 @@ class BuildOutputCreateSerializer(serializers.Serializer): quantity = serializers.DecimalField( max_digits=15, decimal_places=5, - min_value=0, + min_value=Decimal(0), required=True, label=_('Quantity'), help_text=_('Enter quantity for build output'), @@ -588,6 +599,33 @@ class BuildOutputCompleteSerializer(serializers.Serializer): ) +class BuildIssueSerializer(serializers.Serializer): + """DRF serializer for issuing a build order.""" + + class Meta: + """Serializer metaclass""" + fields = [] + + def save(self): + """Issue the specified build order""" + build = self.context['build'] + build.issue_build() + + +class BuildHoldSerializer(serializers.Serializer): + """DRF serializer for placing a BuildOrder on hold.""" + + class Meta: + """Serializer metaclass.""" + fields = [] + + def save(self): + """Place the specified build on hold.""" + build = self.context['build'] + + build.hold_build() + + class BuildCancelSerializer(serializers.Serializer): """DRF serializer class for cancelling an active BuildOrder""" @@ -728,6 +766,12 @@ class BuildCompleteSerializer(serializers.Serializer): """Perform validation of this serializer prior to saving""" build = self.context['build'] + if get_global_setting('BUILDORDER_REQUIRE_CLOSED_CHILDS') and build.has_open_child_builds: + raise ValidationError(_("Build order has open child build orders")) + + if build.status != BuildStatus.PRODUCTION.value: + raise ValidationError(_("Build order must be in production state")) + if build.incomplete_count > 0: raise ValidationError(_("Build order has incomplete outputs")) @@ -857,7 +901,7 @@ class BuildAllocationItemSerializer(serializers.Serializer): quantity = serializers.DecimalField( max_digits=15, decimal_places=5, - min_value=0, + min_value=Decimal(0), required=True ) @@ -1050,8 +1094,26 @@ class BuildAutoAllocationSerializer(serializers.Serializer): raise ValidationError(_("Failed to start auto-allocation task")) -class BuildItemSerializer(InvenTreeModelSerializer): - """Serializes a BuildItem object.""" +class BuildItemSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): + """Serializes a BuildItem object, which is an allocation of a stock item against a build order.""" + + # These fields are only used for data export + export_only_fields = [ + 'bom_part_id', + 'bom_part_name', + 'build_reference', + 'sku', + 'mpn', + 'location_name', + 'part_id', + 'part_name', + 'part_ipn', + 'part_description', + 'available_quantity', + 'item_batch_code', + 'item_serial', + 'item_packaging', + ] class Meta: """Serializer metaclass""" @@ -1063,23 +1125,33 @@ class BuildItemSerializer(InvenTreeModelSerializer): 'install_into', 'stock_item', 'quantity', + 'location', + + # Detail fields, can be included or excluded + 'build_detail', 'location_detail', 'part_detail', 'stock_item_detail', - 'build_detail', + 'supplier_part_detail', + + # The following fields are only used for data export + 'bom_reference', + 'bom_part_id', + 'bom_part_name', + 'build_reference', + 'location_name', + 'mpn', + 'sku', + 'part_id', + 'part_name', + 'part_ipn', + 'part_description', + 'available_quantity', + 'item_batch_code', + 'item_serial_number', + 'item_packaging', ] - # Annotated fields - build = serializers.PrimaryKeyRelatedField(source='build_line.build', many=False, read_only=True) - - # Extra (optional) detail fields - part_detail = PartBriefSerializer(source='stock_item.part', many=False, read_only=True, pricing=False) - stock_item_detail = StockItemSerializerBrief(source='stock_item', read_only=True) - location_detail = LocationSerializer(source='stock_item.location', read_only=True) - build_detail = BuildSerializer(source='build_line.build', many=False, read_only=True) - - quantity = InvenTreeDecimalField() - def __init__(self, *args, **kwargs): """Determine which extra details fields should be included""" part_detail = kwargs.pop('part_detail', True) @@ -1090,21 +1162,65 @@ class BuildItemSerializer(InvenTreeModelSerializer): super().__init__(*args, **kwargs) if not part_detail: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) if not location_detail: - self.fields.pop('location_detail') + self.fields.pop('location_detail', None) if not stock_detail: - self.fields.pop('stock_item_detail') + self.fields.pop('stock_item_detail', None) if not build_detail: - self.fields.pop('build_detail') + self.fields.pop('build_detail', None) + + # Export-only fields + sku = serializers.CharField(source='stock_item.supplier_part.SKU', label=_('Supplier Part Number'), read_only=True) + mpn = serializers.CharField(source='stock_item.supplier_part.manufacturer_part.MPN', label=_('Manufacturer Part Number'), read_only=True) + location_name = serializers.CharField(source='stock_item.location.name', label=_('Location Name'), read_only=True) + build_reference = serializers.CharField(source='build.reference', label=_('Build Reference'), read_only=True) + bom_reference = serializers.CharField(source='build_line.bom_item.reference', label=_('BOM Reference'), read_only=True) + item_packaging = serializers.CharField(source='stock_item.packaging', label=_('Packaging'), read_only=True) + + # Part detail fields + part_id = serializers.PrimaryKeyRelatedField(source='stock_item.part', label=_('Part ID'), many=False, read_only=True) + part_name = serializers.CharField(source='stock_item.part.name', label=_('Part Name'), read_only=True) + part_ipn = serializers.CharField(source='stock_item.part.IPN', label=_('Part IPN'), read_only=True) + part_description = serializers.CharField(source='stock_item.part.description', label=_('Part Description'), read_only=True) + + # BOM Item Part ID (it may be different to the allocated part) + bom_part_id = serializers.PrimaryKeyRelatedField(source='build_line.bom_item.sub_part', label=_('BOM Part ID'), many=False, read_only=True) + bom_part_name = serializers.CharField(source='build_line.bom_item.sub_part.name', label=_('BOM Part Name'), read_only=True) + + item_batch_code = serializers.CharField(source='stock_item.batch', label=_('Batch Code'), read_only=True) + item_serial_number = serializers.CharField(source='stock_item.serial', label=_('Serial Number'), read_only=True) + + # Annotated fields + build = serializers.PrimaryKeyRelatedField(source='build_line.build', many=False, read_only=True) + + # Extra (optional) detail fields + part_detail = part_serializers.PartBriefSerializer(source='stock_item.part', many=False, read_only=True, pricing=False) + stock_item_detail = StockItemSerializerBrief(source='stock_item', read_only=True) + location = serializers.PrimaryKeyRelatedField(source='stock_item.location', many=False, read_only=True) + location_detail = LocationBriefSerializer(source='stock_item.location', read_only=True) + build_detail = BuildSerializer(source='build_line.build', many=False, read_only=True) + supplier_part_detail = company.serializers.SupplierPartSerializer(source='stock_item.supplier_part', many=False, read_only=True, brief=True) + + quantity = InvenTreeDecimalField(label=_('Allocated Quantity')) + available_quantity = InvenTreeDecimalField(source='stock_item.quantity', read_only=True, label=_('Available Quantity')) -class BuildLineSerializer(InvenTreeModelSerializer): +class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): """Serializer for a BuildItem object.""" + export_exclude_fields = [ + 'allocations', + ] + + export_only_fields = [ + 'part_description', + 'part_category_name', + ] + class Meta: """Serializer metaclass""" @@ -1118,6 +1234,20 @@ class BuildLineSerializer(InvenTreeModelSerializer): 'quantity', 'allocations', + # BOM item detail fields + 'reference', + 'consumable', + 'optional', + 'trackable', + 'inherited', + 'allow_variants', + + # Part detail fields + 'part', + 'part_name', + 'part_IPN', + 'part_category_id', + # Annotated fields 'allocated', 'in_production', @@ -1127,6 +1257,10 @@ class BuildLineSerializer(InvenTreeModelSerializer): 'available_variant_stock', 'total_available_stock', 'external_stock', + + # Extra fields only for data export + 'part_description', + 'part_category_name', ] read_only_fields = [ @@ -1135,13 +1269,30 @@ class BuildLineSerializer(InvenTreeModelSerializer): 'allocations', ] - quantity = serializers.FloatField() + # Part info fields + part = serializers.PrimaryKeyRelatedField(source='bom_item.sub_part', label=_('Part'), many=False, read_only=True) + part_name = serializers.CharField(source='bom_item.sub_part.name', label=_('Part Name'), read_only=True) + part_IPN = serializers.CharField(source='bom_item.sub_part.IPN', label=_('Part IPN'), read_only=True) + + part_description = serializers.CharField(source='bom_item.sub_part.description', label=_('Part Description'), read_only=True) + part_category_id = serializers.PrimaryKeyRelatedField(source='bom_item.sub_part.category', label=_('Part Category ID'), read_only=True) + part_category_name = serializers.CharField(source='bom_item.sub_part.category.name', label=_('Part Category Name'), read_only=True) + + # BOM item info fields + reference = serializers.CharField(source='bom_item.reference', label=_('Reference'), read_only=True) + consumable = serializers.BooleanField(source='bom_item.consumable', label=_('Consumable'), read_only=True) + optional = serializers.BooleanField(source='bom_item.optional', label=_('Optional'), read_only=True) + trackable = serializers.BooleanField(source='bom_item.sub_part.trackable', label=_('Trackable'), read_only=True) + inherited = serializers.BooleanField(source='bom_item.inherited', label=_('Inherited'), read_only=True) + allow_variants = serializers.BooleanField(source='bom_item.allow_variants', label=_('Allow Variants'), read_only=True) + + quantity = serializers.FloatField(label=_('Quantity')) bom_item = serializers.PrimaryKeyRelatedField(label=_('BOM Item'), read_only=True) # Foreign key fields - bom_item_detail = BomItemSerializer(source='bom_item', many=False, read_only=True, pricing=False) - part_detail = PartSerializer(source='bom_item.sub_part', many=False, read_only=True, pricing=False) + bom_item_detail = part_serializers.BomItemSerializer(source='bom_item', many=False, read_only=True, pricing=False) + part_detail = part_serializers.PartBriefSerializer(source='bom_item.sub_part', many=False, read_only=True, pricing=False) allocations = BuildItemSerializer(many=True, read_only=True) # Annotated (calculated) fields @@ -1165,10 +1316,10 @@ class BuildLineSerializer(InvenTreeModelSerializer): read_only=True ) - available_substitute_stock = serializers.FloatField(read_only=True) - available_variant_stock = serializers.FloatField(read_only=True) - total_available_stock = serializers.FloatField(read_only=True) - external_stock = serializers.FloatField(read_only=True) + available_substitute_stock = serializers.FloatField(read_only=True, label=_('Available Substitute Stock')) + available_variant_stock = serializers.FloatField(read_only=True, label=_('Available Variant Stock')) + total_available_stock = serializers.FloatField(read_only=True, label=_('Total Available Stock')) + external_stock = serializers.FloatField(read_only=True, label=_('External Stock')) @staticmethod def annotate_queryset(queryset, build=None): @@ -1187,16 +1338,20 @@ class BuildLineSerializer(InvenTreeModelSerializer): """ queryset = queryset.select_related( - 'build', 'bom_item', + 'build', + 'bom_item', + 'bom_item__part', + 'bom_item__part__pricing_data', + 'bom_item__sub_part', + 'bom_item__sub_part__pricing_data', ) # Pre-fetch related fields queryset = queryset.prefetch_related( - 'bom_item__sub_part', + 'bom_item__sub_part__tags', 'bom_item__sub_part__stock_items', 'bom_item__sub_part__stock_items__allocations', 'bom_item__sub_part__stock_items__sales_order_allocations', - 'bom_item__sub_part__tags', 'bom_item__substitutes', 'bom_item__substitutes__part__stock_items', @@ -1208,6 +1363,11 @@ class BuildLineSerializer(InvenTreeModelSerializer): 'allocations__stock_item__part', 'allocations__stock_item__location', 'allocations__stock_item__location__tags', + 'allocations__stock_item__supplier_part', + 'allocations__stock_item__supplier_part__part', + 'allocations__stock_item__supplier_part__supplier', + 'allocations__stock_item__supplier_part__manufacturer_part', + 'allocations__stock_item__supplier_part__manufacturer_part__manufacturer', ) # Annotate the "allocated" quantity @@ -1311,15 +1471,3 @@ class BuildLineSerializer(InvenTreeModelSerializer): ) return queryset - - -class BuildAttachmentSerializer(InvenTreeAttachmentSerializer): - """Serializer for a BuildAttachment.""" - - class Meta: - """Serializer metaclass""" - model = BuildOrderAttachment - - fields = InvenTreeAttachmentSerializer.attachment_fields([ - 'build', - ]) diff --git a/src/backend/InvenTree/build/status_codes.py b/src/backend/InvenTree/build/status_codes.py index 463bd22059..56c8a3a5d6 100644 --- a/src/backend/InvenTree/build/status_codes.py +++ b/src/backend/InvenTree/build/status_codes.py @@ -9,7 +9,8 @@ class BuildStatus(StatusCode): """Build status codes.""" PENDING = 10, _('Pending'), 'secondary' # Build is pending / active - PRODUCTION = 20, _('Production'), 'primary' # BuildOrder is in production + PRODUCTION = 20, _('Production'), 'primary' # Build is in production + ON_HOLD = 25, _('On Hold'), 'warning' # Build is on hold CANCELLED = 30, _('Cancelled'), 'danger' # Build was cancelled COMPLETE = 40, _('Complete'), 'success' # Build is complete @@ -17,4 +18,8 @@ class BuildStatus(StatusCode): class BuildStatusGroups: """Groups for BuildStatus codes.""" - ACTIVE_CODES = [BuildStatus.PENDING.value, BuildStatus.PRODUCTION.value] + ACTIVE_CODES = [ + BuildStatus.PENDING.value, + BuildStatus.ON_HOLD.value, + BuildStatus.PRODUCTION.value, + ] diff --git a/src/backend/InvenTree/build/templates/build/build_base.html b/src/backend/InvenTree/build/templates/build/build_base.html index 8254673fc7..536b95c6ec 100644 --- a/src/backend/InvenTree/build/templates/build/build_base.html +++ b/src/backend/InvenTree/build/templates/build/build_base.html @@ -69,22 +69,30 @@ src="{% static 'img/blank_image.png' %}" -{% if build.active %} +{% if build.can_issue %} + +{% elif build.active %} {% endif %} + {% endif %} {% endblock actions %} @@ -244,6 +252,31 @@ src="{% static 'img/blank_image.png' %}" ); }); + $('#build-hold').click(function() { + holdOrder( + '{% url "api-build-hold" build.pk %}', + { + reload: true, + } + ); + }); + + $('#build-issue').click(function() { + constructForm('{% url "api-build-issue" build.pk %}', { + method: 'POST', + title: '{% trans "Issue Build Order" %}', + confirm: true, + preFormContent: ` +
    + {% trans "Issue this Build Order?" %} +
    + `, + onSuccess: function(response) { + window.location.reload(); + } + }); + }); + $("#build-complete").on('click', function() { completeBuildOrder({{ build.pk }}); }); @@ -277,7 +310,7 @@ src="{% static 'img/blank_image.png' %}" $('#show-qr-code').click(function() { showQRDialog( '{% trans "Build Order QR Code" escape %}', - '{"build": {{ build.pk }} }' + '{{ build.barcode }}' ); }); @@ -298,6 +331,12 @@ src="{% static 'img/blank_image.png' %}" build: {{ build.pk }}, }); }); + + {% if build.part.trackable > 0 %} + onPanelLoad("test-statistics", function() { + prepareTestStatisticsTable('build', '{% url "api-test-statistics-by-build" build.pk %}') + }); + {% endif %} {% endif %} {% endif %} diff --git a/src/backend/InvenTree/build/templates/build/detail.html b/src/backend/InvenTree/build/templates/build/detail.html index 138f0a14d4..e1b2c47c61 100644 --- a/src/backend/InvenTree/build/templates/build/detail.html +++ b/src/backend/InvenTree/build/templates/build/detail.html @@ -174,7 +174,7 @@
    -

    {% trans "Allocate Stock to Build" %}

    +

    {% trans "Build Order Line Items" %}

    {% include "spacer.html" %}
    {% if roles.build.add and build.active %} @@ -231,6 +231,18 @@
    +
    +
    +

    {% trans "Allocated Stock" %}

    +
    +
    +
    + {% include "filter_list.html" with id='buildorderallocatedstock' %} +
    +
    +
    +
    +

    @@ -255,6 +267,21 @@

    +
    +
    +

    + {% trans "Build test statistics" %} +

    +
    + +
    +
    + {% include "filter_list.html" with id="buildteststatistics" %} +
    + {% include "test_statistics_table.html" with prefix="build-" %} +
    +
    +
    @@ -290,6 +317,10 @@ {% block js_ready %} {{ block.super }} +onPanelLoad('allocated', function() { + loadBuildOrderAllocatedStockTable($('#allocated-stock-table'), {{ build.pk }}); +}); + onPanelLoad('consumed', function() { loadStockTable($('#consumed-stock-table'), { filterTarget: '#filter-list-consumed-stock', @@ -326,18 +357,7 @@ onPanelLoad('children', function() { }); onPanelLoad('attachments', function() { - - loadAttachmentTable('{% url "api-build-attachment-list" %}', { - filters: { - build: {{ build.pk }}, - }, - fields: { - build: { - value: {{ build.pk }}, - hidden: true, - } - } - }); + loadAttachmentTable('build', {{ build.pk }}); }); onPanelLoad('notes', function() { diff --git a/src/backend/InvenTree/build/templates/build/sidebar.html b/src/backend/InvenTree/build/templates/build/sidebar.html index c038b7782a..ef3ca6f14d 100644 --- a/src/backend/InvenTree/build/templates/build/sidebar.html +++ b/src/backend/InvenTree/build/templates/build/sidebar.html @@ -5,17 +5,25 @@ {% trans "Build Order Details" as text %} {% include "sidebar_item.html" with label='details' text=text icon="fa-info-circle" %} {% if build.is_active %} -{% trans "Allocate Stock" as text %} -{% include "sidebar_item.html" with label='allocate' text=text icon="fa-tasks" %} +{% trans "Line Items" as text %} +{% include "sidebar_item.html" with label='allocate' text=text icon="fa-list-ol" %} {% trans "Incomplete Outputs" as text %} {% include "sidebar_item.html" with label='outputs' text=text icon="fa-tools" %} {% endif %} {% trans "Completed Outputs" as text %} {% include "sidebar_item.html" with label='completed' text=text icon="fa-boxes" %} +{% if build.is_active %} +{% trans "Allocated Stock" as text %} +{% include "sidebar_item.html" with label='allocated' text=text icon="fa-list" %} +{% endif %} {% trans "Consumed Stock" as text %} -{% include "sidebar_item.html" with label='consumed' text=text icon="fa-list" %} +{% include "sidebar_item.html" with label='consumed' text=text icon="fa-tasks" %} {% trans "Child Build Orders" as text %} {% include "sidebar_item.html" with label='children' text=text icon="fa-sitemap" %} +{% if build.part.trackable %} +{% trans "Test Statistics" as text %} +{% include "sidebar_item.html" with label='test-statistics' text=text icon="fa-chart-line" %} +{% endif %} {% trans "Attachments" as text %} {% include "sidebar_item.html" with label='attachments' text=text icon="fa-paperclip" %} {% trans "Notes" as text %} diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index b240521db6..518d4c4098 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -564,16 +564,16 @@ class BuildTest(BuildAPITest): def test_download_build_orders(self): """Test that we can download a list of build orders via the API""" required_cols = [ - 'reference', - 'status', - 'completed', - 'batch', - 'notes', - 'title', - 'part', - 'part_name', - 'id', - 'quantity', + 'Reference', + 'Build Status', + 'Completed items', + 'Batch Code', + 'Notes', + 'Description', + 'Part', + 'Part Name', + 'ID', + 'Quantity', ] excluded_cols = [ @@ -597,13 +597,13 @@ class BuildTest(BuildAPITest): for row in data: - build = Build.objects.get(pk=row['id']) + build = Build.objects.get(pk=row['ID']) - self.assertEqual(str(build.part.pk), row['part']) - self.assertEqual(build.part.full_name, row['part_name']) + self.assertEqual(str(build.part.pk), row['Part']) + self.assertEqual(build.part.name, row['Part Name']) - self.assertEqual(build.reference, row['reference']) - self.assertEqual(build.title, row['title']) + self.assertEqual(build.reference, row['Reference']) + self.assertEqual(build.title, row['Description']) class BuildAllocationTest(BuildAPITest): @@ -1015,7 +1015,7 @@ class BuildOverallocationTest(BuildAPITest): 'accept_overallocated': 'trim', }, expected_code=201, - max_query_count=550, # TODO: Come back and refactor this + max_query_count=600, # TODO: Come back and refactor this ) self.build.refresh_from_db() diff --git a/src/backend/InvenTree/build/test_build.py b/src/backend/InvenTree/build/test_build.py index 4f06038888..7e190e3e21 100644 --- a/src/backend/InvenTree/build/test_build.py +++ b/src/backend/InvenTree/build/test_build.py @@ -15,6 +15,7 @@ import common.models from common.settings import set_global_setting import build.tasks from build.models import Build, BuildItem, BuildLine, generate_next_build_reference +from build.status_codes import BuildStatus from part.models import Part, BomItem, BomItemSubstitute, PartTestTemplate from stock.models import StockItem, StockItemTestResult from users.models import Owner @@ -175,6 +176,7 @@ class BuildTestBase(TestCase): part=cls.assembly, quantity=10, issued_by=get_user_model().objects.get(pk=1), + status=BuildStatus.PENDING, ) # Create some BuildLine items we can use later on @@ -321,6 +323,10 @@ class BuildTest(BuildTestBase): # Build is PENDING self.assertEqual(self.build.status, status.BuildStatus.PENDING) + self.assertTrue(self.build.is_active) + self.assertTrue(self.build.can_hold) + self.assertTrue(self.build.can_issue) + # Build has two build outputs self.assertEqual(self.build.output_count, 2) @@ -470,6 +476,11 @@ class BuildTest(BuildTestBase): def test_overallocation_and_trim(self): """Test overallocation of stock and trim function""" + + self.assertEqual(self.build.status, status.BuildStatus.PENDING) + self.build.issue_build() + self.assertEqual(self.build.status, status.BuildStatus.PRODUCTION) + # Fully allocate tracked stock (not eligible for trimming) self.allocate_stock( self.output_1, @@ -516,6 +527,7 @@ class BuildTest(BuildTestBase): self.build.complete_build_output(self.output_1, None) self.build.complete_build_output(self.output_2, None) + self.assertTrue(self.build.can_complete) n = StockItem.objects.filter(consumed_by=self.build).count() @@ -583,6 +595,8 @@ class BuildTest(BuildTestBase): self.stock_2_1.quantity = 30 self.stock_2_1.save() + self.build.issue_build() + # Allocate non-tracked parts self.allocate_stock( None, diff --git a/src/backend/InvenTree/build/test_migrations.py b/src/backend/InvenTree/build/test_migrations.py index dba739764a..4a0c720e5d 100644 --- a/src/backend/InvenTree/build/test_migrations.py +++ b/src/backend/InvenTree/build/test_migrations.py @@ -19,7 +19,6 @@ class TestForwardMigrations(MigratorTestCase): name='Widget', description='Buildable Part', active=True, - level=0, lft=0, rght=0, tree_id=0, ) Build = self.old_state.apps.get_model('build', 'build') @@ -61,7 +60,6 @@ class TestReferenceMigration(MigratorTestCase): part = Part.objects.create( name='Part', description='A test part', - level=0, lft=0, rght=0, tree_id=0, ) Build = self.old_state.apps.get_model('build', 'build') diff --git a/src/backend/InvenTree/build/tests.py b/src/backend/InvenTree/build/tests.py index 4dd7ee0fee..22d38cbeb8 100644 --- a/src/backend/InvenTree/build/tests.py +++ b/src/backend/InvenTree/build/tests.py @@ -1,6 +1,7 @@ """Basic unit tests for the BuildOrder app""" from django.conf import settings +from django.core.exceptions import ValidationError from django.test import tag from django.urls import reverse @@ -9,8 +10,10 @@ from datetime import datetime, timedelta from InvenTree.unit_test import InvenTreeTestCase from .models import Build +from part.models import Part, BomItem from stock.models import StockItem +from common.settings import get_global_setting, set_global_setting from build.status_codes import BuildStatus @@ -88,6 +91,79 @@ class BuildTestSimple(InvenTreeTestCase): self.assertEqual(build.status, BuildStatus.CANCELLED) + def test_build_create(self): + """Test creation of build orders via API.""" + + n = Build.objects.count() + + # Find an assembly part + assembly = Part.objects.filter(assembly=True).first() + + assembly.active = True + assembly.locked = False + assembly.save() + + self.assertEqual(assembly.get_bom_items().count(), 0) + + # Let's create some BOM items for this assembly + for component in Part.objects.filter(assembly=False, component=True)[:15]: + + try: + BomItem.objects.create( + part=assembly, + sub_part=component, + reference='xxx', + quantity=5 + ) + except ValidationError: + pass + + # The assembly has a BOM, and is now *invalid* + self.assertGreater(assembly.get_bom_items().count(), 0) + self.assertFalse(assembly.is_bom_valid()) + + # Create a build for an assembly with an *invalid* BOM + set_global_setting('BUILDORDER_REQUIRE_VALID_BOM', False) + set_global_setting('BUILDORDER_REQUIRE_ACTIVE_PART', True) + set_global_setting('BUILDORDER_REQUIRE_LOCKED_PART', False) + + bo = Build.objects.create(part=assembly, quantity=10, reference='BO-9990') + bo.save() + + # Now, require a *valid* BOM + set_global_setting('BUILDORDER_REQUIRE_VALID_BOM', True) + + with self.assertRaises(ValidationError): + bo = Build.objects.create(part=assembly, quantity=10, reference='BO-9991') + + # Now, validate the BOM, and try again + assembly.validate_bom(None) + self.assertTrue(assembly.is_bom_valid()) + + bo = Build.objects.create(part=assembly, quantity=10, reference='BO-9992') + + # Now, try and create a build for an inactive assembly + assembly.active = False + assembly.save() + + with self.assertRaises(ValidationError): + bo = Build.objects.create(part=assembly, quantity=10, reference='BO-9993') + + set_global_setting('BUILDORDER_REQUIRE_ACTIVE_PART', False) + Build.objects.create(part=assembly, quantity=10, reference='BO-9994') + + # Check that the "locked" requirement works + set_global_setting('BUILDORDER_REQUIRE_LOCKED_PART', True) + with self.assertRaises(ValidationError): + Build.objects.create(part=assembly, quantity=10, reference='BO-9995') + + assembly.locked = True + assembly.save() + + Build.objects.create(part=assembly, quantity=10, reference='BO-9996') + + # Check that expected quantity of new builds is created + self.assertEqual(Build.objects.count(), n + 4) class TestBuildViews(InvenTreeTestCase): """Tests for Build app views.""" diff --git a/src/backend/InvenTree/common/admin.py b/src/backend/InvenTree/common/admin.py index 9dd3a05018..a0719f9ab4 100644 --- a/src/backend/InvenTree/common/admin.py +++ b/src/backend/InvenTree/common/admin.py @@ -5,6 +5,34 @@ from django.contrib import admin from import_export.admin import ImportExportModelAdmin import common.models +import common.validators + + +@admin.register(common.models.Attachment) +class AttachmentAdmin(admin.ModelAdmin): + """Admin interface for Attachment objects.""" + + 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 = common.validators.attachment_model_options() + + return super().formfield_for_dbfield(db_field, request, **kwargs) + + list_display = ( + 'model_type', + 'model_id', + 'attachment', + 'link', + 'upload_user', + 'upload_date', + ) + + list_filter = ['model_type', 'upload_user'] + + readonly_fields = ['file_size', 'upload_date', 'upload_user'] + + search_fields = ('content_type', 'comment') @admin.register(common.models.ProjectCode) @@ -16,6 +44,7 @@ class ProjectCodeAdmin(ImportExportModelAdmin): search_fields = ('code', 'description') +@admin.register(common.models.InvenTreeSetting) class SettingsAdmin(ImportExportModelAdmin): """Admin settings for InvenTreeSetting.""" @@ -28,6 +57,7 @@ class SettingsAdmin(ImportExportModelAdmin): return [] +@admin.register(common.models.InvenTreeUserSetting) class UserSettingsAdmin(ImportExportModelAdmin): """Admin settings for InvenTreeUserSetting.""" @@ -40,18 +70,21 @@ class UserSettingsAdmin(ImportExportModelAdmin): return [] +@admin.register(common.models.WebhookEndpoint) class WebhookAdmin(ImportExportModelAdmin): """Admin settings for Webhook.""" list_display = ('endpoint_id', 'name', 'active', 'user') +@admin.register(common.models.NotificationEntry) class NotificationEntryAdmin(admin.ModelAdmin): """Admin settings for NotificationEntry.""" list_display = ('key', 'uid', 'updated') +@admin.register(common.models.NotificationMessage) class NotificationMessageAdmin(admin.ModelAdmin): """Admin settings for NotificationMessage.""" @@ -70,16 +103,11 @@ class NotificationMessageAdmin(admin.ModelAdmin): search_fields = ('name', 'category', 'message') +@admin.register(common.models.NewsFeedEntry) class NewsFeedEntryAdmin(admin.ModelAdmin): """Admin settings for NewsFeedEntry.""" list_display = ('title', 'author', 'published', 'summary') -admin.site.register(common.models.InvenTreeSetting, SettingsAdmin) -admin.site.register(common.models.InvenTreeUserSetting, UserSettingsAdmin) -admin.site.register(common.models.WebhookEndpoint, WebhookAdmin) admin.site.register(common.models.WebhookMessage, ImportExportModelAdmin) -admin.site.register(common.models.NotificationEntry, NotificationEntryAdmin) -admin.site.register(common.models.NotificationMessage, NotificationMessageAdmin) -admin.site.register(common.models.NewsFeedEntry, NewsFeedEntryAdmin) diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index 6965b21ec8..bb2bd8f53d 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -4,26 +4,32 @@ import json from django.conf import settings from django.contrib.contenttypes.models import ContentType +from django.db.models import Q from django.http.response import HttpResponse 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_control from django.views.decorators.csrf import csrf_exempt import django_q.models +from django_filters import rest_framework as rest_filters from django_q.tasks import async_task from djmoney.contrib.exchange.models import ExchangeBackend, Rate from drf_spectacular.utils import OpenApiResponse, extend_schema from error_report.models import Error from rest_framework import permissions, serializers -from rest_framework.exceptions import NotAcceptable, NotFound +from rest_framework.exceptions import NotAcceptable, NotFound, PermissionDenied from rest_framework.permissions import IsAdminUser from rest_framework.response import Response from rest_framework.views import APIView import common.models import common.serializers +from common.icons import get_icon_packs from common.settings import get_global_setting from generic.states.api import AllStatusViews, StatusView +from importer.mixins import DataExportViewMixin from InvenTree.api import BulkDeleteMixin, MetadataView from InvenTree.config import CONFIG_LOOKUPS from InvenTree.filters import ORDER_FILTER, SEARCH_ORDER_FILTER @@ -491,7 +497,7 @@ class NotesImageList(ListCreateAPI): image.save() -class ProjectCodeList(ListCreateAPI): +class ProjectCodeList(DataExportViewMixin, ListCreateAPI): """List view for all project codes.""" queryset = common.models.ProjectCode.objects.all() @@ -512,7 +518,7 @@ class ProjectCodeDetail(RetrieveUpdateDestroyAPI): permission_classes = [permissions.IsAuthenticated, IsStaffOrReadOnly] -class CustomUnitList(ListCreateAPI): +class CustomUnitList(DataExportViewMixin, ListCreateAPI): """List view for custom units.""" queryset = common.models.CustomUnit.objects.all() @@ -674,6 +680,83 @@ class ContentTypeModelDetail(ContentTypeDetail): raise NotFound() +class AttachmentFilter(rest_filters.FilterSet): + """Filterset for the AttachmentList API endpoint.""" + + class Meta: + """Metaclass options.""" + + model = common.models.Attachment + fields = ['model_type', 'model_id', 'upload_user'] + + is_link = rest_filters.BooleanFilter(label=_('Is Link'), method='filter_is_link') + + def filter_is_link(self, queryset, name, value): + """Filter attachments based on whether they are a link or not.""" + if value: + return queryset.exclude(link=None).exclude(link='') + return queryset.filter(Q(link=None) | Q(link='')).distinct() + + is_file = rest_filters.BooleanFilter(label=_('Is File'), method='filter_is_file') + + def filter_is_file(self, queryset, name, value): + """Filter attachments based on whether they are a file or not.""" + if value: + return queryset.exclude(attachment=None).exclude(attachment='') + return queryset.filter(Q(attachment=None) | Q(attachment='')).distinct() + + +class AttachmentList(ListCreateAPI): + """List API endpoint for Attachment objects.""" + + queryset = common.models.Attachment.objects.all() + serializer_class = common.serializers.AttachmentSerializer + permission_classes = [permissions.IsAuthenticated] + + filter_backends = SEARCH_ORDER_FILTER + filterset_class = AttachmentFilter + + ordering_fields = ['model_id', 'model_type', 'upload_date', 'file_size'] + search_fields = ['comment', 'model_id', 'model_type'] + + def perform_create(self, serializer): + """Save the user information when a file is uploaded.""" + attachment = serializer.save() + attachment.upload_user = self.request.user + attachment.save() + + +class AttachmentDetail(RetrieveUpdateDestroyAPI): + """Detail API endpoint for Attachment objects.""" + + queryset = common.models.Attachment.objects.all() + serializer_class = common.serializers.AttachmentSerializer + permission_classes = [permissions.IsAuthenticated] + + def destroy(self, request, *args, **kwargs): + """Check user permissions before deleting an attachment.""" + attachment = self.get_object() + + if not attachment.check_permission('delete', request.user): + raise PermissionDenied( + _('User does not have permission to delete this attachment') + ) + + return super().destroy(request, *args, **kwargs) + + +@method_decorator(cache_control(public=True, max_age=86400), name='dispatch') +class IconList(ListAPI): + """List view for available icon packages.""" + + serializer_class = common.serializers.IconPackageSerializer + permission_classes = [permissions.AllowAny] + + def get_queryset(self): + """Return a list of all available icon packages.""" + return get_icon_packs().values() + + settings_api_urls = [ # User settings path( @@ -742,6 +825,25 @@ common_api_urls = [ path('', BackgroundTaskOverview.as_view(), name='api-task-overview'), ]), ), + # Attachments + path( + 'attachment/', + include([ + path( + '/', + include([ + path( + 'metadata/', + MetadataView.as_view(), + {'model': common.models.Attachment}, + name='api-attachment-metadata', + ), + path('', AttachmentDetail.as_view(), name='api-attachment-detail'), + ]), + ), + path('', AttachmentList.as_view(), name='api-attachment-list'), + ]), + ), path( 'error-report/', include([ @@ -862,13 +964,15 @@ common_api_urls = [ '/', ContentTypeDetail.as_view(), name='api-contenttype-detail' ), path( - '/', + 'model//', ContentTypeModelDetail.as_view(), name='api-contenttype-detail-modelname', ), path('', ContentTypeList.as_view(), name='api-contenttype-list'), ]), ), + # Icons + path('icons/', IconList.as_view(), name='api-icon-list'), ] admin_api_urls = [ diff --git a/src/backend/InvenTree/common/currency.py b/src/backend/InvenTree/common/currency.py index 4c0c887b5e..1769cf8c36 100644 --- a/src/backend/InvenTree/common/currency.py +++ b/src/backend/InvenTree/common/currency.py @@ -28,9 +28,7 @@ def currency_code_default(): return cached_value try: - code = get_global_setting( - 'INVENTREE_DEFAULT_CURRENCY', backup_value='', create=True, cache=True - ) + code = get_global_setting('INVENTREE_DEFAULT_CURRENCY', create=True, cache=True) except Exception: # pragma: no cover # Database may not yet be ready, no need to throw an error here code = '' @@ -61,7 +59,9 @@ def currency_codes() -> list: """Returns the current currency codes.""" from common.settings import get_global_setting - codes = get_global_setting('CURRENCY_CODES', '', create=False).strip() + codes = get_global_setting( + 'CURRENCY_CODES', create=False, enviroment_key='INVENTREE_CURRENCY_CODES' + ).strip() if not codes: codes = currency_codes_default_list() diff --git a/src/backend/InvenTree/common/forms.py b/src/backend/InvenTree/common/forms.py index b991eec06b..4800149013 100644 --- a/src/backend/InvenTree/common/forms.py +++ b/src/backend/InvenTree/common/forms.py @@ -51,6 +51,9 @@ class MatchFieldForm(forms.Form): super().__init__(*args, **kwargs) + if not file_manager: # pragma: no cover + return + # Setup FileManager file_manager.setup() # Get columns @@ -87,6 +90,9 @@ class MatchItemForm(forms.Form): super().__init__(*args, **kwargs) + if not file_manager: # pragma: no cover + return + # Setup FileManager file_manager.setup() diff --git a/src/backend/InvenTree/common/icons.py b/src/backend/InvenTree/common/icons.py new file mode 100644 index 0000000000..1ba6efe241 --- /dev/null +++ b/src/backend/InvenTree/common/icons.py @@ -0,0 +1,114 @@ +"""Icon utilities for InvenTree.""" + +import json +import logging +from dataclasses import dataclass +from pathlib import Path +from typing import TypedDict + +from django.core.exceptions import ValidationError +from django.templatetags.static import static + +logger = logging.getLogger('inventree') + +_icon_packs = None + + +class Icon(TypedDict): + """Dict type for an icon. + + Attributes: + name: The name of the icon. + category: The category of the icon. + tags: A list of tags for the icon (used for search). + variants: A dictionary of variants for the icon, where the key is the variant name and the value is the variant's unicode hex character. + """ + + name: str + category: str + tags: list[str] + variants: dict[str, str] + + +@dataclass +class IconPack: + """Dataclass for an icon pack. + + Attributes: + name: The name of the icon pack. + prefix: The prefix used for the icon pack. + fonts: A dictionary of different font file formats for the icon pack, where the key is the css format and the value a path to the font file. + icons: A dictionary of icons in the icon pack, where the key is the icon name and the value is a dictionary of the icon's variants. + """ + + name: str + prefix: str + fonts: dict[str, str] + icons: dict[str, Icon] + + +def get_icon_packs(): + """Return a dictionary of available icon packs including their icons.""" + global _icon_packs + + if _icon_packs is None: + tabler_icons_path = Path(__file__).parent.parent.joinpath( + 'InvenTree/static/tabler-icons/icons.json' + ) + with open(tabler_icons_path, 'r') as tabler_icons_file: + tabler_icons = json.load(tabler_icons_file) + + icon_packs = [ + IconPack( + name='Tabler Icons', + prefix='ti', + fonts={ + 'woff2': static('tabler-icons/tabler-icons.woff2'), + 'woff': static('tabler-icons/tabler-icons.woff'), + 'truetype': static('tabler-icons/tabler-icons.ttf'), + }, + icons=tabler_icons, + ) + ] + + from plugin import registry + + for plugin in registry.with_mixin('icon_pack', active=True): + try: + icon_packs.extend(plugin.icon_packs()) + except Exception as e: + logger.warning('Error loading icon pack from plugin %s: %s', plugin, e) + + _icon_packs = {pack.prefix: pack for pack in icon_packs} + + return _icon_packs + + +def reload_icon_packs(): + """Reload the icon packs.""" + global _icon_packs + _icon_packs = None + get_icon_packs() + + +def validate_icon(icon: str): + """Validate an icon string in the format pack:name:variant.""" + try: + pack, name, variant = icon.split(':') + except ValueError: + raise ValidationError( + f'Invalid icon format: {icon}, expected: pack:name:variant' + ) + + packs = get_icon_packs() + + if pack not in packs: + raise ValidationError(f'Invalid icon pack: {pack}') + + if name not in packs[pack].icons: + raise ValidationError(f'Invalid icon name: {name}') + + if variant not in packs[pack].icons[name]['variants']: + raise ValidationError(f'Invalid icon variant: {variant}') + + return packs[pack], packs[pack].icons[name], variant diff --git a/src/backend/InvenTree/common/migrations/0018_projectcode.py b/src/backend/InvenTree/common/migrations/0018_projectcode.py index 6ce6184ffb..544007012a 100644 --- a/src/backend/InvenTree/common/migrations/0018_projectcode.py +++ b/src/backend/InvenTree/common/migrations/0018_projectcode.py @@ -17,5 +17,8 @@ class Migration(migrations.Migration): ('code', models.CharField(help_text='Unique project code', max_length=50, unique=True, verbose_name='Project Code')), ('description', models.CharField(blank=True, help_text='Project description', max_length=200, verbose_name='Description')), ], + options={ + 'verbose_name': 'Project Code', + }, ), ] diff --git a/src/backend/InvenTree/common/migrations/0020_customunit.py b/src/backend/InvenTree/common/migrations/0020_customunit.py index 500d34c683..2c27252cf6 100644 --- a/src/backend/InvenTree/common/migrations/0020_customunit.py +++ b/src/backend/InvenTree/common/migrations/0020_customunit.py @@ -18,5 +18,8 @@ class Migration(migrations.Migration): ('symbol', models.CharField(blank=True, help_text='Optional unit symbol', max_length=10, unique=True, verbose_name='Symbol')), ('definition', models.CharField(help_text='Unit definition', max_length=50, verbose_name='Definition')), ], + options={ + 'verbose_name': 'Custom Unit', + }, ), ] diff --git a/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py b/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py index a3b964cbaa..66b78f6476 100644 --- a/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py +++ b/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py @@ -1,5 +1,6 @@ # Generated by Django 4.2.12 on 2024-06-02 13:32 +from django.conf import settings from django.db import migrations from moneyed import CURRENCIES @@ -47,16 +48,20 @@ def set_currencies(apps, schema_editor): return value = ','.join(valid_codes) - print(f"Found existing currency codes:", value) + + if not settings.TESTING: + print(f"Found existing currency codes:", value) setting = InvenTreeSetting.objects.filter(key=key).first() if setting: - print(f"- Updating existing setting for currency codes") + if not settings.TESTING: + print(f"- Updating existing setting for currency codes") setting.value = value setting.save() else: - print(f"- Creating new setting for currency codes") + if not settings.TESTING: + print(f"- Creating new setting for currency codes") setting = InvenTreeSetting(key=key, value=value) setting.save() diff --git a/src/backend/InvenTree/common/migrations/0025_attachment.py b/src/backend/InvenTree/common/migrations/0025_attachment.py new file mode 100644 index 0000000000..63f9ec69a6 --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0025_attachment.py @@ -0,0 +1,43 @@ +# Generated by Django 4.2.12 on 2024-06-08 12:37 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import taggit.managers + +import common.models +import common.validators +import InvenTree.fields +import InvenTree.models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0002_remove_content_type_name'), + ('common', '0024_notesimage_model_id_notesimage_model_type'), + ] + + operations = [ + migrations.CreateModel( + name='Attachment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('model_id', models.PositiveIntegerField()), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=common.models.rename_attachment, verbose_name='Attachment')), + ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), + ('comment', models.CharField(blank=True, help_text='Attachment comment', max_length=250, verbose_name='Comment')), + ('upload_date', models.DateField(auto_now_add=True, help_text='Date the file was uploaded', null=True, verbose_name='Upload date')), + ('file_size', models.PositiveIntegerField(default=0, help_text='File size in bytes', verbose_name='File size')), + ('model_type', models.CharField(help_text='Target model type for this image', max_length=100, validators=[common.validators.validate_attachment_model_type])), + ('upload_user', models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User')), + ('metadata', models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata')), + ('tags', taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags')) + ], + bases=(InvenTree.models.PluginValidationMixin, models.Model), + options={ + 'verbose_name': 'Attachment', + } + ), + ] diff --git a/src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py b/src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py new file mode 100644 index 0000000000..09e12e90dd --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py @@ -0,0 +1,122 @@ +# Generated by Django 4.2.12 on 2024-06-08 12:38 + +from django.db import migrations +from django.core.files.storage import default_storage + + +def get_legacy_models(): + """Return a set of legacy attachment models.""" + + # Legacy attachment types to convert: + # app_label, table name, target model, model ref + return [ + ('build', 'BuildOrderAttachment', 'build', 'build'), + ('company', 'CompanyAttachment', 'company', 'company'), + ('company', 'ManufacturerPartAttachment', 'manufacturerpart', 'manufacturer_part'), + ('order', 'PurchaseOrderAttachment', 'purchaseorder', 'order'), + ('order', 'SalesOrderAttachment', 'salesorder', 'order'), + ('order', 'ReturnOrderAttachment', 'returnorder', 'order'), + ('part', 'PartAttachment', 'part', 'part'), + ('stock', 'StockItemAttachment', 'stockitem', 'stock_item') + ] + + +def update_attachments(apps, schema_editor): + """Migrate any existing attachment models to the new attachment table.""" + + Attachment = apps.get_model('common', 'attachment') + + N = 0 + + for app, model, target_model, model_ref in get_legacy_models(): + LegacyAttachmentModel = apps.get_model(app, model) + + if LegacyAttachmentModel.objects.count() == 0: + continue + + to_create = [] + + for attachment in LegacyAttachmentModel.objects.all(): + + # Find the size of the file (if exists) + if attachment.attachment and default_storage.exists(attachment.attachment.name): + try: + file_size = default_storage.size(attachment.attachment.name) + except NotImplementedError: + file_size = 0 + else: + file_size = 0 + + to_create.append( + Attachment( + model_type=target_model, + model_id=getattr(attachment, model_ref).pk, + attachment=attachment.attachment, + link=attachment.link, + comment=attachment.comment, + upload_date=attachment.upload_date, + upload_user=attachment.user, + file_size=file_size + ) + ) + + if len(to_create) > 0: + print(f"Migrating {len(to_create)} attachments for the legacy '{model}' model.") + Attachment.objects.bulk_create(to_create) + + N += len(to_create) + + # Check the correct number of Attachment objects has been created + assert(N == Attachment.objects.count()) + + +def reverse_attachments(apps, schema_editor): + """Reverse data migration, and map new Attachment model back to legacy models.""" + + Attachment = apps.get_model('common', 'attachment') + + N = 0 + + for app, model, target_model, model_ref in get_legacy_models(): + LegacyAttachmentModel = apps.get_model(app, model) + + to_create = [] + + for attachment in Attachment.objects.filter(model_type=target_model): + + TargetModel = apps.get_model(app, target_model) + + data = { + 'attachment': attachment.attachment, + 'link': attachment.link, + 'comment': attachment.comment, + 'upload_date': attachment.upload_date, + 'user': attachment.upload_user, + model_ref: TargetModel.objects.get(pk=attachment.model_id) + } + + to_create.append(LegacyAttachmentModel(**data)) + + if len(to_create) > 0: + print(f"Reversing {len(to_create)} attachments for the legacy '{model}' model.") + LegacyAttachmentModel.objects.bulk_create(to_create) + + N += len(to_create) + + # Check the correct number of LegacyAttachmentModel objects has been created + assert(N == Attachment.objects.count()) + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0050_auto_20240508_0138'), + ('common', '0025_attachment'), + ('company', '0069_company_active'), + ('order', '0099_alter_salesorder_status'), + ('part', '0123_parttesttemplate_choices'), + ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') + ] + + operations = [ + migrations.RunPython(update_attachments, reverse_code=reverse_attachments), + ] diff --git a/src/backend/InvenTree/common/migrations/0027_alter_customunit_symbol.py b/src/backend/InvenTree/common/migrations/0027_alter_customunit_symbol.py new file mode 100644 index 0000000000..a897773201 --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0027_alter_customunit_symbol.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.12 on 2024-07-04 10:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0026_auto_20240608_1238'), + ] + + operations = [ + migrations.AlterField( + model_name='customunit', + name='symbol', + field=models.CharField(blank=True, help_text='Optional unit symbol', max_length=10, verbose_name='Symbol'), + ), + ] diff --git a/src/backend/InvenTree/common/migrations/0028_colortheme_user_obj.py b/src/backend/InvenTree/common/migrations/0028_colortheme_user_obj.py new file mode 100644 index 0000000000..5e2ea45c01 --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0028_colortheme_user_obj.py @@ -0,0 +1,39 @@ +# Generated by Django 4.2.12 on 2024-07-04 10:23 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +def migrate_userthemes(apps, schema_editor): + """Mgrate text-based user references to ForeignKey references.""" + ColorTheme = apps.get_model("common", "ColorTheme") + User = apps.get_model(settings.AUTH_USER_MODEL) + + for theme in ColorTheme.objects.all(): + try: + theme.user_obj = User.objects.get(username=theme.user) + theme.save() + except User.DoesNotExist: + pass + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("common", "0027_alter_customunit_symbol"), + ] + + operations = [ + migrations.AddField( + model_name="colortheme", + name="user_obj", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.RunPython(migrate_userthemes, migrations.RunPython.noop), + ] diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index b4edd79cb1..9b34a4c37b 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -9,9 +9,11 @@ import hmac import json import logging import os +import sys import uuid from datetime import timedelta, timezone from enum import Enum +from io import BytesIO from secrets import compare_digest from typing import Any, Callable, TypedDict, Union @@ -23,6 +25,7 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.humanize.templatetags.humanize import naturaltime from django.core.cache import cache from django.core.exceptions import ValidationError +from django.core.files.storage import default_storage from django.core.validators import MaxValueValidator, MinValueValidator, URLValidator from django.db import models, transaction from django.db.models.signals import post_delete, post_save @@ -35,6 +38,7 @@ from django.utils.translation import gettext_lazy as _ from djmoney.contrib.exchange.exceptions import MissingRate from djmoney.contrib.exchange.models import convert_money from rest_framework.exceptions import PermissionDenied +from taggit.managers import TaggableManager import build.validators import common.currency @@ -46,12 +50,25 @@ import InvenTree.ready import InvenTree.tasks import InvenTree.validators import order.validators +import plugin.base.barcodes.helper import report.helpers import users.models +from InvenTree.sanitizer import sanitize_svg from plugin import registry logger = logging.getLogger('inventree') +if sys.version_info >= (3, 11): + from typing import NotRequired +else: + + class NotRequired: # pragma: no cover + """NotRequired type helper is only supported with Python 3.11+.""" + + def __class_getitem__(cls, item): + """Return the item.""" + return item + class MetaMixin(models.Model): """A base class for InvenTree models to include shared meta fields. @@ -112,6 +129,11 @@ class BaseURLValidator(URLValidator): class ProjectCode(InvenTree.models.InvenTreeMetadataModel): """A ProjectCode is a unique identifier for a project.""" + class Meta: + """Class options for the ProjectCode model.""" + + verbose_name = _('Project Code') + @staticmethod def get_api_url(): """Return the API URL for this model.""" @@ -549,25 +571,25 @@ class BaseInvenTreeSetting(models.Model): """ key = str(key).strip().upper() - filters = { - 'key__iexact': key, - # Optionally filter by other keys - **cls.get_filters(**kwargs), - } - # Unless otherwise specified, attempt to create the setting create = kwargs.pop('create', True) # Specify if cache lookup should be performed do_cache = kwargs.pop('cache', django_settings.GLOBAL_CACHE_ENABLED) - # Prevent saving to the database during data import - if InvenTree.ready.isImportingData(): - create = False - do_cache = False + filters = { + 'key__iexact': key, + # Optionally filter by other keys + **cls.get_filters(**kwargs), + } - # Prevent saving to the database during migrations - if InvenTree.ready.isRunningMigrations(): + # Prevent saving to the database during certain operations + if ( + InvenTree.ready.isImportingData() + or InvenTree.ready.isRunningMigrations() + or InvenTree.ready.isRebuildingData() + or InvenTree.ready.isRunningBackup() + ): create = False do_cache = False @@ -594,33 +616,21 @@ class BaseInvenTreeSetting(models.Model): setting = None # Setting does not exist! (Try to create it) - if not setting: - # Prevent creation of new settings objects when importing data - if ( - InvenTree.ready.isImportingData() - or not InvenTree.ready.canAppAccessDatabase( - allow_test=True, allow_shell=True - ) - ): - create = False + if not setting and create: + # Attempt to create a new settings object + default_value = cls.get_setting_default(key, **kwargs) + setting = cls(key=key, value=default_value, **kwargs) - if create: - # Attempt to create a new settings object - - default_value = cls.get_setting_default(key, **kwargs) - - setting = cls(key=key, value=default_value, **kwargs) - - try: - # Wrap this statement in "atomic", so it can be rolled back if it fails - with transaction.atomic(): - setting.save(**kwargs) - except (IntegrityError, OperationalError, ProgrammingError): - # It might be the case that the database isn't created yet - pass - except ValidationError: - # The setting failed validation - might be due to duplicate keys - pass + try: + # Wrap this statement in "atomic", so it can be rolled back if it fails + with transaction.atomic(): + setting.save(**kwargs) + except (IntegrityError, OperationalError, ProgrammingError): + # It might be the case that the database isn't created yet + pass + except ValidationError: + # The setting failed validation - might be due to duplicate keys + pass if setting and do_cache: # Cache this setting object @@ -694,6 +704,15 @@ class BaseInvenTreeSetting(models.Model): if change_user is not None and not change_user.is_staff: return + # Do not write to the database under certain conditions + if ( + InvenTree.ready.isImportingData() + or InvenTree.ready.isRunningMigrations() + or InvenTree.ready.isRebuildingData() + or InvenTree.ready.isRunningBackup() + ): + return + attempts = int(kwargs.get('attempts', 3)) filters = { @@ -1161,7 +1180,7 @@ class InvenTreeSettingsKeyType(SettingsKeyType): requires_restart: If True, a server restart is required after changing the setting """ - requires_restart: bool + requires_restart: NotRequired[bool] class InvenTreeSetting(BaseInvenTreeSetting): @@ -1390,12 +1409,30 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': True, 'validator': bool, }, + 'BARCODE_SHOW_TEXT': { + 'name': _('Barcode Show Data'), + 'description': _('Display barcode data in browser as text'), + 'default': False, + 'validator': bool, + }, + 'BARCODE_GENERATION_PLUGIN': { + 'name': _('Barcode Generation Plugin'), + 'description': _('Plugin to use for internal barcode data generation'), + 'choices': plugin.base.barcodes.helper.barcode_plugins, + 'default': 'inventreebarcode', + }, 'PART_ENABLE_REVISION': { 'name': _('Part Revisions'), 'description': _('Enable revision field for Part'), 'validator': bool, 'default': True, }, + 'PART_REVISION_ASSEMBLY_ONLY': { + 'name': _('Assembly Revision Only'), + 'description': _('Only allow revisions for assembly parts'), + 'validator': bool, + 'default': False, + }, 'PART_ALLOW_DELETE_FROM_ASSEMBLY': { 'name': _('Allow Deletion from Assembly'), 'description': _('Allow deletion of parts which are used in an assembly'), @@ -1521,6 +1558,7 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'name': _('Part Category Default Icon'), 'description': _('Part category default icon (empty means no icon)'), 'default': '', + 'validator': common.validators.validate_icon, }, 'PART_PARAMETER_ENFORCE_UNITS': { 'name': _('Enforce Parameter Units'), @@ -1742,6 +1780,7 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'name': _('Stock Location Default Icon'), 'description': _('Stock location default icon (empty means no icon)'), 'default': '', + 'validator': common.validators.validate_icon, }, 'STOCK_SHOW_INSTALLED_ITEMS': { 'name': _('Show Installed Stock Items'), @@ -1779,6 +1818,34 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': False, 'validator': bool, }, + 'BUILDORDER_REQUIRE_ACTIVE_PART': { + 'name': _('Require Active Part'), + 'description': _('Prevent build order creation for inactive parts'), + 'default': False, + 'validator': bool, + }, + 'BUILDORDER_REQUIRE_LOCKED_PART': { + 'name': _('Require Locked Part'), + 'description': _('Prevent build order creation for unlocked parts'), + 'default': False, + 'validator': bool, + }, + 'BUILDORDER_REQUIRE_VALID_BOM': { + 'name': _('Require Valid BOM'), + 'description': _( + 'Prevent build order creation unless BOM has been validated' + ), + 'default': False, + 'validator': bool, + }, + 'BUILDORDER_REQUIRE_CLOSED_CHILDS': { + 'name': _('Require Closed Child Orders'), + 'description': _( + 'Prevent build order completion until all child orders are closed' + ), + 'default': False, + 'validator': bool, + }, 'PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS': { 'name': _('Block Until Tests Pass'), 'description': _( @@ -1908,6 +1975,38 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': False, 'validator': bool, }, + 'LOGIN_ENABLE_SSO_GROUP_SYNC': { + 'name': _('Enable SSO group sync'), + 'description': _( + 'Enable synchronizing InvenTree groups with groups provided by the IdP' + ), + 'default': False, + 'validator': bool, + }, + 'SSO_GROUP_KEY': { + 'name': _('SSO group key'), + 'description': _( + 'The name of the groups claim attribute provided by the IdP' + ), + 'default': 'groups', + 'validator': str, + }, + 'SSO_GROUP_MAP': { + 'name': _('SSO group map'), + 'description': _( + 'A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created.' + ), + 'validator': json.loads, + 'default': '{}', + }, + 'SSO_REMOVE_GROUPS': { + 'name': _('Remove groups outside of SSO'), + 'description': _( + 'Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues' + ), + 'default': True, + 'validator': bool, + }, 'LOGIN_MAIL_REQUIRED': { 'name': _('Email required'), 'description': _('Require user to supply mail on signup'), @@ -1944,7 +2043,9 @@ class InvenTreeSetting(BaseInvenTreeSetting): }, 'SIGNUP_GROUP': { 'name': _('Group on signup'), - 'description': _('Group to which new users are assigned on registration'), + 'description': _( + 'Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP.' + ), 'default': '', 'choices': settings_group_options, }, @@ -2425,36 +2526,6 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): 'validator': [int, MinValueValidator(0)], 'default': 100, }, - 'DEFAULT_PART_LABEL_TEMPLATE': { - 'name': _('Default part label template'), - 'description': _('The part label template to be automatically selected'), - 'validator': [int], - 'default': '', - }, - 'DEFAULT_ITEM_LABEL_TEMPLATE': { - 'name': _('Default stock item template'), - 'description': _( - 'The stock item label template to be automatically selected' - ), - 'validator': [int], - 'default': '', - }, - 'DEFAULT_LOCATION_LABEL_TEMPLATE': { - 'name': _('Default stock location label template'), - 'description': _( - 'The stock location label template to be automatically selected' - ), - 'validator': [int], - 'default': '', - }, - 'DEFAULT_LINE_LABEL_TEMPLATE': { - 'name': _('Default build line label template'), - 'description': _( - 'The build line label template to be automatically selected' - ), - 'validator': [int], - 'default': '', - }, 'NOTIFICATION_ERROR_REPORT': { 'name': _('Receive error reports'), 'description': _('Receive notifications for system errors'), @@ -2542,18 +2613,27 @@ class ColorTheme(models.Model): name = models.CharField(max_length=20, default='', blank=True) user = models.CharField(max_length=150, unique=True) + user_obj = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True) @classmethod def get_color_themes_choices(cls): """Get all color themes from static folder.""" - if not django_settings.STATIC_COLOR_THEMES_DIR.exists(): - logger.error('Theme directory does not exist') + color_theme_dir = ( + django_settings.STATIC_COLOR_THEMES_DIR + if django_settings.STATIC_COLOR_THEMES_DIR.exists() + else django_settings.BASE_DIR.joinpath( + 'InvenTree', 'static', 'css', 'color-themes' + ) + ) + + if not color_theme_dir.exists(): + logger.error(f'Theme directory "{color_theme_dir}" does not exist') return [] # Get files list from css/color-themes/ folder files_list = [] - for file in django_settings.STATIC_COLOR_THEMES_DIR.iterdir(): + for file in color_theme_dir.iterdir(): files_list.append([file.stem, file.suffix]) # Get color themes choices (CSS sheets) @@ -2992,6 +3072,11 @@ class CustomUnit(models.Model): https://pint.readthedocs.io/en/stable/advanced/defining.html """ + class Meta: + """Class meta options.""" + + verbose_name = _('Custom Unit') + def fmt_string(self): """Construct a unit definition string e.g. 'dog_year = 52 * day = dy'.""" fmt = f'{self.name} = {self.definition}' @@ -3001,6 +3086,18 @@ class CustomUnit(models.Model): return fmt + def validate_unique(self, exclude=None) -> None: + """Ensure that the custom unit is unique.""" + super().validate_unique(exclude) + + if self.symbol: + if ( + CustomUnit.objects.filter(symbol=self.symbol) + .exclude(pk=self.pk) + .exists() + ): + raise ValidationError({'symbol': _('Unit symbol must be unique')}) + def clean(self): """Validate that the provided custom unit is indeed valid.""" super().clean() @@ -3042,7 +3139,6 @@ class CustomUnit(models.Model): max_length=10, verbose_name=_('Symbol'), help_text=_('Optional unit symbol'), - unique=True, blank=True, ) @@ -3062,3 +3158,184 @@ def after_custom_unit_updated(sender, instance, **kwargs): from InvenTree.conversion import reload_unit_registry reload_unit_registry() + + +def rename_attachment(instance, filename): + """Callback function to rename an uploaded attachment file. + + Arguments: + - instance: The Attachment instance + - filename: The original filename of the uploaded file + + Returns: + - The new filename for the uploaded file, e.g. 'attachments///' + """ + # Remove any illegal characters from the filename + illegal_chars = '\'"\\`~#|!@#$%^&*()[]{}<>?;:+=,' + + for c in illegal_chars: + filename = filename.replace(c, '') + + filename = os.path.basename(filename) + + # Generate a new filename for the attachment + return os.path.join( + 'attachments', str(instance.model_type), str(instance.model_id), filename + ) + + +class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): + """Class which represents an uploaded file attachment. + + An attachment can be either an uploaded file, or an external URL. + + Attributes: + attachment: The uploaded file + url: An external URL + comment: A comment or description for the attachment + user: The user who uploaded the attachment + upload_date: The date the attachment was uploaded + file_size: The size of the uploaded file + metadata: Arbitrary metadata for the attachment (inherit from MetadataMixin) + tags: Tags for the attachment + """ + + class Meta: + """Metaclass options.""" + + verbose_name = _('Attachment') + + def save(self, *args, **kwargs): + """Custom 'save' method for the Attachment model. + + - Record the file size of the uploaded attachment (if applicable) + - Ensure that the 'content_type' and 'object_id' fields are set + - Run extra validations + """ + # Either 'attachment' or 'link' must be specified! + if not self.attachment and not self.link: + raise ValidationError({ + 'attachment': _('Missing file'), + 'link': _('Missing external link'), + }) + + if self.attachment: + if self.attachment.name.lower().endswith('.svg'): + self.attachment.file.file = self.clean_svg(self.attachment) + else: + self.file_size = 0 + + super().save(*args, **kwargs) + + # Update file size + if self.file_size == 0 and self.attachment: + # Get file size + if default_storage.exists(self.attachment.name): + try: + self.file_size = default_storage.size(self.attachment.name) + except Exception: + pass + + if self.file_size != 0: + super().save() + + def clean_svg(self, field): + """Sanitize SVG file before saving.""" + cleaned = sanitize_svg(field.file.read()) + return BytesIO(bytes(cleaned, 'utf8')) + + def __str__(self): + """Human name for attachment.""" + if self.attachment is not None: + return os.path.basename(self.attachment.name) + return str(self.link) + + model_type = models.CharField( + max_length=100, + validators=[common.validators.validate_attachment_model_type], + help_text=_('Target model type for this image'), + ) + + model_id = models.PositiveIntegerField() + + attachment = models.FileField( + upload_to=rename_attachment, + verbose_name=_('Attachment'), + help_text=_('Select file to attach'), + blank=True, + null=True, + ) + + link = InvenTree.fields.InvenTreeURLField( + blank=True, + null=True, + verbose_name=_('Link'), + help_text=_('Link to external URL'), + ) + + comment = models.CharField( + blank=True, + max_length=250, + verbose_name=_('Comment'), + help_text=_('Attachment comment'), + ) + + upload_user = models.ForeignKey( + User, + on_delete=models.SET_NULL, + blank=True, + null=True, + verbose_name=_('User'), + help_text=_('User'), + ) + + upload_date = models.DateField( + auto_now_add=True, + null=True, + blank=True, + verbose_name=_('Upload date'), + help_text=_('Date the file was uploaded'), + ) + + file_size = models.PositiveIntegerField( + default=0, verbose_name=_('File size'), help_text=_('File size in bytes') + ) + + tags = TaggableManager(blank=True) + + @property + def basename(self): + """Base name/path for attachment.""" + if self.attachment: + return os.path.basename(self.attachment.name) + return None + + def fully_qualified_url(self): + """Return a 'fully qualified' URL for this attachment. + + - If the attachment is a link to an external resource, return the link + - If the attachment is an uploaded file, return the fully qualified media URL + """ + if self.link: + return self.link + + if self.attachment: + import InvenTree.helpers_model + + media_url = InvenTree.helpers.getMediaUrl(self.attachment.url) + return InvenTree.helpers_model.construct_absolute_url(media_url) + + return '' + + def check_permission(self, permission, user): + """Check if the user has the required permission for this attachment.""" + from InvenTree.models import InvenTreeAttachmentMixin + + model_class = common.validators.attachment_model_class_from_label( + self.model_type + ) + + if not issubclass(model_class, InvenTreeAttachmentMixin): + raise ValidationError(_('Invalid model type specified for attachment')) + + return model_class.check_attachment_permission(permission, user) diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index c3539a7a61..8b2e55c014 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -9,13 +9,20 @@ import django_q.models from error_report.models import Error from flags.state import flag_state from rest_framework import serializers +from rest_framework.exceptions import PermissionDenied +from taggit.serializers import TagListSerializerField import common.models as common_models +import common.validators +from importer.mixins import DataImportExportSerializerMixin +from importer.registry import register_importer from InvenTree.helpers import get_objectreference from InvenTree.helpers_model import construct_absolute_url from InvenTree.serializers import ( + InvenTreeAttachmentSerializerField, InvenTreeImageSerializerField, InvenTreeModelSerializer, + UserSerializer, ) from plugin import registry as plugin_registry from users.serializers import OwnerSerializer @@ -288,7 +295,8 @@ class NotesImageSerializer(InvenTreeModelSerializer): image = InvenTreeImageSerializerField(required=True) -class ProjectCodeSerializer(InvenTreeModelSerializer): +@register_importer() +class ProjectCodeSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): """Serializer for the ProjectCode model.""" class Meta: @@ -336,7 +344,8 @@ class ContentTypeSerializer(serializers.Serializer): return obj.app_label in plugin_registry.installed_apps -class CustomUnitSerializer(InvenTreeModelSerializer): +@register_importer() +class CustomUnitSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): """DRF serializer for CustomUnit model.""" class Meta: @@ -474,3 +483,103 @@ class FailedTaskSerializer(InvenTreeModelSerializer): pk = serializers.CharField(source='id', read_only=True) result = serializers.CharField() + + +class AttachmentSerializer(InvenTreeModelSerializer): + """Serializer class for the Attachment model.""" + + class Meta: + """Serializer metaclass.""" + + model = common_models.Attachment + fields = [ + 'pk', + 'attachment', + 'filename', + 'link', + 'comment', + 'upload_date', + 'upload_user', + 'user_detail', + 'file_size', + 'model_type', + 'model_id', + 'tags', + ] + + read_only_fields = ['pk', 'file_size', 'upload_date', 'upload_user', 'filename'] + + def __init__(self, *args, **kwargs): + """Override the model_type field to provide dynamic choices.""" + super().__init__(*args, **kwargs) + + if len(self.fields['model_type'].choices) == 0: + self.fields[ + 'model_type' + ].choices = common.validators.attachment_model_options() + + tags = TagListSerializerField(required=False) + + user_detail = UserSerializer(source='upload_user', read_only=True, many=False) + + attachment = InvenTreeAttachmentSerializerField(required=False, allow_null=True) + + # The 'filename' field must be present in the serializer + filename = serializers.CharField( + label=_('Filename'), required=False, source='basename', allow_blank=False + ) + + upload_date = serializers.DateField(read_only=True) + + # Note: The choices are overridden at run-time on class initialization + model_type = serializers.ChoiceField( + label=_('Model Type'), + choices=common.validators.attachment_model_options(), + required=True, + allow_blank=False, + allow_null=False, + ) + + def save(self): + """Override the save method to handle the model_type field.""" + from InvenTree.models import InvenTreeAttachmentMixin + + model_type = self.validated_data.get('model_type', None) + + # Ensure that the user has permission to attach files to the specified model + user = self.context.get('request').user + + target_model_class = common.validators.attachment_model_class_from_label( + model_type + ) + + if not issubclass(target_model_class, InvenTreeAttachmentMixin): + raise PermissionDenied(_('Invalid model type specified for attachment')) + + # Check that the user has the required permissions to attach files to the target model + if not target_model_class.check_attachment_permission('change', user): + raise PermissionDenied( + _( + 'User does not have permission to create or edit attachments for this model' + ) + ) + + return super().save() + + +class IconSerializer(serializers.Serializer): + """Serializer for an icon.""" + + name = serializers.CharField() + category = serializers.CharField() + tags = serializers.ListField(child=serializers.CharField()) + variants = serializers.DictField(child=serializers.CharField()) + + +class IconPackageSerializer(serializers.Serializer): + """Serializer for a list of icons.""" + + name = serializers.CharField() + prefix = serializers.CharField() + fonts = serializers.DictField(child=serializers.CharField()) + icons = serializers.DictField(child=IconSerializer()) diff --git a/src/backend/InvenTree/common/settings.py b/src/backend/InvenTree/common/settings.py index d27ddfa2f4..08b8b6be38 100644 --- a/src/backend/InvenTree/common/settings.py +++ b/src/backend/InvenTree/common/settings.py @@ -1,11 +1,19 @@ """User-configurable settings for the common app.""" +from os import environ -def get_global_setting(key, backup_value=None, **kwargs): + +def get_global_setting(key, backup_value=None, enviroment_key=None, **kwargs): """Return the value of a global setting using the provided key.""" from common.models import InvenTreeSetting - kwargs['backup_value'] = backup_value + if enviroment_key: + value = environ.get(enviroment_key) + if value: + return value + + if backup_value is not None: + kwargs['backup_value'] = backup_value return InvenTreeSetting.get_setting(key, **kwargs) @@ -25,7 +33,9 @@ def get_user_setting(key, user, backup_value=None, **kwargs): from common.models import InvenTreeUserSetting kwargs['user'] = user - kwargs['backup_value'] = backup_value + + if backup_value is not None: + kwargs['backup_value'] = backup_value return InvenTreeUserSetting.get_setting(key, **kwargs) diff --git a/src/backend/InvenTree/common/test_migrations.py b/src/backend/InvenTree/common/test_migrations.py new file mode 100644 index 0000000000..71d9449ed6 --- /dev/null +++ b/src/backend/InvenTree/common/test_migrations.py @@ -0,0 +1,210 @@ +"""Data migration unit tests for the 'common' app.""" + +import io + +from django.core.files.base import ContentFile + +from django_test_migrations.contrib.unittest_case import MigratorTestCase + +from InvenTree import unit_test + + +def get_legacy_models(): + """Return a set of legacy attachment models.""" + # Legacy attachment types to convert: + # app_label, table name, target model, model ref + return [ + ('build', 'BuildOrderAttachment', 'build', 'build'), + ('company', 'CompanyAttachment', 'company', 'company'), + ( + 'company', + 'ManufacturerPartAttachment', + 'manufacturerpart', + 'manufacturer_part', + ), + ('order', 'PurchaseOrderAttachment', 'purchaseorder', 'order'), + ('order', 'SalesOrderAttachment', 'salesorder', 'order'), + ('order', 'ReturnOrderAttachment', 'returnorder', 'order'), + ('part', 'PartAttachment', 'part', 'part'), + ('stock', 'StockItemAttachment', 'stockitem', 'stock_item'), + ] + + +def generate_attachment(): + """Generate a file attachment object for test upload.""" + file_object = io.StringIO('Some dummy data') + file_object.seek(0) + + return ContentFile(file_object.getvalue(), 'test.txt') + + +class TestForwardMigrations(MigratorTestCase): + """Test entire schema migration sequence for the common app.""" + + migrate_from = ('common', '0024_notesimage_model_id_notesimage_model_type') + migrate_to = ('common', unit_test.getNewestMigrationFile('common')) + + def prepare(self): + """Create initial data. + + Legacy attachment model types are: + - BuildOrderAttachment + - CompanyAttachment + - ManufacturerPartAttachment + - PurchaseOrderAttachment + - SalesOrderAttachment + - ReturnOrderAttachment + - PartAttachment + - StockItemAttachment + """ + # Dummy MPPT data + tree = {'tree_id': 0, 'level': 0, 'lft': 0, 'rght': 0} + + # BuildOrderAttachment + Part = self.old_state.apps.get_model('part', 'Part') + Build = self.old_state.apps.get_model('build', 'Build') + + part = Part.objects.create( + name='Test Part', + description='Test Part Description', + active=True, + assembly=True, + purchaseable=True, + **tree, + ) + + build = Build.objects.create(part=part, title='Test Build', quantity=10, **tree) + + PartAttachment = self.old_state.apps.get_model('part', 'PartAttachment') + PartAttachment.objects.create( + part=part, attachment=generate_attachment(), comment='Test file attachment' + ) + PartAttachment.objects.create( + part=part, link='http://example.com', comment='Test link attachment' + ) + self.assertEqual(PartAttachment.objects.count(), 2) + + BuildOrderAttachment = self.old_state.apps.get_model( + 'build', 'BuildOrderAttachment' + ) + BuildOrderAttachment.objects.create( + build=build, link='http://example.com', comment='Test comment' + ) + BuildOrderAttachment.objects.create( + build=build, attachment=generate_attachment(), comment='a test file' + ) + self.assertEqual(BuildOrderAttachment.objects.count(), 2) + + StockItem = self.old_state.apps.get_model('stock', 'StockItem') + StockItemAttachment = self.old_state.apps.get_model( + 'stock', 'StockItemAttachment' + ) + + item = StockItem.objects.create(part=part, quantity=10, **tree) + + StockItemAttachment.objects.create( + stock_item=item, + attachment=generate_attachment(), + comment='Test file attachment', + ) + StockItemAttachment.objects.create( + stock_item=item, link='http://example.com', comment='Test link attachment' + ) + self.assertEqual(StockItemAttachment.objects.count(), 2) + + Company = self.old_state.apps.get_model('company', 'Company') + CompanyAttachment = self.old_state.apps.get_model( + 'company', 'CompanyAttachment' + ) + + company = Company.objects.create( + name='Test Company', + description='Test Company Description', + is_customer=True, + is_manufacturer=True, + is_supplier=True, + ) + + CompanyAttachment.objects.create( + company=company, + attachment=generate_attachment(), + comment='Test file attachment', + ) + CompanyAttachment.objects.create( + company=company, link='http://example.com', comment='Test link attachment' + ) + self.assertEqual(CompanyAttachment.objects.count(), 2) + + PurchaseOrder = self.old_state.apps.get_model('order', 'PurchaseOrder') + PurchaseOrderAttachment = self.old_state.apps.get_model( + 'order', 'PurchaseOrderAttachment' + ) + + po = PurchaseOrder.objects.create( + reference='PO-12345', + supplier=company, + description='Test Purchase Order Description', + ) + + PurchaseOrderAttachment.objects.create( + order=po, attachment=generate_attachment(), comment='Test file attachment' + ) + PurchaseOrderAttachment.objects.create( + order=po, link='http://example.com', comment='Test link attachment' + ) + self.assertEqual(PurchaseOrderAttachment.objects.count(), 2) + + SalesOrder = self.old_state.apps.get_model('order', 'SalesOrder') + SalesOrderAttachment = self.old_state.apps.get_model( + 'order', 'SalesOrderAttachment' + ) + + so = SalesOrder.objects.create( + reference='SO-12345', + customer=company, + description='Test Sales Order Description', + ) + + SalesOrderAttachment.objects.create( + order=so, attachment=generate_attachment(), comment='Test file attachment' + ) + SalesOrderAttachment.objects.create( + order=so, link='http://example.com', comment='Test link attachment' + ) + self.assertEqual(SalesOrderAttachment.objects.count(), 2) + + ReturnOrder = self.old_state.apps.get_model('order', 'ReturnOrder') + ReturnOrderAttachment = self.old_state.apps.get_model( + 'order', 'ReturnOrderAttachment' + ) + + ro = ReturnOrder.objects.create( + reference='RO-12345', + customer=company, + description='Test Return Order Description', + ) + + ReturnOrderAttachment.objects.create( + order=ro, attachment=generate_attachment(), comment='Test file attachment' + ) + ReturnOrderAttachment.objects.create( + order=ro, link='http://example.com', comment='Test link attachment' + ) + self.assertEqual(ReturnOrderAttachment.objects.count(), 2) + + def test_items_exist(self): + """Test to ensure that the attachments are correctly migrated.""" + Attachment = self.new_state.apps.get_model('common', 'Attachment') + + self.assertEqual(Attachment.objects.count(), 14) + + for model in [ + 'build', + 'company', + 'purchaseorder', + 'returnorder', + 'salesorder', + 'part', + 'stockitem', + ]: + self.assertEqual(Attachment.objects.filter(model_type=model).count(), 2) diff --git a/src/backend/InvenTree/common/test_views.py b/src/backend/InvenTree/common/test_views.py deleted file mode 100644 index 0e43770f02..0000000000 --- a/src/backend/InvenTree/common/test_views.py +++ /dev/null @@ -1 +0,0 @@ -"""Unit tests for the views associated with the 'common' app.""" diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index fda28be67e..c0d46bd9c2 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -11,6 +11,8 @@ from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.core.cache import cache from django.core.exceptions import ValidationError +from django.core.files.base import ContentFile +from django.core.files.storage import default_storage from django.core.files.uploadedfile import SimpleUploadedFile from django.test import Client, TestCase from django.test.utils import override_settings @@ -18,14 +20,17 @@ from django.urls import reverse import PIL +import common.validators from common.settings import get_global_setting, set_global_setting from InvenTree.helpers import str2bool from InvenTree.unit_test import InvenTreeAPITestCase, InvenTreeTestCase, PluginMixin +from part.models import Part from plugin import registry from plugin.models import NotificationUserSetting from .api import WebhookView from .models import ( + Attachment, ColorTheme, CustomUnit, InvenTreeSetting, @@ -41,6 +46,131 @@ from .models import ( CONTENT_TYPE_JSON = 'application/json' +class AttachmentTest(InvenTreeAPITestCase): + """Unit tests for the 'Attachment' model.""" + + fixtures = ['part', 'category', 'location'] + + def generate_file(self, fn: str): + """Generate an attachment file object.""" + file_object = io.StringIO('Some dummy data') + file_object.seek(0) + + return ContentFile(file_object.getvalue(), fn) + + def test_filename_validation(self): + """Test that the filename validation works as expected. + + The django file-upload mechanism should sanitize filenames correctly. + """ + part = Part.objects.first() + + filenames = { + 'test.txt': 'test.txt', + 'r####at.mp4': 'rat.mp4', + '../../../win32.dll': 'win32.dll', + 'ABC!@#$%^&&&&&&&)-XYZ-(**&&&\\/QqQ.sqlite': 'QqQ.sqlite', + '/var/log/inventree.log': 'inventree.log', + 'c:\\Users\\admin\\passwd.txt': 'cUsersadminpasswd.txt', + '8&&&8.txt': '88.txt', + } + + for fn, expected in filenames.items(): + attachment = Attachment.objects.create( + attachment=self.generate_file(fn), + comment=f'Testing filename: {fn}', + model_type='part', + model_id=part.pk, + ) + + expected_path = f'attachments/part/{part.pk}/{expected}' + self.assertEqual(attachment.attachment.name, expected_path) + self.assertEqual(attachment.file_size, 15) + + self.assertEqual(part.attachments.count(), len(filenames.keys())) + + # Delete any attachments after the test is completed + for attachment in part.attachments.all(): + path = attachment.attachment.name + attachment.delete() + + # Remove uploaded files to prevent them sticking around + if default_storage.exists(path): + default_storage.delete(path) + + self.assertEqual( + Attachment.objects.filter(model_type='part', model_id=part.pk).count(), 0 + ) + + def test_mixin(self): + """Test that the mixin class works as expected.""" + part = Part.objects.first() + + self.assertEqual(part.attachments.count(), 0) + + part.create_attachment( + attachment=self.generate_file('test.txt'), comment='Hello world' + ) + + self.assertEqual(part.attachments.count(), 1) + + attachment = part.attachments.first() + + self.assertEqual(attachment.comment, 'Hello world') + self.assertIn(f'attachments/part/{part.pk}/test', attachment.attachment.name) + + def test_upload_via_api(self): + """Test that we can upload attachments via the API.""" + part = Part.objects.first() + url = reverse('api-attachment-list') + + data = { + 'model_type': 'part', + 'model_id': part.pk, + 'link': 'https://www.google.com', + 'comment': 'Some appropriate comment', + } + + # Start without appropriate permissions + # User must have 'part.change' to upload an attachment against a Part instance + self.logout() + self.user.is_staff = False + self.user.is_superuser = False + self.user.save() + self.clearRoles() + + # Check without login (401) + response = self.post(url, data, expected_code=401) + + self.login() + + response = self.post(url, data, expected_code=403) + + self.assertIn( + 'User does not have permission to create or edit attachments for this model', + str(response.data['detail']), + ) + + # Add the required permission + self.assignRole('part.change') + + # Upload should now work! + response = self.post(url, data, expected_code=201) + + # Try to delete the attachment via API (should fail) + attachment = part.attachments.first() + url = reverse('api-attachment-detail', kwargs={'pk': attachment.pk}) + response = self.delete(url, expected_code=403) + self.assertIn( + 'User does not have permission to delete this attachment', + str(response.data['detail']), + ) + + # Assign 'delete' permission to 'part' model + self.assignRole('part.delete') + response = self.delete(url, expected_code=204) + + class SettingsTest(InvenTreeTestCase): """Tests for the 'settings' model.""" @@ -277,8 +407,6 @@ class SettingsTest(InvenTreeTestCase): @override_settings(SITE_URL=None, PLUGIN_TESTING=True, PLUGIN_TESTING_SETUP=True) def test_defaults(self): """Populate the settings with default values.""" - N = len(InvenTreeSetting.SETTINGS.keys()) - for key in InvenTreeSetting.SETTINGS.keys(): value = InvenTreeSetting.get_setting_default(key) @@ -973,7 +1101,6 @@ class CommonTest(InvenTreeAPITestCase): def test_restart_flag(self): """Test that the restart flag is reset on start.""" - import common.models from plugin import registry # set flag true @@ -1070,20 +1197,10 @@ class ColorThemeTest(TestCase): def test_choices(self): """Test that default choices are returned.""" result = ColorTheme.get_color_themes_choices() - - # skip due to directories not being set up - if not result: - return # pragma: no cover self.assertIn(('default', 'Default'), result) def test_valid_choice(self): """Check that is_valid_choice works correctly.""" - result = ColorTheme.get_color_themes_choices() - - # skip due to directories not being set up - if not result: - return # pragma: no cover - # check wrong reference self.assertFalse(ColorTheme.is_valid_choice('abcdd')) @@ -1247,7 +1364,7 @@ class ProjectCodesTest(InvenTreeAPITestCase): ) self.assertIn( - 'project code with this Project Code already exists', + 'Project Code with this Project Code already exists', str(response.data['code']), ) @@ -1405,3 +1522,44 @@ class ContentTypeAPITest(InvenTreeAPITestCase): reverse('api-contenttype-detail-modelname', kwargs={'model': None}), expected_code=404, ) + + +class IconAPITest(InvenTreeAPITestCase): + """Unit tests for the Icons API.""" + + def test_list(self): + """Test API list functionality.""" + response = self.get(reverse('api-icon-list'), expected_code=200) + self.assertEqual(len(response.data), 1) + + self.assertEqual(response.data[0]['prefix'], 'ti') + self.assertEqual(response.data[0]['name'], 'Tabler Icons') + for font_format in ['woff2', 'woff', 'truetype']: + self.assertIn(font_format, response.data[0]['fonts']) + + self.assertGreater(len(response.data[0]['icons']), 1000) + + +class ValidatorsTest(TestCase): + """Unit tests for the custom validators.""" + + def test_validate_icon(self): + """Test the validate_icon function.""" + common.validators.validate_icon('') + common.validators.validate_icon(None) + + with self.assertRaises(ValidationError): + common.validators.validate_icon('invalid') + + with self.assertRaises(ValidationError): + common.validators.validate_icon('my:package:non-existing') + + with self.assertRaises(ValidationError): + common.validators.validate_icon( + 'ti:my-non-existing-icon:non-existing-variant' + ) + + with self.assertRaises(ValidationError): + common.validators.validate_icon('ti:package:non-existing-variant') + + common.validators.validate_icon('ti:package:outline') diff --git a/src/backend/InvenTree/common/validators.py b/src/backend/InvenTree/common/validators.py index d97983f5a3..efb82e692e 100644 --- a/src/backend/InvenTree/common/validators.py +++ b/src/backend/InvenTree/common/validators.py @@ -1,13 +1,53 @@ """Validation helpers for common models.""" import re +from typing import Union from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ +import common.icons from common.settings import get_global_setting +def attachment_model_types(): + """Return a list of valid attachment model choices.""" + import InvenTree.models + + return list( + InvenTree.helpers_model.getModelsWithMixin( + InvenTree.models.InvenTreeAttachmentMixin + ) + ) + + +def attachment_model_options(): + """Return a list of options for models which support attachments.""" + return [ + (model.__name__.lower(), model._meta.verbose_name) + for model in attachment_model_types() + ] + + +def attachment_model_class_from_label(label: str): + """Return the model class for the given label.""" + if not label: + raise ValidationError(_('No attachment model type provided')) + + for model in attachment_model_types(): + if model.__name__.lower() == label.lower(): + return model + + raise ValidationError(_('Invalid attachment model type') + f": '{label}'") + + +def validate_attachment_model_type(value): + """Ensure that the provided attachment model is valid.""" + model_names = [el[0] for el in attachment_model_options()] + if value not in model_names: + raise ValidationError('Model type does not support attachments') + + def validate_notes_model_type(value): """Ensure that the provided model type is valid. @@ -65,3 +105,11 @@ def validate_email_domains(setting): 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 validate_icon(name: Union[str, None]): + """Validate the provided icon name, and ignore if empty.""" + if name == '' or name is None: + return + + common.icons.validate_icon(name) diff --git a/src/backend/InvenTree/company/admin.py b/src/backend/InvenTree/company/admin.py index 7caf7f3b16..ae33a409ba 100644 --- a/src/backend/InvenTree/company/admin.py +++ b/src/backend/InvenTree/company/admin.py @@ -6,6 +6,8 @@ from import_export import widgets from import_export.admin import ImportExportModelAdmin from import_export.fields import Field +import company.serializers +import importer.admin from InvenTree.admin import InvenTreeResource from part.models import Part @@ -14,7 +16,6 @@ from .models import ( Company, Contact, ManufacturerPart, - ManufacturerPartAttachment, ManufacturerPartParameter, SupplierPart, SupplierPriceBreak, @@ -34,9 +35,10 @@ class CompanyResource(InvenTreeResource): @admin.register(Company) -class CompanyAdmin(ImportExportModelAdmin): +class CompanyAdmin(importer.admin.DataExportAdmin, ImportExportModelAdmin): """Admin class for the Company model.""" + serializer_class = company.serializers.CompanySerializer resource_class = CompanyResource list_display = ('name', 'website', 'contact') @@ -120,15 +122,6 @@ class ManufacturerPartAdmin(ImportExportModelAdmin): autocomplete_fields = ('part', 'manufacturer') -@admin.register(ManufacturerPartAttachment) -class ManufacturerPartAttachmentAdmin(ImportExportModelAdmin): - """Admin class for ManufacturerPartAttachment model.""" - - list_display = ('manufacturer_part', 'attachment', 'comment') - - autocomplete_fields = ('manufacturer_part',) - - class ManufacturerPartParameterResource(InvenTreeResource): """Class for managing ManufacturerPartParameter data import/export.""" diff --git a/src/backend/InvenTree/company/api.py b/src/backend/InvenTree/company/api.py index aea8d5dc5e..b0b9fcfe98 100644 --- a/src/backend/InvenTree/company/api.py +++ b/src/backend/InvenTree/company/api.py @@ -7,32 +7,25 @@ from django.utils.translation import gettext_lazy as _ from django_filters import rest_framework as rest_filters import part.models -from InvenTree.api import AttachmentMixin, ListCreateDestroyAPIView, MetadataView -from InvenTree.filters import ( - ORDER_FILTER, - SEARCH_ORDER_FILTER, - SEARCH_ORDER_FILTER_ALIAS, -) +from importer.mixins import DataExportViewMixin +from InvenTree.api import ListCreateDestroyAPIView, MetadataView +from InvenTree.filters import SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS from InvenTree.helpers import str2bool from InvenTree.mixins import ListCreateAPI, RetrieveUpdateDestroyAPI from .models import ( Address, Company, - CompanyAttachment, Contact, ManufacturerPart, - ManufacturerPartAttachment, ManufacturerPartParameter, SupplierPart, SupplierPriceBreak, ) from .serializers import ( AddressSerializer, - CompanyAttachmentSerializer, CompanySerializer, ContactSerializer, - ManufacturerPartAttachmentSerializer, ManufacturerPartParameterSerializer, ManufacturerPartSerializer, SupplierPartSerializer, @@ -40,7 +33,7 @@ from .serializers import ( ) -class CompanyList(ListCreateAPI): +class CompanyList(DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of Company objects. Provides two methods: @@ -88,23 +81,7 @@ class CompanyDetail(RetrieveUpdateDestroyAPI): return queryset -class CompanyAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): - """API endpoint for listing, creating and bulk deleting a CompanyAttachment.""" - - queryset = CompanyAttachment.objects.all() - serializer_class = CompanyAttachmentSerializer - - filterset_fields = ['company'] - - -class CompanyAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): - """Detail endpoint for CompanyAttachment model.""" - - queryset = CompanyAttachment.objects.all() - serializer_class = CompanyAttachmentSerializer - - -class ContactList(ListCreateDestroyAPIView): +class ContactList(DataExportViewMixin, ListCreateDestroyAPIView): """API endpoint for list view of Company model.""" queryset = Contact.objects.all() @@ -128,7 +105,7 @@ class ContactDetail(RetrieveUpdateDestroyAPI): serializer_class = ContactSerializer -class AddressList(ListCreateDestroyAPIView): +class AddressList(DataExportViewMixin, ListCreateDestroyAPIView): """API endpoint for list view of Address model.""" queryset = Address.objects.all() @@ -169,7 +146,7 @@ class ManufacturerPartFilter(rest_filters.FilterSet): ) -class ManufacturerPartList(ListCreateDestroyAPIView): +class ManufacturerPartList(DataExportViewMixin, ListCreateDestroyAPIView): """API endpoint for list view of ManufacturerPart object. - GET: Return list of ManufacturerPart objects @@ -227,22 +204,6 @@ class ManufacturerPartDetail(RetrieveUpdateDestroyAPI): serializer_class = ManufacturerPartSerializer -class ManufacturerPartAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): - """API endpoint for listing, creating and bulk deleting a ManufacturerPartAttachment (file upload).""" - - queryset = ManufacturerPartAttachment.objects.all() - serializer_class = ManufacturerPartAttachmentSerializer - - filterset_fields = ['manufacturer_part'] - - -class ManufacturerPartAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): - """Detail endpooint for ManufacturerPartAttachment model.""" - - queryset = ManufacturerPartAttachment.objects.all() - serializer_class = ManufacturerPartAttachmentSerializer - - class ManufacturerPartParameterFilter(rest_filters.FilterSet): """Custom filterset for the ManufacturerPartParameterList API endpoint.""" @@ -333,7 +294,7 @@ class SupplierPartFilter(rest_filters.FilterSet): ) -class SupplierPartList(ListCreateDestroyAPIView): +class SupplierPartList(DataExportViewMixin, ListCreateDestroyAPIView): """API endpoint for list view of SupplierPart object. - GET: Return list of SupplierPart objects @@ -509,22 +470,6 @@ class SupplierPriceBreakDetail(RetrieveUpdateDestroyAPI): manufacturer_part_api_urls = [ - # Base URL for ManufacturerPartAttachment API endpoints - path( - 'attachment/', - include([ - path( - '/', - ManufacturerPartAttachmentDetail.as_view(), - name='api-manufacturer-part-attachment-detail', - ), - path( - '', - ManufacturerPartAttachmentList.as_view(), - name='api-manufacturer-part-attachment-list', - ), - ]), - ), path( 'parameter/', include([ @@ -611,19 +556,6 @@ company_api_urls = [ path('', CompanyDetail.as_view(), name='api-company-detail'), ]), ), - path( - 'attachment/', - include([ - path( - '/', - CompanyAttachmentDetail.as_view(), - name='api-company-attachment-detail', - ), - path( - '', CompanyAttachmentList.as_view(), name='api-company-attachment-list' - ), - ]), - ), path( 'contact/', include([ diff --git a/src/backend/InvenTree/company/migrations/0001_initial.py b/src/backend/InvenTree/company/migrations/0001_initial.py index c2de9ed453..6c6f31f938 100644 --- a/src/backend/InvenTree/company/migrations/0001_initial.py +++ b/src/backend/InvenTree/company/migrations/0001_initial.py @@ -31,6 +31,9 @@ class Migration(migrations.Migration): ('is_customer', models.BooleanField(default=False, help_text='Do you sell items to this company?')), ('is_supplier', models.BooleanField(default=True, help_text='Do you purchase items from this company?')), ], + options={ + 'verbose_name': 'Company', + } ), migrations.CreateModel( name='Contact', @@ -41,6 +44,9 @@ class Migration(migrations.Migration): ('email', models.EmailField(blank=True, max_length=254)), ('role', models.CharField(blank=True, max_length=100)), ], + options={ + 'verbose_name': 'Contact', + } ), migrations.CreateModel( name='SupplierPart', @@ -60,6 +66,7 @@ class Migration(migrations.Migration): ], options={ 'db_table': 'part_supplierpart', + 'verbose_name': 'Supplier Part', }, ), migrations.CreateModel( @@ -71,6 +78,7 @@ class Migration(migrations.Migration): ('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pricebreaks', to='company.SupplierPart')), ], options={ + 'verbose_name': 'Supplier Price Break', 'db_table': 'part_supplierpricebreak', }, ), diff --git a/src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py b/src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py index 22097e8e2b..d184108c9f 100644 --- a/src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py +++ b/src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py @@ -12,6 +12,6 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='company', - options={'ordering': ['name']}, + options={'ordering': ['name'], 'verbose_name': 'Company'}, ), ] diff --git a/src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py b/src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py index d9c83d75ed..8b5f6fb89f 100644 --- a/src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py +++ b/src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py @@ -23,17 +23,17 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='company', name='is_customer', - field=models.BooleanField(default=False, help_text='Do you sell items to this company?', verbose_name='is customer'), + field=models.BooleanField(default=False, help_text='Do you sell items to this company?', verbose_name='Is customer'), ), migrations.AlterField( model_name='company', name='is_manufacturer', - field=models.BooleanField(default=False, help_text='Does this company manufacture parts?', verbose_name='is manufacturer'), + field=models.BooleanField(default=False, help_text='Does this company manufacture parts?', verbose_name='Is manufacturer'), ), migrations.AlterField( model_name='company', name='is_supplier', - field=models.BooleanField(default=True, help_text='Do you purchase items from this company?', verbose_name='is supplier'), + field=models.BooleanField(default=True, help_text='Do you purchase items from this company?', verbose_name='Is supplier'), ), migrations.AlterField( model_name='company', diff --git a/src/backend/InvenTree/company/migrations/0034_manufacturerpart.py b/src/backend/InvenTree/company/migrations/0034_manufacturerpart.py index 2e8a8bf82f..f50919d59f 100644 --- a/src/backend/InvenTree/company/migrations/0034_manufacturerpart.py +++ b/src/backend/InvenTree/company/migrations/0034_manufacturerpart.py @@ -22,6 +22,7 @@ class Migration(migrations.Migration): ], options={ 'unique_together': {('part', 'manufacturer', 'MPN')}, + 'verbose_name': 'Manufacturer Part', }, ), ] diff --git a/src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py b/src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py index dccfa715e8..dd833ccfa3 100644 --- a/src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py +++ b/src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py @@ -21,6 +21,7 @@ class Migration(migrations.Migration): ('manufacturer_part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='parameters', to='company.manufacturerpart', verbose_name='Manufacturer Part')), ], options={ + 'verbose_name': 'Manufacturer Part Parameter', 'unique_together': {('manufacturer_part', 'name')}, }, ), diff --git a/src/backend/InvenTree/company/migrations/0041_alter_company_options.py b/src/backend/InvenTree/company/migrations/0041_alter_company_options.py index 40849eed1d..e6b1bed978 100644 --- a/src/backend/InvenTree/company/migrations/0041_alter_company_options.py +++ b/src/backend/InvenTree/company/migrations/0041_alter_company_options.py @@ -12,6 +12,6 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='company', - options={'ordering': ['name'], 'verbose_name_plural': 'Companies'}, + options={'ordering': ['name'], 'verbose_name': 'Company', 'verbose_name_plural': 'Companies'}, ), ] diff --git a/src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py b/src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py index fe526992b0..a0152385eb 100644 --- a/src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py +++ b/src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py @@ -19,7 +19,7 @@ class Migration(migrations.Migration): name='ManufacturerPartAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment')), ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), diff --git a/src/backend/InvenTree/company/migrations/0054_companyattachment.py b/src/backend/InvenTree/company/migrations/0054_companyattachment.py index 44a415fce3..4996976ac1 100644 --- a/src/backend/InvenTree/company/migrations/0054_companyattachment.py +++ b/src/backend/InvenTree/company/migrations/0054_companyattachment.py @@ -19,7 +19,7 @@ class Migration(migrations.Migration): name='CompanyAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment')), ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), diff --git a/src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py b/src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py index 19ce798301..f5160f3255 100644 --- a/src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py +++ b/src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py @@ -12,7 +12,10 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='address', - options={'verbose_name_plural': 'Addresses'}, + options={ + 'verbose_name': 'Address', + 'verbose_name_plural': 'Addresses' + }, ), migrations.AlterField( model_name='address', diff --git a/src/backend/InvenTree/company/migrations/0070_remove_manufacturerpartattachment_manufacturer_part_and_more.py b/src/backend/InvenTree/company/migrations/0070_remove_manufacturerpartattachment_manufacturer_part_and_more.py new file mode 100644 index 0000000000..d0bec93f7d --- /dev/null +++ b/src/backend/InvenTree/company/migrations/0070_remove_manufacturerpartattachment_manufacturer_part_and_more.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.12 on 2024-06-09 09:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0050_auto_20240508_0138'), + ('common', '0026_auto_20240608_1238'), + ('company', '0069_company_active'), + ('order', '0099_alter_salesorder_status'), + ('part', '0123_parttesttemplate_choices'), + ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') + ] + + operations = [ + migrations.DeleteModel( + name='CompanyAttachment', + ), + migrations.DeleteModel( + name='ManufacturerPartAttachment', + ), + ] diff --git a/src/backend/InvenTree/company/migrations/0071_manufacturerpart_notes_supplierpart_notes.py b/src/backend/InvenTree/company/migrations/0071_manufacturerpart_notes_supplierpart_notes.py new file mode 100644 index 0000000000..b7d6c8caf7 --- /dev/null +++ b/src/backend/InvenTree/company/migrations/0071_manufacturerpart_notes_supplierpart_notes.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.11 on 2024-07-16 12:58 + +import InvenTree.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0070_remove_manufacturerpartattachment_manufacturer_part_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='manufacturerpart', + name='notes', + field=InvenTree.fields.InvenTreeNotesField(blank=True, help_text='Markdown notes (optional)', max_length=50000, null=True, verbose_name='Notes'), + ), + migrations.AddField( + model_name='supplierpart', + name='notes', + field=InvenTree.fields.InvenTreeNotesField(blank=True, help_text='Markdown notes (optional)', max_length=50000, null=True, verbose_name='Notes'), + ), + ] diff --git a/src/backend/InvenTree/company/models.py b/src/backend/InvenTree/company/models.py index 30b2dc5789..9e1c878c57 100644 --- a/src/backend/InvenTree/company/models.py +++ b/src/backend/InvenTree/company/models.py @@ -60,7 +60,9 @@ def rename_company_image(instance, filename): class Company( - InvenTree.models.InvenTreeNotesMixin, InvenTree.models.InvenTreeMetadataModel + InvenTree.models.InvenTreeAttachmentMixin, + InvenTree.models.InvenTreeNotesMixin, + InvenTree.models.InvenTreeMetadataModel, ): """A Company object represents an external company. @@ -95,7 +97,8 @@ class Company( constraints = [ UniqueConstraint(fields=['name', 'email'], name='unique_name_email_pair') ] - verbose_name_plural = 'Companies' + verbose_name = _('Company') + verbose_name_plural = _('Companies') @staticmethod def get_api_url(): @@ -162,19 +165,19 @@ class Company( is_customer = models.BooleanField( default=False, - verbose_name=_('is customer'), + verbose_name=_('Is customer'), help_text=_('Do you sell items to this company?'), ) is_supplier = models.BooleanField( default=True, - verbose_name=_('is supplier'), + verbose_name=_('Is supplier'), help_text=_('Do you purchase items from this company?'), ) is_manufacturer = models.BooleanField( default=False, - verbose_name=_('is manufacturer'), + verbose_name=_('Is manufacturer'), help_text=_('Does this company manufacture parts?'), ) @@ -255,26 +258,6 @@ class Company( ).distinct() -class CompanyAttachment(InvenTree.models.InvenTreeAttachment): - """Model for storing file or URL attachments against a Company object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with this model.""" - return reverse('api-company-attachment-list') - - def getSubdir(self): - """Return the subdirectory where these attachments are uploaded.""" - return os.path.join('company_files', str(self.company.pk)) - - company = models.ForeignKey( - Company, - on_delete=models.CASCADE, - verbose_name=_('Company'), - related_name='attachments', - ) - - class Contact(InvenTree.models.InvenTreeMetadataModel): """A Contact represents a person who works at a particular company. A Company may have zero or more associated Contact objects. @@ -286,6 +269,11 @@ class Contact(InvenTree.models.InvenTreeMetadataModel): role: position in company """ + class Meta: + """Metaclass defines extra model options.""" + + verbose_name = _('Contact') + @staticmethod def get_api_url(): """Return the API URL associated with the Contcat model.""" @@ -323,7 +311,8 @@ class Address(InvenTree.models.InvenTreeModel): class Meta: """Metaclass defines extra model options.""" - verbose_name_plural = 'Addresses' + verbose_name = _('Address') + verbose_name_plural = _('Addresses') def __init__(self, *args, **kwargs): """Custom init function.""" @@ -460,7 +449,10 @@ class Address(InvenTree.models.InvenTreeModel): class ManufacturerPart( - InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeMetadataModel + InvenTree.models.InvenTreeAttachmentMixin, + InvenTree.models.InvenTreeBarcodeMixin, + InvenTree.models.InvenTreeNotesMixin, + InvenTree.models.InvenTreeMetadataModel, ): """Represents a unique part as provided by a Manufacturer Each ManufacturerPart is identified by a MPN (Manufacturer Part Number) Each ManufacturerPart is also linked to a Part object. A Part may be available from multiple manufacturers. @@ -475,6 +467,7 @@ class ManufacturerPart( class Meta: """Metaclass defines extra model options.""" + verbose_name = _('Manufacturer Part') unique_together = ('part', 'manufacturer', 'MPN') @staticmethod @@ -482,6 +475,11 @@ class ManufacturerPart( """Return the API URL associated with the ManufacturerPart instance.""" return reverse('api-manufacturer-part-list') + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'MP' + part = models.ForeignKey( 'part.Part', on_delete=models.CASCADE, @@ -563,26 +561,6 @@ class ManufacturerPart( return s -class ManufacturerPartAttachment(InvenTree.models.InvenTreeAttachment): - """Model for storing file attachments against a ManufacturerPart object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the ManufacturerPartAttachment model.""" - return reverse('api-manufacturer-part-attachment-list') - - def getSubdir(self): - """Return the subdirectory where attachment files for the ManufacturerPart model are located.""" - return os.path.join('manufacturer_part_files', str(self.manufacturer_part.id)) - - manufacturer_part = models.ForeignKey( - ManufacturerPart, - on_delete=models.CASCADE, - verbose_name=_('Manufacturer Part'), - related_name='attachments', - ) - - class ManufacturerPartParameter(InvenTree.models.InvenTreeModel): """A ManufacturerPartParameter represents a key:value parameter for a MnaufacturerPart. @@ -594,6 +572,7 @@ class ManufacturerPartParameter(InvenTree.models.InvenTreeModel): class Meta: """Metaclass defines extra model options.""" + verbose_name = _('Manufacturer Part Parameter') unique_together = ('manufacturer_part', 'name') @staticmethod @@ -651,6 +630,7 @@ class SupplierPartManager(models.Manager): class SupplierPart( InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeBarcodeMixin, + InvenTree.models.InvenTreeNotesMixin, common.models.MetaMixin, InvenTree.models.InvenTreeModel, ): @@ -679,6 +659,8 @@ class SupplierPart( unique_together = ('part', 'supplier', 'SKU') + verbose_name = _('Supplier Part') + # This model was moved from the 'Part' app db_table = 'part_supplierpart' @@ -701,6 +683,11 @@ class SupplierPart( """Return custom API filters for this particular instance.""" return {'manufacturer_part': {'part': self.part.pk}} + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'SP' + def clean(self): """Custom clean action for the SupplierPart model. @@ -1037,6 +1024,7 @@ class SupplierPriceBreak(common.models.PriceBreak): class Meta: """Metaclass defines extra model options.""" + verbose_name = _('Supplier Price Break') unique_together = ('part', 'quantity') # This model was moved from the 'Part' app diff --git a/src/backend/InvenTree/company/serializers.py b/src/backend/InvenTree/company/serializers.py index c0425c68db..5123b3f1e8 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -10,8 +10,10 @@ from sql_util.utils import SubqueryCount from taggit.serializers import TagListSerializerField import part.filters +import part.serializers as part_serializers +from importer.mixins import DataImportExportSerializerMixin +from importer.registry import register_importer from InvenTree.serializers import ( - InvenTreeAttachmentSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeImageSerializerField, @@ -21,15 +23,12 @@ from InvenTree.serializers import ( NotesFieldMixin, RemoteImageMixin, ) -from part.serializers import PartBriefSerializer from .models import ( Address, Company, - CompanyAttachment, Contact, ManufacturerPart, - ManufacturerPartAttachment, ManufacturerPartParameter, SupplierPart, SupplierPriceBreak, @@ -59,7 +58,8 @@ class CompanyBriefSerializer(InvenTreeModelSerializer): thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True) -class AddressSerializer(InvenTreeModelSerializer): +@register_importer() +class AddressSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): """Serializer for the Address Model.""" class Meta: @@ -103,9 +103,19 @@ class AddressBriefSerializer(InvenTreeModelSerializer): ] -class CompanySerializer(NotesFieldMixin, RemoteImageMixin, InvenTreeModelSerializer): +@register_importer() +class CompanySerializer( + DataImportExportSerializerMixin, + NotesFieldMixin, + RemoteImageMixin, + InvenTreeModelSerializer, +): """Serializer for Company object (full detail).""" + export_exclude_fields = ['url', 'primary_address'] + + import_exclude_fields = ['image'] + class Meta: """Metaclass options.""" @@ -186,28 +196,25 @@ class CompanySerializer(NotesFieldMixin, RemoteImageMixin, InvenTreeModelSeriali return self.instance -class CompanyAttachmentSerializer(InvenTreeAttachmentSerializer): - """Serializer for the CompanyAttachment class.""" - - class Meta: - """Metaclass defines serializer options.""" - - model = CompanyAttachment - - fields = InvenTreeAttachmentSerializer.attachment_fields(['company']) - - -class ContactSerializer(InvenTreeModelSerializer): +@register_importer() +class ContactSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): """Serializer class for the Contact model.""" class Meta: """Metaclass options.""" model = Contact - fields = ['pk', 'company', 'name', 'phone', 'email', 'role'] + fields = ['pk', 'company', 'company_name', 'name', 'phone', 'email', 'role'] + + company_name = serializers.CharField( + label=_('Company Name'), source='company.name', read_only=True + ) -class ManufacturerPartSerializer(InvenTreeTagModelSerializer): +@register_importer() +class ManufacturerPartSerializer( + DataImportExportSerializerMixin, InvenTreeTagModelSerializer, NotesFieldMixin +): """Serializer for ManufacturerPart object.""" class Meta: @@ -225,6 +232,7 @@ class ManufacturerPartSerializer(InvenTreeTagModelSerializer): 'MPN', 'link', 'barcode_hash', + 'notes', 'tags', ] @@ -239,15 +247,17 @@ class ManufacturerPartSerializer(InvenTreeTagModelSerializer): super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) if manufacturer_detail is not True: - self.fields.pop('manufacturer_detail') + self.fields.pop('manufacturer_detail', None) if prettify is not True: - self.fields.pop('pretty_name') + self.fields.pop('pretty_name', None) - part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + part_detail = part_serializers.PartBriefSerializer( + source='part', many=False, read_only=True + ) manufacturer_detail = CompanyBriefSerializer( source='manufacturer', many=False, read_only=True @@ -260,18 +270,10 @@ class ManufacturerPartSerializer(InvenTreeTagModelSerializer): ) -class ManufacturerPartAttachmentSerializer(InvenTreeAttachmentSerializer): - """Serializer for the ManufacturerPartAttachment class.""" - - class Meta: - """Metaclass options.""" - - model = ManufacturerPartAttachment - - fields = InvenTreeAttachmentSerializer.attachment_fields(['manufacturer_part']) - - -class ManufacturerPartParameterSerializer(InvenTreeModelSerializer): +@register_importer() +class ManufacturerPartParameterSerializer( + DataImportExportSerializerMixin, InvenTreeModelSerializer +): """Serializer for the ManufacturerPartParameter model.""" class Meta: @@ -295,14 +297,17 @@ class ManufacturerPartParameterSerializer(InvenTreeModelSerializer): super().__init__(*args, **kwargs) if not man_detail: - self.fields.pop('manufacturer_part_detail') + self.fields.pop('manufacturer_part_detail', None) manufacturer_part_detail = ManufacturerPartSerializer( source='manufacturer_part', many=False, read_only=True ) -class SupplierPartSerializer(InvenTreeTagModelSerializer): +@register_importer() +class SupplierPartSerializer( + DataImportExportSerializerMixin, InvenTreeTagModelSerializer, NotesFieldMixin +): """Serializer for SupplierPart object.""" class Meta: @@ -336,6 +341,7 @@ class SupplierPartSerializer(InvenTreeTagModelSerializer): 'supplier_detail', 'url', 'updated', + 'notes', 'tags', ] @@ -366,17 +372,22 @@ class SupplierPartSerializer(InvenTreeTagModelSerializer): super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) if supplier_detail is not True: - self.fields.pop('supplier_detail') + self.fields.pop('supplier_detail', None) if manufacturer_detail is not True: - self.fields.pop('manufacturer_detail') - self.fields.pop('manufacturer_part_detail') + self.fields.pop('manufacturer_detail', None) + self.fields.pop('manufacturer_part_detail', None) - if prettify is not True: - self.fields.pop('pretty_name') + if brief or prettify is not True: + self.fields.pop('pretty_name', None) + + if brief: + self.fields.pop('tags') + self.fields.pop('available') + self.fields.pop('availability_updated') # Annotated field showing total in-stock quantity in_stock = serializers.FloatField(read_only=True, label=_('In Stock')) @@ -385,7 +396,9 @@ class SupplierPartSerializer(InvenTreeTagModelSerializer): pack_quantity_native = serializers.FloatField(read_only=True) - part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + part_detail = part_serializers.PartBriefSerializer( + source='part', many=False, read_only=True + ) supplier_detail = CompanyBriefSerializer( source='supplier', many=False, read_only=True @@ -460,7 +473,10 @@ class SupplierPartSerializer(InvenTreeTagModelSerializer): return supplier_part -class SupplierPriceBreakSerializer(InvenTreeModelSerializer): +@register_importer() +class SupplierPriceBreakSerializer( + DataImportExportSerializerMixin, InvenTreeModelSerializer +): """Serializer for SupplierPriceBreak object.""" class Meta: @@ -487,10 +503,10 @@ class SupplierPriceBreakSerializer(InvenTreeModelSerializer): super().__init__(*args, **kwargs) if not supplier_detail: - self.fields.pop('supplier_detail') + self.fields.pop('supplier_detail', None) if not part_detail: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) quantity = InvenTreeDecimalField() diff --git a/src/backend/InvenTree/company/templates/company/detail.html b/src/backend/InvenTree/company/templates/company/detail.html index afc6a813ea..d9fbf521e7 100644 --- a/src/backend/InvenTree/company/templates/company/detail.html +++ b/src/backend/InvenTree/company/templates/company/detail.html @@ -244,17 +244,7 @@ {{ block.super }} onPanelLoad("attachments", function() { - loadAttachmentTable('{% url "api-company-attachment-list" %}', { - filters: { - company: {{ company.pk }}, - }, - fields: { - company: { - value: {{ company.pk }}, - hidden: true - } - } - }); + loadAttachmentTable('company', {{ company.pk }}); }); // Callback function when the 'contacts' panel is loaded diff --git a/src/backend/InvenTree/company/templates/company/manufacturer_part.html b/src/backend/InvenTree/company/templates/company/manufacturer_part.html index 08e6f38568..7d07fe282e 100644 --- a/src/backend/InvenTree/company/templates/company/manufacturer_part.html +++ b/src/backend/InvenTree/company/templates/company/manufacturer_part.html @@ -171,23 +171,42 @@ src="{% static 'img/blank_image.png' %}"
    +
    +
    +
    +

    {% trans "Manufacturer Part Notes" %}

    + {% include "spacer.html" %} +
    + {% include "notes_buttons.html" %} +
    +
    +
    +
    + +
    +
    + {% endblock page_content %} {% block js_ready %} {{ block.super }} -onPanelLoad("attachments", function() { - loadAttachmentTable('{% url "api-manufacturer-part-attachment-list" %}', { - filters: { - manufacturer_part: {{ part.pk }}, - }, - fields: { - manufacturer_part: { - value: {{ part.pk }}, - hidden: true - } +// Load the "notes" tab +onPanelLoad('manufacturer-part-notes', function() { + + setupNotesField( + 'manufacturer-part-notes', + '{% url "api-manufacturer-part-detail" part.pk %}', + { + model_type: "manufacturerpart", + model_id: {{ part.pk }}, + editable: {% js_bool roles.purchase_order.change %}, } - }); + ); +}); + +onPanelLoad("attachments", function() { + loadAttachmentTable('manufacturerpart', {{ part.pk }}); }); $('#parameter-create').click(function() { diff --git a/src/backend/InvenTree/company/templates/company/manufacturer_part_sidebar.html b/src/backend/InvenTree/company/templates/company/manufacturer_part_sidebar.html index 64f8f950b0..fb538cb290 100644 --- a/src/backend/InvenTree/company/templates/company/manufacturer_part_sidebar.html +++ b/src/backend/InvenTree/company/templates/company/manufacturer_part_sidebar.html @@ -8,3 +8,5 @@ {% include "sidebar_item.html" with label='supplier-parts' text=text icon="fa-building" %} {% trans "Attachments" as text %} {% include "sidebar_item.html" with label='attachments' text=text icon="fa-paperclip" %} +{% trans "Notes" as text %} +{% include "sidebar_item.html" with label="manufacturer-part-notes" text=text icon="fa-clipboard" %} diff --git a/src/backend/InvenTree/company/templates/company/supplier_part.html b/src/backend/InvenTree/company/templates/company/supplier_part.html index 2949926cb7..b723f1ef8b 100644 --- a/src/backend/InvenTree/company/templates/company/supplier_part.html +++ b/src/backend/InvenTree/company/templates/company/supplier_part.html @@ -264,17 +264,46 @@ src="{% static 'img/blank_image.png' %}"
    +
    +
    +
    +

    {% trans "Supplier Part Notes" %}

    + {% include "spacer.html" %} +
    + {% include "notes_buttons.html" %} +
    +
    +
    +
    + +
    +
    + {% endblock page_content %} {% block js_ready %} {{ block.super }} +// Load the "notes" tab +onPanelLoad('supplier-part-notes', function() { + + setupNotesField( + 'supplier-part-notes', + '{% url "api-supplier-part-detail" part.pk %}', + { + model_type: "supplierpart", + model_id: {{ part.pk }}, + editable: {% js_bool roles.purchase_order.change %}, + } + ); +}); + {% if barcodes %} $("#show-qr-code").click(function() { showQRDialog( '{% trans "Supplier Part QR Code" escape %}', - '{"supplierpart": {{ part.pk }} }' + '{{ part.barcode }}' ); }); diff --git a/src/backend/InvenTree/company/templates/company/supplier_part_sidebar.html b/src/backend/InvenTree/company/templates/company/supplier_part_sidebar.html index 91c0682e00..d6cd017500 100644 --- a/src/backend/InvenTree/company/templates/company/supplier_part_sidebar.html +++ b/src/backend/InvenTree/company/templates/company/supplier_part_sidebar.html @@ -8,3 +8,5 @@ {% include "sidebar_item.html" with label='purchase-orders' text=text icon="fa-shopping-cart" %} {% trans "Supplier Part Pricing" as text %} {% include "sidebar_item.html" with label='pricing' text=text icon="fa-dollar-sign" %} +{% trans "Notes" as text %} +{% include "sidebar_item.html" with label="supplier-part-notes" text=text icon="fa-clipboard" %} diff --git a/src/backend/InvenTree/company/test_api.py b/src/backend/InvenTree/company/test_api.py index 65b55089a3..78064a3bc5 100644 --- a/src/backend/InvenTree/company/test_api.py +++ b/src/backend/InvenTree/company/test_api.py @@ -57,22 +57,20 @@ class CompanyTest(InvenTreeAPITestCase): def test_company_detail(self): """Tests for the Company detail endpoint.""" url = reverse('api-company-detail', kwargs={'pk': self.acme.pk}) - response = self.get(url) + response = self.get(url, expected_code=200) + self.assertIn('name', response.data.keys()) self.assertEqual(response.data['name'], 'ACME') # Change the name of the company # Note we should not have the correct permissions (yet) data = response.data - response = self.client.patch(url, data, format='json', expected_code=400) - - self.assignRole('company.change') # Update the name and set the currency to a valid value data['name'] = 'ACMOO' data['currency'] = 'NZD' - response = self.client.patch(url, data, format='json', expected_code=200) + response = self.patch(url, data, expected_code=200) self.assertEqual(response.data['name'], 'ACMOO') self.assertEqual(response.data['currency'], 'NZD') @@ -162,7 +160,7 @@ class CompanyTest(InvenTreeAPITestCase): class ContactTest(InvenTreeAPITestCase): """Tests for the Contact models.""" - roles = [] + roles = ['purchase_order.view'] @classmethod def setUpTestData(cls): @@ -268,7 +266,7 @@ class ContactTest(InvenTreeAPITestCase): class AddressTest(InvenTreeAPITestCase): """Test cases for Address API endpoints.""" - roles = [] + roles = ['purchase_order.view'] @classmethod def setUpTestData(cls): diff --git a/src/backend/InvenTree/company/test_migrations.py b/src/backend/InvenTree/company/test_migrations.py index bb5b6f27f9..305eaf6031 100644 --- a/src/backend/InvenTree/company/test_migrations.py +++ b/src/backend/InvenTree/company/test_migrations.py @@ -45,14 +45,7 @@ class TestManufacturerField(MigratorTestCase): SupplierPart = self.old_state.apps.get_model('company', 'supplierpart') # Create an initial part - part = Part.objects.create( - name='Screw', - description='A single screw', - level=0, - tree_id=0, - lft=0, - rght=0, - ) + part = Part.objects.create(name='Screw', description='A single screw') # Create a company to act as the supplier supplier = Company.objects.create( diff --git a/src/backend/InvenTree/config_template.yaml b/src/backend/InvenTree/config_template.yaml index d1b13a5e1c..4ef1bf42bf 100644 --- a/src/backend/InvenTree/config_template.yaml +++ b/src/backend/InvenTree/config_template.yaml @@ -11,6 +11,8 @@ # 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 +# Do not change this section if you are using the package - use `inventree config` instead +# TO MAINTAINERS: Do not change database strings database: # --- Available options: --- # ENGINE: Database engine. Selection from: @@ -26,7 +28,7 @@ database: # 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 interfac, or use the environment variable INVENTREE_ADMIN_ENABLED +# Set to False to disable the admin interface, or use the environment variable INVENTREE_ADMIN_ENABLED #admin_enabled: True # Set the admin URL, or use the environment variable INVENTREE_ADMIN_URL diff --git a/src/backend/InvenTree/generic/states/states.py b/src/backend/InvenTree/generic/states/states.py index 372a5bec45..c72b201eca 100644 --- a/src/backend/InvenTree/generic/states/states.py +++ b/src/backend/InvenTree/generic/states/states.py @@ -16,11 +16,26 @@ class BaseEnum(enum.IntEnum): obj._value_ = args[0] return obj + def __int__(self): + """Return an integer representation of the value.""" + return self.value + + def __str__(self): + """Return a string representation of the value.""" + return str(self.value) + def __eq__(self, obj): """Override equality operator to allow comparison with int.""" - if type(self) is type(obj): - return super().__eq__(obj) - return self.value == obj + if type(obj) is int: + return self.value == obj + + if isinstance(obj, BaseEnum): + return self.value == obj.value + + if hasattr(obj, 'value'): + return self.value == obj.value + + return super().__eq__(obj) def __ne__(self, obj): """Override inequality operator to allow comparison with int.""" diff --git a/src/backend/InvenTree/importer/__init__.py b/src/backend/InvenTree/importer/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/backend/InvenTree/importer/admin.py b/src/backend/InvenTree/importer/admin.py new file mode 100644 index 0000000000..a33f2e7b50 --- /dev/null +++ b/src/backend/InvenTree/importer/admin.py @@ -0,0 +1,79 @@ +"""Admin site specification for the 'importer' app.""" + +from django.contrib import admin + +import importer.models +import importer.registry + + +class DataImportColumnMapAdmin(admin.TabularInline): + """Inline admin for DataImportColumnMap model.""" + + model = importer.models.DataImportColumnMap + can_delete = False + max_num = 0 + + def get_readonly_fields(self, request, obj=None): + """Return the readonly fields for the admin interface.""" + return ['field'] + + def formfield_for_dbfield(self, db_field, request, **kwargs): + """Override the choices for the column field.""" + if db_field.name == 'column': + # TODO: Implement this! + queryset = self.get_queryset(request) + + if queryset.count() > 0: + session = queryset.first().session + db_field.choices = [(col, col) for col in session.columns] + + return super().formfield_for_choice_field(db_field, request, **kwargs) + + +@admin.register(importer.models.DataImportSession) +class DataImportSessionAdmin(admin.ModelAdmin): + """Admin interface for the DataImportSession model.""" + + list_display = ['id', 'data_file', 'status', 'user'] + + list_filter = ['status'] + + inlines = [DataImportColumnMapAdmin] + + def get_readonly_fields(self, request, obj=None): + """Update the readonly fields for the admin interface.""" + fields = ['columns', 'status', 'timestamp'] + + # Prevent data file from being edited after upload! + if obj: + fields += ['data_file'] + else: + fields += ['field_mapping'] + + return fields + + def formfield_for_dbfield(self, db_field, request, **kwargs): + """Override the choices for the model_type field.""" + if db_field.name == 'model_type': + db_field.choices = importer.registry.supported_model_options() + + return super().formfield_for_dbfield(db_field, request, **kwargs) + + +@admin.register(importer.models.DataImportRow) +class DataImportRowAdmin(admin.ModelAdmin): + """Admin interface for the DataImportRow model.""" + + list_display = ['id', 'session', 'row_index'] + + def get_readonly_fields(self, request, obj=None): + """Return the readonly fields for the admin interface.""" + return ['session', 'row_index', 'row_data', 'errors', 'valid'] + + +class DataExportAdmin(admin.ModelAdmin): + """Custom admin class mixin allowing for data export functionality.""" + + serializer_class = None + + # TODO: Add custom admin action to export queryset data diff --git a/src/backend/InvenTree/importer/api.py b/src/backend/InvenTree/importer/api.py new file mode 100644 index 0000000000..6eb4815784 --- /dev/null +++ b/src/backend/InvenTree/importer/api.py @@ -0,0 +1,202 @@ +"""API endpoints for the importer app.""" + +from django.shortcuts import get_object_or_404 +from django.urls import include, path + +from drf_spectacular.utils import extend_schema +from rest_framework import permissions +from rest_framework.response import Response +from rest_framework.views import APIView + +import importer.models +import importer.registry +import importer.serializers +from InvenTree.api import BulkDeleteMixin +from InvenTree.filters import SEARCH_ORDER_FILTER +from InvenTree.mixins import ( + CreateAPI, + ListAPI, + ListCreateAPI, + RetrieveUpdateAPI, + RetrieveUpdateDestroyAPI, +) + + +class DataImporterModelList(APIView): + """API endpoint for displaying a list of models available for import.""" + + permission_classes = [permissions.IsAuthenticated] + + def get(self, request): + """Return a list of models available for import.""" + models = [] + + for serializer in importer.registry.get_supported_serializers(): + model = serializer.Meta.model + url = model.get_api_url() if hasattr(model, 'get_api_url') else None + + models.append({ + 'serializer': str(serializer.__name__), + 'model_type': model.__name__.lower(), + 'api_url': url, + }) + + return Response(models) + + +class DataImportSessionList(BulkDeleteMixin, ListCreateAPI): + """API endpoint for accessing a list of DataImportSession objects.""" + + permission_classes = [permissions.IsAuthenticated] + + queryset = importer.models.DataImportSession.objects.all() + serializer_class = importer.serializers.DataImportSessionSerializer + + filter_backends = SEARCH_ORDER_FILTER + + filterset_fields = ['model_type', 'status', 'user'] + + ordering_fields = ['timestamp', 'status', 'model_type'] + + +class DataImportSessionDetail(RetrieveUpdateDestroyAPI): + """Detail endpoint for a single DataImportSession object.""" + + queryset = importer.models.DataImportSession.objects.all() + serializer_class = importer.serializers.DataImportSessionSerializer + + +class DataImportSessionAcceptFields(APIView): + """API endpoint to accept the field mapping for a DataImportSession.""" + + permission_classes = [permissions.IsAuthenticated] + + @extend_schema( + responses={200: importer.serializers.DataImportSessionSerializer(many=False)} + ) + def post(self, request, pk): + """Accept the field mapping for a DataImportSession.""" + session = get_object_or_404(importer.models.DataImportSession, pk=pk) + + # Attempt to accept the mapping (may raise an exception if the mapping is invalid) + session.accept_mapping() + + return Response(importer.serializers.DataImportSessionSerializer(session).data) + + +class DataImportSessionAcceptRows(CreateAPI): + """API endpoint to accept the rows for a DataImportSession.""" + + queryset = importer.models.DataImportSession.objects.all() + serializer_class = importer.serializers.DataImportAcceptRowSerializer + + def get_serializer_context(self): + """Add the import session object to the serializer context.""" + ctx = super().get_serializer_context() + + try: + ctx['session'] = importer.models.DataImportSession.objects.get( + pk=self.kwargs.get('pk', None) + ) + except Exception: + pass + + ctx['request'] = self.request + return ctx + + +class DataImportColumnMappingList(ListAPI): + """API endpoint for accessing a list of DataImportColumnMap objects.""" + + queryset = importer.models.DataImportColumnMap.objects.all() + serializer_class = importer.serializers.DataImportColumnMapSerializer + + filter_backends = SEARCH_ORDER_FILTER + + filterset_fields = ['session'] + + +class DataImportColumnMappingDetail(RetrieveUpdateAPI): + """Detail endpoint for a single DataImportColumnMap object.""" + + queryset = importer.models.DataImportColumnMap.objects.all() + serializer_class = importer.serializers.DataImportColumnMapSerializer + + +class DataImportRowList(BulkDeleteMixin, ListAPI): + """API endpoint for accessing a list of DataImportRow objects.""" + + queryset = importer.models.DataImportRow.objects.all() + serializer_class = importer.serializers.DataImportRowSerializer + + filter_backends = SEARCH_ORDER_FILTER + + filterset_fields = ['session', 'valid', 'complete'] + + ordering_fields = ['pk', 'row_index', 'valid'] + + ordering = 'row_index' + + +class DataImportRowDetail(RetrieveUpdateDestroyAPI): + """Detail endpoint for a single DataImportRow object.""" + + queryset = importer.models.DataImportRow.objects.all() + serializer_class = importer.serializers.DataImportRowSerializer + + +importer_api_urls = [ + path('models/', DataImporterModelList.as_view(), name='api-importer-model-list'), + path( + 'session/', + include([ + path( + '/', + include([ + path( + 'accept_fields/', + DataImportSessionAcceptFields.as_view(), + name='api-import-session-accept-fields', + ), + path( + 'accept_rows/', + DataImportSessionAcceptRows.as_view(), + name='api-import-session-accept-rows', + ), + path( + '', + DataImportSessionDetail.as_view(), + name='api-import-session-detail', + ), + ]), + ), + path('', DataImportSessionList.as_view(), name='api-importer-session-list'), + ]), + ), + path( + 'column-mapping/', + include([ + path( + '/', + DataImportColumnMappingDetail.as_view(), + name='api-importer-mapping-detail', + ), + path( + '', + DataImportColumnMappingList.as_view(), + name='api-importer-mapping-list', + ), + ]), + ), + path( + 'row/', + include([ + path( + '/', + DataImportRowDetail.as_view(), + name='api-importer-row-detail', + ), + path('', DataImportRowList.as_view(), name='api-importer-row-list'), + ]), + ), +] diff --git a/src/backend/InvenTree/importer/apps.py b/src/backend/InvenTree/importer/apps.py new file mode 100644 index 0000000000..4b909df3d2 --- /dev/null +++ b/src/backend/InvenTree/importer/apps.py @@ -0,0 +1,10 @@ +"""AppConfig for the 'importer' app.""" + +from django.apps import AppConfig + + +class ImporterConfig(AppConfig): + """AppConfig class for the 'importer' app.""" + + default_auto_field = 'django.db.models.BigAutoField' + name = 'importer' diff --git a/src/backend/InvenTree/importer/migrations/0001_initial.py b/src/backend/InvenTree/importer/migrations/0001_initial.py new file mode 100644 index 0000000000..0572c16704 --- /dev/null +++ b/src/backend/InvenTree/importer/migrations/0001_initial.py @@ -0,0 +1,56 @@ +# Generated by Django 4.2.12 on 2024-06-30 04:42 + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import importer.validators +import InvenTree.helpers +from importer.status_codes import DataImportStatusCode + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='DataImportSession', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='Timestamp')), + ('data_file', models.FileField(help_text='Data file to import', upload_to='import', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=InvenTree.helpers.GetExportFormats()), importer.validators.validate_data_file], verbose_name='Data File')), + ('columns', models.JSONField(blank=True, null=True, verbose_name='Columns')), + ('model_type', models.CharField(max_length=100, validators=[importer.validators.validate_importer_model_type])), + ('status', models.PositiveIntegerField(choices=DataImportStatusCode.items(), default=DataImportStatusCode.INITIAL.value, help_text='Import status')), + ('field_defaults', models.JSONField(blank=True, null=True, validators=[importer.validators.validate_field_defaults], verbose_name='Field Defaults')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User')), + ], + ), + migrations.CreateModel( + name='DataImportRow', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('row_index', models.PositiveIntegerField(default=0, verbose_name='Row Index')), + ('row_data', models.JSONField(blank=True, null=True, verbose_name='Original row data')), + ('data', models.JSONField(blank=True, null=True, verbose_name='Data')), + ('errors', models.JSONField(blank=True, null=True, verbose_name='Errors')), + ('valid', models.BooleanField(default=False, verbose_name='Valid')), + ('complete', models.BooleanField(default=False, verbose_name='Complete')), + ('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rows', to='importer.dataimportsession', verbose_name='Import Session')), + ], + ), + migrations.CreateModel( + name='DataImportColumnMap', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('field', models.CharField(max_length=100, verbose_name='Field')), + ('column', models.CharField(blank=True, max_length=100, verbose_name='Column')), + ('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='column_mappings', to='importer.dataimportsession', verbose_name='Import Session')), + ], + ), + ] diff --git a/src/backend/InvenTree/importer/migrations/0002_dataimportsession_field_overrides.py b/src/backend/InvenTree/importer/migrations/0002_dataimportsession_field_overrides.py new file mode 100644 index 0000000000..9d00ce956b --- /dev/null +++ b/src/backend/InvenTree/importer/migrations/0002_dataimportsession_field_overrides.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.14 on 2024-07-12 03:35 + +from django.db import migrations, models +import importer.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('importer', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='dataimportsession', + name='field_overrides', + field=models.JSONField(blank=True, null=True, validators=[importer.validators.validate_field_defaults], verbose_name='Field Overrides'), + ), + ] diff --git a/src/backend/InvenTree/importer/migrations/0003_dataimportsession_field_filters.py b/src/backend/InvenTree/importer/migrations/0003_dataimportsession_field_filters.py new file mode 100644 index 0000000000..b5663a5e31 --- /dev/null +++ b/src/backend/InvenTree/importer/migrations/0003_dataimportsession_field_filters.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.14 on 2024-07-16 03:04 + +from django.db import migrations, models +import importer.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('importer', '0002_dataimportsession_field_overrides'), + ] + + operations = [ + migrations.AddField( + model_name='dataimportsession', + name='field_filters', + field=models.JSONField(blank=True, null=True, validators=[importer.validators.validate_field_defaults], verbose_name='Field Filters'), + ), + ] diff --git a/src/backend/InvenTree/importer/migrations/__init__.py b/src/backend/InvenTree/importer/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/backend/InvenTree/importer/mixins.py b/src/backend/InvenTree/importer/mixins.py new file mode 100644 index 0000000000..e0e064afc4 --- /dev/null +++ b/src/backend/InvenTree/importer/mixins.py @@ -0,0 +1,267 @@ +"""Mixin classes for data import/export functionality.""" + +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +import tablib +from rest_framework import fields, serializers + +import importer.operations +from InvenTree.helpers import DownloadFile, GetExportFormats, current_date + + +class DataImportSerializerMixin: + """Mixin class for adding data import functionality to a DRF serializer.""" + + import_only_fields = [] + import_exclude_fields = [] + + def get_import_only_fields(self, **kwargs) -> list: + """Return the list of field names which are only used during data import.""" + return self.import_only_fields + + def get_import_exclude_fields(self, **kwargs) -> list: + """Return the list of field names which are excluded during data import.""" + return self.import_exclude_fields + + def __init__(self, *args, **kwargs): + """Initialise the DataImportSerializerMixin. + + Determine if the serializer is being used for data import, + and if so, adjust the serializer fields accordingly. + """ + importing = kwargs.pop('importing', False) + + super().__init__(*args, **kwargs) + + if importing: + # Exclude any fields which are not able to be imported + importable_field_names = list(self.get_importable_fields().keys()) + field_names = list(self.fields.keys()) + + for field in field_names: + if field not in importable_field_names: + self.fields.pop(field, None) + + # Exclude fields which are excluded for data import + for field in self.get_import_exclude_fields(**kwargs): + self.fields.pop(field, None) + + else: + # Exclude fields which are only used for data import + for field in self.get_import_only_fields(**kwargs): + self.fields.pop(field, None) + + def get_importable_fields(self) -> dict: + """Return a dict of fields which can be imported against this serializer instance. + + Returns: + dict: A dictionary of field names and field objects + """ + importable_fields = {} + + if meta := getattr(self, 'Meta', None): + read_only_fields = getattr(meta, 'read_only_fields', []) + else: + read_only_fields = [] + + for name, field in self.fields.items(): + # Skip read-only fields + if getattr(field, 'read_only', False): + continue + + if name in read_only_fields: + continue + + # Skip fields which are themselves serializers + if issubclass(field.__class__, serializers.Serializer): + continue + + # Skip file fields + if issubclass(field.__class__, fields.FileField): + continue + + importable_fields[name] = field + + return importable_fields + + +class DataExportSerializerMixin: + """Mixin class for adding data export functionality to a DRF serializer.""" + + export_only_fields = [] + export_exclude_fields = [] + + def get_export_only_fields(self, **kwargs) -> list: + """Return the list of field names which are only used during data export.""" + return self.export_only_fields + + def get_export_exclude_fields(self, **kwargs) -> list: + """Return the list of field names which are excluded during data export.""" + return self.export_exclude_fields + + def __init__(self, *args, **kwargs): + """Initialise the DataExportSerializerMixin. + + Determine if the serializer is being used for data export, + and if so, adjust the serializer fields accordingly. + """ + exporting = kwargs.pop('exporting', False) + + super().__init__(*args, **kwargs) + + if exporting: + # Exclude fields which are not required for data export + for field in self.get_export_exclude_fields(**kwargs): + self.fields.pop(field, None) + else: + # Exclude fields which are only used for data export + for field in self.get_export_only_fields(**kwargs): + self.fields.pop(field, None) + + def get_exportable_fields(self) -> dict: + """Return a dict of fields which can be exported against this serializer instance. + + Note: Any fields which should be excluded from export have already been removed + + Returns: + dict: A dictionary of field names and field objects + """ + fields = {} + + if meta := getattr(self, 'Meta', None): + write_only_fields = getattr(meta, 'write_only_fields', []) + else: + write_only_fields = [] + + for name, field in self.fields.items(): + # Skip write-only fields + if getattr(field, 'write_only', False): + continue + + if name in write_only_fields: + continue + + # Skip fields which are themselves serializers + if issubclass(field.__class__, serializers.Serializer): + continue + + fields[name] = field + + return fields + + def get_exported_filename(self, export_format) -> str: + """Return the filename for the exported data file. + + An implementing class can override this implementation if required. + + Arguments: + export_format: The file format to be exported + + Returns: + str: The filename for the exported file + """ + model = self.Meta.model + date = current_date().isoformat() + + return f'InvenTree_{model.__name__}_{date}.{export_format}' + + @classmethod + def arrange_export_headers(cls, headers: list) -> list: + """Optional method to arrange the export headers.""" + return headers + + def process_row(self, row): + """Optional method to process a row before exporting it.""" + return row + + def export_to_file(self, data, file_format): + """Export the queryset to a file in the specified format. + + Arguments: + queryset: The queryset to export + data: The serialized dataset to export + file_format: The file format to export to + + Returns: + File object containing the exported data + """ + # Extract all exportable fields from this serializer + fields = self.get_exportable_fields() + + field_names = self.arrange_export_headers(list(fields.keys())) + + # Extract human-readable field names + headers = [] + + for field_name, field in fields.items(): + field = fields[field_name] + + headers.append(importer.operations.get_field_label(field) or field_name) + + dataset = tablib.Dataset(headers=headers) + + for row in data: + row = self.process_row(row) + dataset.append([row.get(field, None) for field in field_names]) + + return dataset.export(file_format) + + +class DataImportExportSerializerMixin( + DataImportSerializerMixin, DataExportSerializerMixin +): + """Mixin class for adding data import/export functionality to a DRF serializer.""" + + pass + + +class DataExportViewMixin: + """Mixin class for exporting a dataset via the API. + + Adding this mixin to an API view allows the user to export the dataset to file in a variety of formats. + + We achieve this by overriding the 'get' method, and checking for the presence of the required query parameter. + """ + + EXPORT_QUERY_PARAMETER = 'export' + + def export_data(self, export_format): + """Export the data in the specified format. + + Use the provided serializer to generate the data, and return it as a file download. + """ + serializer_class = self.get_serializer_class() + + if not issubclass(serializer_class, DataExportSerializerMixin): + raise TypeError( + 'Serializer class must inherit from DataExportSerialierMixin' + ) + + queryset = self.filter_queryset(self.get_queryset()) + + serializer = serializer_class(exporting=True) + serializer.initial_data = queryset + + # Export dataset with a second copy of the serializer + # This is because when we pass many=True, the returned class is a ListSerializer + data = serializer_class(queryset, many=True, exporting=True).data + + filename = serializer.get_exported_filename(export_format) + datafile = serializer.export_to_file(data, export_format) + + return DownloadFile(datafile, filename=filename) + + def get(self, request, *args, **kwargs): + """Override the 'get' method to check for the export query parameter.""" + if export_format := request.query_params.get(self.EXPORT_QUERY_PARAMETER, None): + export_format = str(export_format).strip().lower() + if export_format in GetExportFormats(): + return self.export_data(export_format) + else: + raise ValidationError({ + self.EXPORT_QUERY_PARAMETER: _('Invalid export format') + }) + + # If the export query parameter is not present, return the default response + return super().get(request, *args, **kwargs) diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py new file mode 100644 index 0000000000..219e1ac600 --- /dev/null +++ b/src/backend/InvenTree/importer/models.py @@ -0,0 +1,659 @@ +"""Model definitions for the 'importer' app.""" + +import json +import logging + +from django.contrib.auth.models import User +from django.core.exceptions import ValidationError as DjangoValidationError +from django.core.validators import FileExtensionValidator +from django.db import models +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ + +from rest_framework.exceptions import ValidationError as DRFValidationError + +import importer.operations +import importer.registry +import importer.tasks +import importer.validators +import InvenTree.helpers +from importer.status_codes import DataImportStatusCode + +logger = logging.getLogger('inventree') + + +class DataImportSession(models.Model): + """Database model representing a data import session. + + An initial file is uploaded, and used to populate the database. + + Fields: + timestamp: Timestamp for the import session + data_file: FileField for the data file to import + status: IntegerField for the status of the import session + user: ForeignKey to the User who initiated the import + field_defaults: JSONField for field default values - provides a backup value for a field + field_overrides: JSONField for field override values - used to force a value for a field + field_filters: JSONField for field filter values - optional field API filters + """ + + @staticmethod + def get_api_url(): + """Return the API URL associated with the DataImportSession model.""" + return reverse('api-importer-session-list') + + def save(self, *args, **kwargs): + """Save the DataImportSession object.""" + initial = self.pk is None + + self.clean() + + super().save(*args, **kwargs) + + if initial: + # New object - run initial setup + self.status = DataImportStatusCode.INITIAL.value + self.progress = 0 + self.extract_columns() + + timestamp = models.DateTimeField(auto_now_add=True, verbose_name=_('Timestamp')) + + data_file = models.FileField( + upload_to='import', + verbose_name=_('Data File'), + help_text=_('Data file to import'), + validators=[ + FileExtensionValidator( + allowed_extensions=InvenTree.helpers.GetExportFormats() + ), + importer.validators.validate_data_file, + ], + ) + + columns = models.JSONField(blank=True, null=True, verbose_name=_('Columns')) + + model_type = models.CharField( + blank=False, + max_length=100, + validators=[importer.validators.validate_importer_model_type], + ) + + status = models.PositiveIntegerField( + default=DataImportStatusCode.INITIAL.value, + choices=DataImportStatusCode.items(), + help_text=_('Import status'), + ) + + user = models.ForeignKey( + User, on_delete=models.SET_NULL, blank=True, null=True, verbose_name=_('User') + ) + + field_defaults = models.JSONField( + blank=True, + null=True, + verbose_name=_('Field Defaults'), + validators=[importer.validators.validate_field_defaults], + ) + + field_overrides = models.JSONField( + blank=True, + null=True, + verbose_name=_('Field Overrides'), + validators=[importer.validators.validate_field_defaults], + ) + + field_filters = models.JSONField( + blank=True, + null=True, + verbose_name=_('Field Filters'), + validators=[importer.validators.validate_field_defaults], + ) + + @property + def field_mapping(self): + """Construct a dict of field mappings for this import session. + + Returns: A dict of field: column mappings + """ + mapping = {} + + for map in self.column_mappings.all(): + mapping[map.field] = map.column + + return mapping + + @property + def serializer_class(self): + """Return the serializer class for this importer.""" + from importer.registry import supported_models + + return supported_models().get(self.model_type, None) + + def extract_columns(self): + """Run initial column extraction and mapping. + + This method is called when the import session is first created. + + - Extract column names from the data file + - Create a default mapping for each field in the serializer + """ + # Extract list of column names from the file + self.columns = importer.operations.extract_column_names(self.data_file) + + serializer_fields = self.available_fields() + + # Remove any existing mappings + self.column_mappings.all().delete() + + column_mappings = [] + + matched_columns = set() + + field_overrides = self.field_overrides or {} + + # Create a default mapping for each available field in the database + for field, field_def in serializer_fields.items(): + # If an override value is provided for the field, + # skip creating a mapping for this field + if field in field_overrides: + continue + + # Generate a list of possible column names for this field + field_options = [ + field, + field_def.get('label', field), + field_def.get('help_text', field), + ] + column_name = '' + + for column in self.columns: + # No title provided for the column + if not column: + continue + + # Ignore if we have already matched this column to a field + if column in matched_columns: + continue + + # Try direct match + if column in field_options: + column_name = column + break + + # Try lower case match + if column.lower() in [f.lower() for f in field_options]: + column_name = column + break + + column_mappings.append( + DataImportColumnMap(session=self, column=column_name, field=field) + ) + + # Create the column mappings + DataImportColumnMap.objects.bulk_create(column_mappings) + + self.status = DataImportStatusCode.MAPPING.value + self.save() + + def accept_mapping(self): + """Accept current mapping configuration. + + - Validate that the current column mapping is correct + - Trigger the data import process + """ + # First, we need to ensure that all the *required* columns have been mapped + required_fields = self.required_fields() + + field_defaults = self.field_defaults or {} + field_overrides = self.field_overrides or {} + + missing_fields = [] + + for field in required_fields.keys(): + # An override value exists + if field in field_overrides: + continue + + # A default value exists + if field in field_defaults and field_defaults[field]: + continue + + # The field has been mapped to a data column + if mapping := self.column_mappings.filter(field=field).first(): + if mapping.column: + continue + + missing_fields.append(field) + + if len(missing_fields) > 0: + raise DjangoValidationError({ + 'error': _('Some required fields have not been mapped'), + 'fields': missing_fields, + }) + + # No errors, so trigger the data import process + self.trigger_data_import() + + def trigger_data_import(self): + """Trigger the data import process for this session. + + Offloads the task to the background worker process. + """ + from InvenTree.tasks import offload_task + + # Mark the import task status as "IMPORTING" + self.status = DataImportStatusCode.IMPORTING.value + self.save() + + offload_task(importer.tasks.import_data, self.pk) + + def import_data(self): + """Perform the data import process for this session.""" + # Clear any existing data rows + self.rows.all().delete() + + df = importer.operations.load_data_file(self.data_file) + + if df is None: + # TODO: Log an error message against the import session + logger.error('Failed to load data file') + return + + headers = df.headers + + imported_rows = [] + + field_mapping = self.field_mapping + available_fields = self.available_fields() + + # Iterate through each "row" in the data file, and create a new DataImportRow object + for idx, row in enumerate(df): + row_data = dict(zip(headers, row)) + + # Skip completely empty rows + if not any(row_data.values()): + continue + + row = importer.models.DataImportRow( + session=self, row_data=row_data, row_index=idx + ) + + row.extract_data( + field_mapping=field_mapping, + available_fields=available_fields, + commit=False, + ) + + row.valid = row.validate(commit=False) + imported_rows.append(row) + + # Perform database writes as a single operation + importer.models.DataImportRow.objects.bulk_create(imported_rows) + + # Mark the import task as "PROCESSING" + self.status = DataImportStatusCode.PROCESSING.value + self.save() + + def check_complete(self) -> bool: + """Check if the import session is complete.""" + if self.completed_row_count < self.row_count: + return False + + # Update the status of this session + if self.status != DataImportStatusCode.COMPLETE.value: + self.status = DataImportStatusCode.COMPLETE.value + self.save() + + return True + + @property + def row_count(self): + """Return the number of rows in the import session.""" + return self.rows.count() + + @property + def completed_row_count(self): + """Return the number of completed rows for this session.""" + return self.rows.filter(complete=True).count() + + def available_fields(self): + """Returns information on the available fields. + + - This method is designed to be introspected by the frontend, for rendering the various fields. + - We make use of the InvenTree.metadata module to provide extra information about the fields. + + Note that we cache these fields, as they are expensive to compute. + """ + if fields := getattr(self, '_available_fields', None): + return fields + + from InvenTree.metadata import InvenTreeMetadata + + metadata = InvenTreeMetadata() + + if serializer_class := self.serializer_class: + serializer = serializer_class(data={}, importing=True) + fields = metadata.get_serializer_info(serializer) + else: + fields = {} + + self._available_fields = fields + return fields + + def required_fields(self): + """Returns information on which fields are *required* for import.""" + fields = self.available_fields() + + required = {} + + for field, info in fields.items(): + if info.get('required', False): + required[field] = info + + return required + + +class DataImportColumnMap(models.Model): + """Database model representing a mapping between a file column and serializer field. + + - Each row maps a "column" (in the import file) to a "field" (in the serializer) + - Column must exist in the file + - Field must exist in the serializer (and not be read-only) + """ + + @staticmethod + def get_api_url(): + """Return the API URL associated with the DataImportColumnMap model.""" + return reverse('api-importer-mapping-list') + + def save(self, *args, **kwargs): + """Save the DataImportColumnMap object.""" + self.clean() + self.validate_unique() + + super().save(*args, **kwargs) + + def validate_unique(self, exclude=None): + """Ensure that the column mapping is unique within the session.""" + super().validate_unique(exclude) + + columns = self.session.column_mappings.exclude(pk=self.pk) + + if ( + self.column not in ['', None] + and columns.filter(column=self.column).exists() + ): + raise DjangoValidationError({ + 'column': _('Column is already mapped to a database field') + }) + + if columns.filter(field=self.field).exists(): + raise DjangoValidationError({ + 'field': _('Field is already mapped to a data column') + }) + + def clean(self): + """Validate the column mapping.""" + super().clean() + + if not self.session: + raise DjangoValidationError({ + 'session': _('Column mapping must be linked to a valid import session') + }) + + if self.column and self.column not in self.session.columns: + raise DjangoValidationError({ + 'column': _('Column does not exist in the data file') + }) + + field_def = self.field_definition + + if not field_def: + raise DjangoValidationError({ + 'field': _('Field does not exist in the target model') + }) + + if field_def.get('read_only', False): + raise DjangoValidationError({'field': _('Selected field is read-only')}) + + session = models.ForeignKey( + DataImportSession, + on_delete=models.CASCADE, + verbose_name=_('Import Session'), + related_name='column_mappings', + ) + + field = models.CharField(max_length=100, verbose_name=_('Field')) + + column = models.CharField(blank=True, max_length=100, verbose_name=_('Column')) + + @property + def available_fields(self): + """Return a list of available fields for this import session. + + These fields get cached, as they are expensive to compute. + """ + if fields := getattr(self, '_available_fields', None): + return fields + + self._available_fields = self.session.available_fields() + + return self._available_fields + + @property + def field_definition(self): + """Return the field definition associated with this column mapping.""" + fields = self.available_fields + return fields.get(self.field, None) + + @property + def label(self): + """Extract the 'label' associated with the mapped field.""" + if field_def := self.field_definition: + return field_def.get('label', None) + + @property + def description(self): + """Extract the 'description' associated with the mapped field.""" + description = None + + if field_def := self.field_definition: + description = field_def.get('help_text', None) + + if not description: + description = self.label + + return description + + +class DataImportRow(models.Model): + """Database model representing a single row in a data import session. + + Each row corresponds to a single row in the import file, and is used to populate the database. + + Fields: + session: ForeignKey to the parent DataImportSession object + data: JSONField for the data in this row + status: IntegerField for the status of the row import + """ + + @staticmethod + def get_api_url(): + """Return the API URL associated with the DataImportRow model.""" + return reverse('api-importer-row-list') + + def save(self, *args, **kwargs): + """Save the DataImportRow object.""" + self.valid = self.validate() + super().save(*args, **kwargs) + + session = models.ForeignKey( + DataImportSession, + on_delete=models.CASCADE, + verbose_name=_('Import Session'), + related_name='rows', + ) + + row_index = models.PositiveIntegerField(default=0, verbose_name=_('Row Index')) + + row_data = models.JSONField( + blank=True, null=True, verbose_name=_('Original row data') + ) + + data = models.JSONField(blank=True, null=True, verbose_name=_('Data')) + + errors = models.JSONField(blank=True, null=True, verbose_name=_('Errors')) + + valid = models.BooleanField(default=False, verbose_name=_('Valid')) + + complete = models.BooleanField(default=False, verbose_name=_('Complete')) + + @property + def default_values(self) -> dict: + """Return a dict object of the 'default' values for this row.""" + defaults = self.session.field_defaults or {} + + if type(defaults) is not dict: + try: + defaults = json.loads(str(defaults)) + except json.JSONDecodeError: + logger.warning('Failed to parse default values for import row') + defaults = {} + + return defaults + + @property + def override_values(self) -> dict: + """Return a dict object of the 'override' values for this row.""" + overrides = self.session.field_overrides or {} + + if type(overrides) is not dict: + try: + overrides = json.loads(str(overrides)) + except json.JSONDecodeError: + logger.warning('Failed to parse override values for import row') + overrides = {} + + return overrides + + def extract_data( + self, available_fields: dict = None, field_mapping: dict = None, commit=True + ): + """Extract row data from the provided data dictionary.""" + if not field_mapping: + field_mapping = self.session.field_mapping + + if not available_fields: + available_fields = self.session.available_fields() + + overrride_values = self.override_values + default_values = self.default_values + + data = {} + + # We have mapped column (file) to field (serializer) already + for field, col in field_mapping.items(): + # Data override (force value and skip any further checks) + if field in overrride_values: + data[field] = overrride_values[field] + continue + + # Default value (if provided) + if field in default_values: + data[field] = default_values[field] + + # If this field is *not* mapped to any column, skip + if not col or col not in self.row_data: + continue + + # Extract field type + field_def = available_fields.get(field, {}) + + field_type = field_def.get('type', None) + + value = self.row_data.get(col, None) + + if field_type == 'boolean': + value = InvenTree.helpers.str2bool(value) + elif field_type == 'date': + value = value or None + + # Use the default value, if provided + if value in [None, ''] and field in default_values: + value = default_values[field] + + data[field] = value + + self.data = data + + if commit: + self.save() + + def serializer_data(self): + """Construct data object to be sent to the serializer. + + - If available, we use the "default" values provided by the import session + - If available, we use the "override" values provided by the import session + """ + data = self.default_values + + if self.data: + data.update(self.data) + + # Override values take priority, if present + data.update(self.override_values) + + return data + + def construct_serializer(self): + """Construct a serializer object for this row.""" + if serializer_class := self.session.serializer_class: + return serializer_class(data=self.serializer_data()) + + def validate(self, commit=False) -> bool: + """Validate the data in this row against the linked serializer. + + Arguments: + commit: If True, the data is saved to the database (if validation passes) + + Returns: + True if the data is valid, False otherwise + + Raises: + ValidationError: If the linked serializer is not valid + """ + if self.complete: + # Row has already been completed + return True + + serializer = self.construct_serializer() + + if not serializer: + self.errors = { + 'non_field_errors': 'No serializer class linked to this import session' + } + return False + + result = False + + try: + result = serializer.is_valid(raise_exception=True) + except (DjangoValidationError, DRFValidationError) as e: + self.errors = e.detail + + if result: + self.errors = None + + if commit: + try: + serializer.save() + self.complete = True + self.save() + + self.session.check_complete() + + except Exception as e: + self.errors = {'non_field_errors': str(e)} + result = False + + return result diff --git a/src/backend/InvenTree/importer/operations.py b/src/backend/InvenTree/importer/operations.py new file mode 100644 index 0000000000..7b9806d07b --- /dev/null +++ b/src/backend/InvenTree/importer/operations.py @@ -0,0 +1,122 @@ +"""Data import operational functions.""" + +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +import tablib + +import InvenTree.helpers + + +def load_data_file(data_file, file_format=None): + """Load data file into a tablib dataset. + + Arguments: + data_file: django file object containing data to import (should be already opened!) + file_format: Format specifier for the data file + """ + # Introspect the file format based on the provided file + if not file_format: + file_format = data_file.name.split('.')[-1] + + if file_format and file_format.startswith('.'): + file_format = file_format[1:] + + file_format = file_format.strip().lower() + + if file_format not in InvenTree.helpers.GetExportFormats(): + raise ValidationError(_('Unsupported data file format')) + + file_object = data_file.file + + if hasattr(file_object, 'open'): + file_object.open('r') + + file_object.seek(0) + + try: + data = file_object.read() + except (IOError, FileNotFoundError): + raise ValidationError(_('Failed to open data file')) + + # Excel formats expect binary data + if file_format not in ['xls', 'xlsx']: + data = data.decode() + + try: + data = tablib.Dataset().load(data, headers=True, format=file_format) + except tablib.core.UnsupportedFormat: + raise ValidationError(_('Unsupported data file format')) + except tablib.core.InvalidDimensions: + raise ValidationError(_('Invalid data file dimensions')) + + return data + + +def extract_column_names(data_file) -> list: + """Extract column names from a data file. + + Uses the tablib library to extract column names from a data file. + + Args: + data_file: File object containing data to import + + Returns: + List of column names extracted from the file + + Raises: + ValidationError: If the data file is not in a valid format + """ + data = load_data_file(data_file) + + headers = [] + + for idx, header in enumerate(data.headers): + if header: + headers.append(header) + else: + # If the header is empty, generate a default header + headers.append(f'Column {idx + 1}') + + return headers + + +def extract_rows(data_file) -> list: + """Extract rows from the data file. + + Each returned row is a dictionary of column_name: value pairs. + """ + data = load_data_file(data_file) + + headers = data.headers + + rows = [] + + for row in data: + rows.append(dict(zip(headers, row))) + + return rows + + +def get_field_label(field) -> str: + """Return the label for a field in a serializer class. + + Check for labels in the following order of descending priority: + + - The serializer class has a 'label' specified for the field + - The underlying model has a 'verbose_name' specified + - The field name is used as the label + + Arguments: + field: Field instance from a serializer class + + Returns: + str: Field label + """ + if field: + if label := getattr(field, 'label', None): + return label + + # TODO: Check if the field is a model field + + return None diff --git a/src/backend/InvenTree/importer/registry.py b/src/backend/InvenTree/importer/registry.py new file mode 100644 index 0000000000..2614c29ea5 --- /dev/null +++ b/src/backend/InvenTree/importer/registry.py @@ -0,0 +1,72 @@ +"""Registry for supported serializers for data import operations.""" + +import logging + +from rest_framework.serializers import Serializer + +from importer.mixins import DataImportSerializerMixin + +logger = logging.getLogger('inventree') + + +class DataImportSerializerRegister: + """Registry for supported serializers for data import operations. + + To add a new serializer to the registry, add the @register_importer decorator to the serializer class. + """ + + supported_serializers: list[Serializer] = [] + + def register(self, serializer) -> None: + """Register a new serializer with the importer registry.""" + if not issubclass(serializer, DataImportSerializerMixin): + logger.debug('Invalid serializer class: %s', type(serializer)) + return + + if not issubclass(serializer, Serializer): + logger.debug('Invalid serializer class: %s', type(serializer)) + return + + logger.debug('Registering serializer class for import: %s', type(serializer)) + + if serializer not in self.supported_serializers: + self.supported_serializers.append(serializer) + + +_serializer_registry = DataImportSerializerRegister() + + +def get_supported_serializers(): + """Return a list of supported serializers which can be used for importing data.""" + return _serializer_registry.supported_serializers + + +def supported_models(): + """Return a map of supported models to their respective serializers.""" + data = {} + + for serializer in get_supported_serializers(): + model = serializer.Meta.model + data[model.__name__.lower()] = serializer + + return data + + +def supported_model_options(): + """Return a list of supported model options for importing data.""" + options = [] + + for model_name, serializer in supported_models().items(): + options.append((model_name, serializer.Meta.model._meta.verbose_name)) + + return options + + +def register_importer(): + """Decorator function to register a serializer with the importer registry.""" + + def _decorator(cls): + _serializer_registry.register(cls) + return cls + + return _decorator diff --git a/src/backend/InvenTree/importer/serializers.py b/src/backend/InvenTree/importer/serializers.py new file mode 100644 index 0000000000..ac68056f55 --- /dev/null +++ b/src/backend/InvenTree/importer/serializers.py @@ -0,0 +1,216 @@ +"""API serializers for the importer app.""" + +import json + +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +from rest_framework import serializers + +import importer.models +import importer.registry +from InvenTree.serializers import ( + InvenTreeAttachmentSerializerField, + InvenTreeModelSerializer, + UserSerializer, +) + + +class DataImportColumnMapSerializer(InvenTreeModelSerializer): + """Serializer for the DataImportColumnMap model.""" + + class Meta: + """Meta class options for the serializer.""" + + model = importer.models.DataImportColumnMap + fields = ['pk', 'session', 'column', 'field', 'label', 'description'] + read_only_fields = ['field', 'session'] + + label = serializers.CharField(read_only=True) + description = serializers.CharField(read_only=True) + + +class DataImportSessionSerializer(InvenTreeModelSerializer): + """Serializer for the DataImportSession model.""" + + class Meta: + """Meta class options for the serializer.""" + + model = importer.models.DataImportSession + fields = [ + 'pk', + 'timestamp', + 'data_file', + 'model_type', + 'available_fields', + 'status', + 'user', + 'user_detail', + 'columns', + 'column_mappings', + 'field_defaults', + 'field_overrides', + 'field_filters', + 'row_count', + 'completed_row_count', + ] + read_only_fields = ['pk', 'user', 'status', 'columns'] + + def __init__(self, *args, **kwargs): + """Override the constructor for the DataImportSession serializer.""" + super().__init__(*args, **kwargs) + + self.fields['model_type'].choices = importer.registry.supported_model_options() + + data_file = InvenTreeAttachmentSerializerField() + + model_type = serializers.ChoiceField( + required=True, + allow_blank=False, + choices=importer.registry.supported_model_options(), + ) + + available_fields = serializers.JSONField(read_only=True) + + row_count = serializers.IntegerField(read_only=True) + completed_row_count = serializers.IntegerField(read_only=True) + + column_mappings = DataImportColumnMapSerializer(many=True, read_only=True) + + user_detail = UserSerializer(source='user', read_only=True, many=False) + + def validate_field_defaults(self, defaults): + """De-stringify the field defaults.""" + if defaults is None: + return None + + if type(defaults) is not dict: + try: + defaults = json.loads(str(defaults)) + except: + raise ValidationError(_('Invalid field defaults')) + + return defaults + + def validate_field_overrides(self, overrides): + """De-stringify the field overrides.""" + if overrides is None: + return None + + if type(overrides) is not dict: + try: + overrides = json.loads(str(overrides)) + except: + raise ValidationError(_('Invalid field overrides')) + + return overrides + + def validate_field_filters(self, filters): + """De-stringify the field filters.""" + if filters is None: + return None + + if type(filters) is not dict: + try: + filters = json.loads(str(filters)) + except: + raise ValidationError(_('Invalid field filters')) + + return filters + + def create(self, validated_data): + """Override create method for this serializer. + + Attach user information based on provided session data. + """ + session = super().create(validated_data) + + request = self.context.get('request', None) + + if request: + session.user = request.user + session.save() + + return session + + +class DataImportRowSerializer(InvenTreeModelSerializer): + """Serializer for the DataImportRow model.""" + + class Meta: + """Meta class options for the serializer.""" + + model = importer.models.DataImportRow + fields = [ + 'pk', + 'session', + 'row_index', + 'row_data', + 'data', + 'errors', + 'valid', + 'complete', + ] + + read_only_fields = [ + 'pk', + 'session', + 'row_index', + 'row_data', + 'errors', + 'valid', + 'complete', + ] + + +class DataImportAcceptRowSerializer(serializers.Serializer): + """Serializer for accepting rows of data.""" + + class Meta: + """Serializer meta options.""" + + fields = ['rows'] + + rows = serializers.PrimaryKeyRelatedField( + queryset=importer.models.DataImportRow.objects.all(), + many=True, + required=True, + label=_('Rows'), + help_text=_('List of row IDs to accept'), + ) + + def validate_rows(self, rows): + """Ensure that the provided rows are valid. + + - Row must point to the same import session + - Row must contain valid data + - Row must not have already been completed + """ + session = self.context.get('session', None) + + if not rows or len(rows) == 0: + raise ValidationError(_('No rows provided')) + + for row in rows: + if row.session != session: + raise ValidationError(_('Row does not belong to this session')) + + if not row.valid: + raise ValidationError(_('Row contains invalid data')) + + if row.complete: + raise ValidationError(_('Row has already been completed')) + + return rows + + def save(self): + """Complete the provided rows.""" + rows = self.validated_data['rows'] + + for row in rows: + row.validate(commit=True) + + if session := self.context.get('session', None): + session.check_complete() + + return rows diff --git a/src/backend/InvenTree/importer/status_codes.py b/src/backend/InvenTree/importer/status_codes.py new file mode 100644 index 0000000000..71d4dfd0e6 --- /dev/null +++ b/src/backend/InvenTree/importer/status_codes.py @@ -0,0 +1,19 @@ +"""Status codes for common model types.""" + +from django.utils.translation import gettext_lazy as _ + +from generic.states import StatusCode + + +class DataImportStatusCode(StatusCode): + """Defines a set of status codes for a DataImportSession.""" + + INITIAL = 0, _('Initializing'), 'secondary' # Import session has been created + MAPPING = 10, _('Mapping Columns'), 'primary' # Import fields are being mapped + IMPORTING = 20, _('Importing Data'), 'primary' # Data is being imported + PROCESSING = ( + 30, + _('Processing Data'), + 'primary', + ) # Data is being processed by the user + COMPLETE = 40, _('Complete'), 'success' # Import has been completed diff --git a/src/backend/InvenTree/importer/tasks.py b/src/backend/InvenTree/importer/tasks.py new file mode 100644 index 0000000000..0a6e38f123 --- /dev/null +++ b/src/backend/InvenTree/importer/tasks.py @@ -0,0 +1,53 @@ +"""Task definitions for the 'importer' app.""" + +import logging +from datetime import timedelta + +import InvenTree.helpers +import InvenTree.tasks + +logger = logging.getLogger('inventree') + + +def import_data(session_id: int): + """Load data from the provided file. + + Attempt to load data from the provided file, and potentially handle any errors. + """ + import importer.models + import importer.operations + import importer.status_codes + + try: + session = importer.models.DataImportSession.objects.get(pk=session_id) + logger.info("Loading data from session ID '%s'", session_id) + session.import_data() + except (ValueError, importer.models.DataImportSession.DoesNotExist): + logger.error("Data import session with ID '%s' does not exist", session_id) + return + + +@InvenTree.tasks.scheduled_task(InvenTree.tasks.ScheduledTask.DAILY) +def cleanup_import_sessions(): + """Periodically remove old import sessions. + + Every 5 days, remove any importer sessions that are more than 5 days old + """ + CLEANUP_DAYS = 5 + + import importer.models + + if not InvenTree.tasks.check_daily_holdoff('cleanup_import_sessions', CLEANUP_DAYS): + return + + logger.info('Cleaning old data import sessions') + + before = InvenTree.helpers.current_date() - timedelta(days=CLEANUP_DAYS) + + sessions = importer.models.DataImportSession.objects.filter(timestamp__lte=before) + + if sessions.count() > 0: + logger.info('Deleting %s old data import sessions', sessions.count()) + sessions.delete() + + InvenTree.tasks.record_task_success('cleanup_import_sessions') diff --git a/src/backend/InvenTree/importer/test_data/companies.csv b/src/backend/InvenTree/importer/test_data/companies.csv new file mode 100644 index 0000000000..8e5468b25b --- /dev/null +++ b/src/backend/InvenTree/importer/test_data/companies.csv @@ -0,0 +1,13 @@ +ID,Company name,Company description,Website,Phone number,Address,Email,Currency,Contact,Link,Image,Active,Is customer,Is manufacturer,Is supplier,Notes,Parts supplied,Parts manufactured,Address count +3,Arrow,Arrow Electronics,https://www.arrow.com/,,"70680 Shannon Rapid Apt. 570, 96124, Jenniferport, Arkansas, Holy See (Vatican City State)",,AUD,,,/media/company_images/company_3_img.jpg,True,False,False,True,,60,0,2 +1,DigiKey,DigiKey Electronics,https://www.digikey.com/,,"04964 Cox View Suite 815, 94832, Wesleyport, Delaware, Bolivia",,USD,,,/media/company_images/company_1_img.jpg,True,False,False,True,,200,0,2 +41,Future,Electronic components distributor,https://www.futureelectronics.com/,,"Wogan Terrace 79, 20157, Teasdale, Lebanon",,USD,,,/media/company_images/company_41_img.png,True,False,False,True,,60,0,4 +39,LCSC,Electronic components distributor,https://lcsc.com/,,"77673 Bishop Turnpike, 74969, North Cheryl, Hawaii, Portugal",,USD,,,/media/company_images/company_39_img.webp,True,False,False,True,,60,0,2 +38,McMaster-Carr,Supplier of mechanical components,https://www.mcmaster.com/,,"Schroeders Avenue 56, 8014, Sylvanite, Cayman Islands",,USD,,,/media/company_images/company_38_img.png,True,False,False,True,,240,0,1 +2,Mouser,Mouser Electronics,https://mouser.com/,,"Ashford Street 71, 24165, Leland, Jamaica",,AUD,,,/media/company_images/company_2_img.jpg,True,False,False,True,,61,0,2 +40,Newark,Online distributor of electronic components,https://www.newark.com/,,"Dekoven Court 3, 18301, Emison, Tuvalu",,USD,,,/media/company_images/company_40_img.png,True,False,False,True,,60,0,1 +36,Paint by Numbers,Supplier of high quality paint,,,"Orient Avenue 59, 18609, Corinne, Alabama, France, Metropolitan",,EUR,Pippy Painter,,/media/company_images/company_36_img.jpg,True,False,False,True,,15,0,1 +43,PCBWOY,PCB fabricator / supplier,,,"McKibben Street 77, 12370, Russellville, Benin",,USD,,,/media/company_images/company_43_img.png,True,False,False,True,,1,0,2 +29,Texas Instruments,,https://www.ti.com/,,"264 David Villages, 97718, Lake Michael, New Mexico, Kenya",,USD,,,/media/company_images/company_29_img.jpg,True,False,True,True,,0,1,2 +44,Wire-E-Coyote,American wire supplier,,,"Fountain Avenue 74, 12115, Gulf, Seychelles",,USD,,,,True,False,False,True,,5,0,3 +42,Wirey,Supplier of wire,,,"Preston Court 80, 4462, Manila, Russian Federation",,USD,,,/media/company_images/company_42_img.jpg,True,False,False,True,,11,0,2 diff --git a/src/backend/InvenTree/importer/tests.py b/src/backend/InvenTree/importer/tests.py new file mode 100644 index 0000000000..179d36dad9 --- /dev/null +++ b/src/backend/InvenTree/importer/tests.py @@ -0,0 +1,64 @@ +"""Unit tests for the 'importer' app.""" + +import os + +from django.core.files.base import ContentFile + +from importer.models import DataImportSession +from InvenTree.unit_test import InvenTreeTestCase + + +class ImporterTest(InvenTreeTestCase): + """Basic tests for file imports.""" + + def test_import_session(self): + """Test creation of a data import session.""" + from company.models import Company + + n = Company.objects.count() + + fn = os.path.join(os.path.dirname(__file__), 'test_data', 'companies.csv') + + with open(fn, 'r') as input_file: + data = input_file.read() + + session = DataImportSession.objects.create( + data_file=ContentFile(data, 'companies.csv'), model_type='company' + ) + + session.extract_columns() + + self.assertEqual(session.column_mappings.count(), 14) + + # Check some of the field mappings + for field, col in [ + ('website', 'Website'), + ('is_customer', 'Is customer'), + ('phone', 'Phone number'), + ('description', 'Company description'), + ('active', 'Active'), + ]: + self.assertTrue( + session.column_mappings.filter(field=field, column=col).exists() + ) + + # Run the data import + session.import_data() + self.assertEqual(session.rows.count(), 12) + + # Check that some data has been imported + for row in session.rows.all(): + self.assertIsNotNone(row.data.get('name', None)) + self.assertTrue(row.valid) + + row.validate(commit=True) + self.assertTrue(row.complete) + + self.assertEqual(session.completed_row_count, 12) + + # Check that the new companies have been created + self.assertEqual(n + 12, Company.objects.count()) + + def test_field_defaults(self): + """Test default field values.""" + ... diff --git a/src/backend/InvenTree/importer/validators.py b/src/backend/InvenTree/importer/validators.py new file mode 100644 index 0000000000..166c30acc6 --- /dev/null +++ b/src/backend/InvenTree/importer/validators.py @@ -0,0 +1,53 @@ +"""Custom validation routines for the 'importer' app.""" + +import json + +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +# Define maximum limits for imported file data +IMPORTER_MAX_FILE_SIZE = 32 * 1024 * 1042 +IMPORTER_MAX_ROWS = 5000 +IMPORTER_MAX_COLS = 1000 + + +def validate_data_file(data_file): + """Validate the provided data file.""" + import importer.operations + + filesize = data_file.size + + if filesize > IMPORTER_MAX_FILE_SIZE: + raise ValidationError(_('Data file exceeds maximum size limit')) + + dataset = importer.operations.load_data_file(data_file) + + if not dataset.headers or len(dataset.headers) == 0: + raise ValidationError(_('Data file contains no headers')) + + if len(dataset.headers) > IMPORTER_MAX_COLS: + raise ValidationError(_('Data file contains too many columns')) + + if len(dataset) > IMPORTER_MAX_ROWS: + raise ValidationError(_('Data file contains too many rows')) + + +def validate_importer_model_type(value): + """Validate that the given model type is supported for importing.""" + from importer.registry import supported_models + + if value not in supported_models().keys(): + raise ValidationError(f"Unsupported model type '{value}'") + + +def validate_field_defaults(value): + """Validate that the provided value is a valid dict.""" + if value is None: + return + + if type(value) is not dict: + # OK if we can parse it as JSON + try: + value = json.loads(value) + except json.JSONDecodeError: + raise ValidationError(_('Value must be a valid dictionary object')) diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 0000000000..3848bac6cd --- /dev/null +++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,15186 @@ +msgid "" +msgstr "" +"Project-Id-Version: inventree\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:48\n" +"Last-Translator: \n" +"Language-Team: Arabic\n" +"Language: ar_SA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Crowdin-Project: inventree\n" +"X-Crowdin-Project-ID: 452300\n" +"X-Crowdin-Language: ar\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 "نقطة نهاية API غير موجودة" + +#: InvenTree/api.py:505 +msgid "User does not have permission to view this model" +msgstr "المستخدم ليس لديه الصلاحية لعرض هذا النموذج" + +#: InvenTree/conversion.py:160 +#, python-brace-format +msgid "Invalid unit provided ({unit})" +msgstr "الوحدة المقدمة غير صالحة ({unit})" + +#: InvenTree/conversion.py:177 +msgid "No value provided" +msgstr "لم يتم تقديم قيمة" + +#: InvenTree/conversion.py:204 +#, python-brace-format +msgid "Could not convert {original} to {unit}" +msgstr "تعذّر تحويل {original} إلى {unit}" + +#: InvenTree/conversion.py:206 +msgid "Invalid quantity supplied" +msgstr "الكمية المقدمة غير صحيحة" + +#: InvenTree/conversion.py:220 +#, python-brace-format +msgid "Invalid quantity supplied ({exc})" +msgstr "الكمية المقدمة غير صحيحة ({exc})" + +#: InvenTree/exceptions.py:109 +msgid "Error details can be found in the admin panel" +msgstr "يمكن العثور على تفاصيل الخطأ في لوحة التحكم" + +#: InvenTree/fields.py:136 +msgid "Enter date" +msgstr "أدخل التاريخ" + +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3290 part/templates/part/part_sidebar.html:65 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +msgid "Notes" +msgstr "ملاحظات" + +#: InvenTree/format.py:164 +#, python-brace-format +msgid "Value '{name}' does not appear in pattern format" +msgstr "القيمة '{name}' لا تظهر في تنسيق النمط" + +#: InvenTree/format.py:175 +msgid "Provided value does not match required pattern: " +msgstr "القيمة المقدمة لا تتطابق مع النمط المطلوب: " + +#: InvenTree/forms.py:129 +msgid "Enter password" +msgstr "أدخل كلمة المرور" + +#: InvenTree/forms.py:130 +msgid "Enter new password" +msgstr "أدخل كلمة مرور جديدة" + +#: InvenTree/forms.py:139 +msgid "Confirm password" +msgstr "تأكيد كلمة المرور" + +#: InvenTree/forms.py:140 +msgid "Confirm new password" +msgstr "تأكيد كلمة المرور الجديدة" + +#: InvenTree/forms.py:144 +msgid "Old password" +msgstr "كلمة المرور القديمة" + +#: InvenTree/forms.py:183 +msgid "Email (again)" +msgstr "البريد الإلكتروني (مرة أخرى)" + +#: InvenTree/forms.py:187 +msgid "Email address confirmation" +msgstr "تأكيد البريد الإلكتروني" + +#: InvenTree/forms.py:210 +msgid "You must type the same email each time." +msgstr "يجب عليك كتابة نفس البريد الإلكتروني كل مرة." + +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 +msgid "The provided primary email address is not valid." +msgstr "عنوان البريد الإلكتروني الرئيسي المقدم غير صالح." + +#: InvenTree/forms.py:274 +msgid "The provided email domain is not approved." +msgstr "لم تتم الموافقة على نطاق البريد الإلكتروني المقدم." + +#: InvenTree/forms.py:403 +msgid "Registration is disabled." +msgstr "التسجيل معطل." + +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 +msgid "Invalid quantity provided" +msgstr "الكمية المقدمة غير صحيحة" + +#: InvenTree/helpers.py:501 +msgid "Empty serial number string" +msgstr "سلسلة الرقم التسلسلي فارغة" + +#: InvenTree/helpers.py:530 +msgid "Duplicate serial" +msgstr "تكرار التسلسل" + +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 +#, python-brace-format +msgid "Invalid group range: {group}" +msgstr "" + +#: InvenTree/helpers.py:593 +#, python-brace-format +msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" +msgstr "" + +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 +#, python-brace-format +msgid "Invalid group sequence: {group}" +msgstr "" + +#: InvenTree/helpers.py:659 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:664 +msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" +msgstr "" + +#: InvenTree/helpers.py:782 +msgid "Remove HTML tags from this value" +msgstr "" + +#: InvenTree/helpers_model.py:137 +msgid "Connection error" +msgstr "" + +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 +msgid "Server responded with invalid status code" +msgstr "" + +#: InvenTree/helpers_model.py:145 +msgid "Exception occurred" +msgstr "" + +#: InvenTree/helpers_model.py:155 +msgid "Server responded with invalid Content-Length value" +msgstr "" + +#: InvenTree/helpers_model.py:158 +msgid "Image size is too large" +msgstr "" + +#: InvenTree/helpers_model.py:170 +msgid "Image download exceeded maximum size" +msgstr "" + +#: InvenTree/helpers_model.py:175 +msgid "Remote server returned empty response" +msgstr "" + +#: InvenTree/helpers_model.py:183 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 +msgid "Bulgarian" +msgstr "" + +#: InvenTree/locales.py:20 +msgid "Czech" +msgstr "" + +#: InvenTree/locales.py:21 +msgid "Danish" +msgstr "" + +#: InvenTree/locales.py:22 +msgid "German" +msgstr "" + +#: InvenTree/locales.py:23 +msgid "Greek" +msgstr "" + +#: InvenTree/locales.py:24 +msgid "English" +msgstr "" + +#: InvenTree/locales.py:25 +msgid "Spanish" +msgstr "" + +#: InvenTree/locales.py:26 +msgid "Spanish (Mexican)" +msgstr "" + +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 +msgid "Farsi / Persian" +msgstr "" + +#: InvenTree/locales.py:29 +msgid "Finnish" +msgstr "" + +#: InvenTree/locales.py:30 +msgid "French" +msgstr "" + +#: InvenTree/locales.py:31 +msgid "Hebrew" +msgstr "" + +#: InvenTree/locales.py:32 +msgid "Hindi" +msgstr "" + +#: InvenTree/locales.py:33 +msgid "Hungarian" +msgstr "" + +#: InvenTree/locales.py:34 +msgid "Italian" +msgstr "" + +#: InvenTree/locales.py:35 +msgid "Japanese" +msgstr "" + +#: InvenTree/locales.py:36 +msgid "Korean" +msgstr "" + +#: InvenTree/locales.py:37 +msgid "Latvian" +msgstr "" + +#: InvenTree/locales.py:38 +msgid "Dutch" +msgstr "" + +#: InvenTree/locales.py:39 +msgid "Norwegian" +msgstr "" + +#: InvenTree/locales.py:40 +msgid "Polish" +msgstr "" + +#: InvenTree/locales.py:41 +msgid "Portuguese" +msgstr "" + +#: InvenTree/locales.py:42 +msgid "Portuguese (Brazilian)" +msgstr "" + +#: InvenTree/locales.py:43 +msgid "Romanian" +msgstr "" + +#: InvenTree/locales.py:44 +msgid "Russian" +msgstr "" + +#: InvenTree/locales.py:45 +msgid "Slovak" +msgstr "" + +#: InvenTree/locales.py:46 +msgid "Slovenian" +msgstr "" + +#: InvenTree/locales.py:47 +msgid "Serbian" +msgstr "" + +#: InvenTree/locales.py:48 +msgid "Swedish" +msgstr "" + +#: InvenTree/locales.py:49 +msgid "Thai" +msgstr "" + +#: InvenTree/locales.py:50 +msgid "Turkish" +msgstr "" + +#: InvenTree/locales.py:51 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 +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 InvenTree/serializers.py:415 +#: company/models.py:136 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:103 +msgid "Error running plugin validation" +msgstr "" + +#: InvenTree/models.py:172 +msgid "Metadata must be a python dict object" +msgstr "" + +#: InvenTree/models.py:178 +msgid "Plugin Metadata" +msgstr "" + +#: InvenTree/models.py:179 +msgid "JSON metadata field, for use by external plugins" +msgstr "" + +#: InvenTree/models.py:409 +msgid "Improperly formatted pattern" +msgstr "" + +#: InvenTree/models.py:416 +msgid "Unknown format key specified" +msgstr "" + +#: InvenTree/models.py:422 +msgid "Missing required format key" +msgstr "" + +#: InvenTree/models.py:433 +msgid "Reference field cannot be empty" +msgstr "" + +#: InvenTree/models.py:441 +msgid "Reference must match required pattern" +msgstr "" + +#: InvenTree/models.py:472 +msgid "Reference number is too large" +msgstr "" + +#: InvenTree/models.py:723 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:740 +msgid "Invalid choice" +msgstr "" + +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 +#: 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:454 +#: 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:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 +#: 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:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 +#: part/templates/part/part_base.html:170 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: 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:459 +#: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 +#: templates/js/translated/build.js:2311 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:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 +#: templates/js/translated/plugin.js:80 +#: templates/js/translated/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 +#: 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:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:777 stock/models.py:84 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 +msgid "Path" +msgstr "" + +#: InvenTree/models.py:929 +msgid "Markdown notes (optional)" +msgstr "" + +#: InvenTree/models.py:960 +msgid "Barcode Data" +msgstr "" + +#: InvenTree/models.py:961 +msgid "Third party barcode data" +msgstr "" + +#: InvenTree/models.py:967 +msgid "Barcode Hash" +msgstr "" + +#: InvenTree/models.py:968 +msgid "Unique hash of barcode data" +msgstr "" + +#: InvenTree/models.py:1035 +msgid "Existing barcode found" +msgstr "" + +#: InvenTree/models.py:1078 +msgid "Server Error" +msgstr "" + +#: InvenTree/models.py:1079 +msgid "An error has been logged by the server." +msgstr "" + +#: InvenTree/serializers.py:63 part/models.py:4380 +msgid "Must be a valid number" +msgstr "" + +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 +#: templates/InvenTree/settings/settings_staff_js.html:44 +#: templates/currency_data.html:5 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:103 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 +msgid "You do not have permission to change this user role." +msgstr "" + +#: InvenTree/serializers.py:475 +msgid "Only superusers can create new users" +msgstr "" + +#: InvenTree/serializers.py:494 +msgid "Your account has been created." +msgstr "" + +#: InvenTree/serializers.py:496 +msgid "Please use the password reset function to login" +msgstr "" + +#: InvenTree/serializers.py:503 +msgid "Welcome to InvenTree" +msgstr "" + +#: InvenTree/serializers.py:561 +msgid "Invalid value" +msgstr "" + +#: InvenTree/serializers.py:581 importer/models.py:63 +msgid "Data File" +msgstr "" + +#: InvenTree/serializers.py:582 +msgid "Select data file for upload" +msgstr "" + +#: InvenTree/serializers.py:599 +msgid "Unsupported file type" +msgstr "" + +#: InvenTree/serializers.py:605 +msgid "File is too large" +msgstr "" + +#: InvenTree/serializers.py:626 +msgid "No columns found in file" +msgstr "" + +#: InvenTree/serializers.py:629 +msgid "No data rows found in file" +msgstr "" + +#: InvenTree/serializers.py:742 +msgid "No data rows provided" +msgstr "" + +#: InvenTree/serializers.py:745 +msgid "No data columns supplied" +msgstr "" + +#: InvenTree/serializers.py:812 +#, python-brace-format +msgid "Missing required column: '{name}'" +msgstr "" + +#: InvenTree/serializers.py:821 +#, python-brace-format +msgid "Duplicate column: '{col}'" +msgstr "" + +#: InvenTree/serializers.py:861 +msgid "Remote Image" +msgstr "" + +#: InvenTree/serializers.py:862 +msgid "URL of remote image file" +msgstr "" + +#: InvenTree/serializers.py:880 +msgid "Downloading images from remote URL is not enabled" +msgstr "" + +#: InvenTree/status.py:66 part/serializers.py:1244 +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:184 +msgid "Unknown database" +msgstr "" + +#: InvenTree/validators.py:32 InvenTree/validators.py:34 +msgid "Invalid physical unit" +msgstr "" + +#: InvenTree/validators.py:40 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:118 InvenTree/validators.py:134 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:136 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:142 +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:247 +msgid "Build must be cancelled before it can be deleted" +msgstr "" + +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:597 +msgid "Consumable" +msgstr "" + +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:601 +msgid "Optional" +msgstr "" + +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 +msgid "Tracked" +msgstr "" + +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 +#: templates/js/translated/sales_order.js:1965 +#: templates/js/translated/table_filters.js:585 +msgid "Allocated" +msgstr "" + +#: build/api.py:303 company/models.py:891 company/serializers.py:395 +#: 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:2752 +#: templates/js/translated/index.js:123 +#: templates/js/translated/model_renderers.js:235 +#: 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:589 +msgid "Available" +msgstr "" + +#: build/models.py:86 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:84 templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +msgid "Build Order" +msgstr "" + +#: build/models.py:87 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:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:174 order/models.py:240 +msgid "Responsible user or group must be specified" +msgstr "" + +#: build/models.py:180 +msgid "Build order part cannot be changed" +msgstr "" + +#: build/models.py:241 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 +#: templates/js/translated/sales_order.js:1854 +msgid "Reference" +msgstr "" + +#: build/models.py:253 +msgid "Brief description of the build (optional)" +msgstr "" + +#: build/models.py:261 build/templates/build/build_base.html:191 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:262 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 +#: 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:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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:577 templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 +#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 templates/js/translated/pricing.js:369 +#: templates/js/translated/purchase_order.js:751 +#: templates/js/translated/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:708 +#: 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:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 +msgid "Part" +msgstr "" + +#: build/models.py:275 +msgid "Select part to build" +msgstr "" + +#: build/models.py:280 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:284 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 +#: templates/js/translated/sales_order.js:1221 +msgid "Source Location" +msgstr "" + +#: build/models.py:293 +msgid "Select location to take stock from for this build (leave blank to take from any stock location)" +msgstr "" + +#: build/models.py:298 +msgid "Destination Location" +msgstr "" + +#: build/models.py:302 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:306 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:309 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:313 +msgid "Completed items" +msgstr "" + +#: build/models.py:315 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:319 +msgid "Build Status" +msgstr "" + +#: build/models.py:323 +msgid "Build status code" +msgstr "" + +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 +msgid "Batch Code" +msgstr "" + +#: build/models.py:336 build/serializers.py:298 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 +msgid "Creation Date" +msgstr "" + +#: build/models.py:343 +msgid "Target completion date" +msgstr "" + +#: build/models.py:344 +msgid "Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 +msgid "Completion Date" +msgstr "" + +#: build/models.py:353 +msgid "completed by" +msgstr "" + +#: build/models.py:361 templates/js/translated/build.js:2379 +msgid "Issued by" +msgstr "" + +#: build/models.py:362 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 +#: report/templates/report/inventree_build_order_report.html:158 +#: templates/InvenTree/settings/settings_staff_js.html:150 +#: templates/js/translated/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 +#: templates/js/translated/return_order.js:358 +#: templates/js/translated/table_filters.js:545 +msgid "Responsible" +msgstr "" + +#: build/models.py:371 +msgid "User or group responsible for this build order" +msgstr "" + +#: build/models.py:376 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:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 +#: stock/templates/stock/item_base.html:200 +#: templates/js/translated/company.js:1019 +msgid "External Link" +msgstr "" + +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 +msgid "Build Priority" +msgstr "" + +#: build/models.py:384 +msgid "Priority of this build order" +msgstr "" + +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 +#: 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:392 +msgid "Project code for this build order" +msgstr "" + +#: build/models.py:639 build/models.py:766 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:661 +#, python-brace-format +msgid "Build order {build} has been completed" +msgstr "" + +#: build/models.py:667 +msgid "A build order has been completed" +msgstr "" + +#: build/models.py:955 build/models.py:1040 +msgid "No build output specified" +msgstr "" + +#: build/models.py:958 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:961 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +msgid "Quantity must be greater than zero" +msgstr "" + +#: build/models.py:1049 build/serializers.py:235 +msgid "Quantity cannot be greater than the output quantity" +msgstr "" + +#: build/models.py:1109 build/serializers.py:558 +#, python-brace-format +msgid "Build output {serial} has not passed all required tests" +msgstr "" + +#: build/models.py:1450 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1475 +msgid "Build object" +msgstr "" + +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 +#: 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:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: 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:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/company.js:1818 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 +#: 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:1922 +#: templates/js/translated/purchase_order.js:2141 +#: 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:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 +msgid "Quantity" +msgstr "" + +#: build/models.py:1490 +msgid "Required quantity for build order" +msgstr "" + +#: build/models.py:1570 +msgid "Build item must specify a build output, as master part is marked as trackable" +msgstr "" + +#: build/models.py:1579 +#, python-brace-format +msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" +msgstr "" + +#: build/models.py:1589 order/models.py:1992 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/models.py:1595 order/models.py:1995 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1601 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1660 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 +#: 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:1918 +#: 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:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1733 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1746 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1754 +msgid "Install into" +msgstr "" + +#: build/models.py:1755 +msgid "Destination stock item" +msgstr "" + +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +msgid "Build Output" +msgstr "" + +#: build/serializers.py:179 +msgid "Build output does not match the parent build" +msgstr "" + +#: build/serializers.py:183 +msgid "Output part does not match BuildOrder part" +msgstr "" + +#: build/serializers.py:187 +msgid "This build output has already been completed" +msgstr "" + +#: build/serializers.py:198 +msgid "This build output is not fully allocated" +msgstr "" + +#: build/serializers.py:218 build/serializers.py:265 +msgid "Enter quantity for build output" +msgstr "" + +#: build/serializers.py:286 +msgid "Integer quantity required for trackable parts" +msgstr "" + +#: build/serializers.py:289 +msgid "Integer quantity required, as the bill of materials contains trackable parts" +msgstr "" + +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +msgid "Serial Numbers" +msgstr "" + +#: build/serializers.py:305 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 +#: 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:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 +msgid "Location" +msgstr "" + +#: build/serializers.py:311 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:325 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:326 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:341 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:366 stock/api.py:1033 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:452 +msgid "Stock location for scrapped outputs" +msgstr "" + +#: build/serializers.py:458 +msgid "Discard Allocations" +msgstr "" + +#: build/serializers.py:459 +msgid "Discard any stock allocations for scrapped outputs" +msgstr "" + +#: build/serializers.py:464 +msgid "Reason for scrapping build output(s)" +msgstr "" + +#: build/serializers.py:524 +msgid "Location for completed build outputs" +msgstr "" + +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 +msgid "Status" +msgstr "" + +#: build/serializers.py:536 +msgid "Accept Incomplete Allocation" +msgstr "" + +#: build/serializers.py:537 +msgid "Complete outputs if stock has not been fully allocated" +msgstr "" + +#: build/serializers.py:649 +msgid "Consume Allocated Stock" +msgstr "" + +#: build/serializers.py:650 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" + +#: build/serializers.py:656 +msgid "Remove Incomplete Outputs" +msgstr "" + +#: build/serializers.py:657 +msgid "Delete any build outputs which have not been completed" +msgstr "" + +#: build/serializers.py:684 +msgid "Not permitted" +msgstr "" + +#: build/serializers.py:685 +msgid "Accept as consumed by this build order" +msgstr "" + +#: build/serializers.py:686 +msgid "Deallocate before completing this build order" +msgstr "" + +#: build/serializers.py:716 +msgid "Overallocated Stock" +msgstr "" + +#: build/serializers.py:718 +msgid "How do you want to handle extra stock items assigned to the build order" +msgstr "" + +#: build/serializers.py:728 +msgid "Some stock items have been overallocated" +msgstr "" + +#: build/serializers.py:733 +msgid "Accept Unallocated" +msgstr "" + +#: build/serializers.py:734 +msgid "Accept that stock items have not been fully allocated to this build order" +msgstr "" + +#: build/serializers.py:744 templates/js/translated/build.js:316 +msgid "Required stock has not been fully allocated" +msgstr "" + +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 +msgid "Accept Incomplete" +msgstr "" + +#: build/serializers.py:750 +msgid "Accept that the required number of build outputs have not been completed" +msgstr "" + +#: build/serializers.py:760 templates/js/translated/build.js:320 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 +msgid "Build order has incomplete outputs" +msgstr "" + +#: build/serializers.py:810 +msgid "Build Line" +msgstr "" + +#: build/serializers.py:820 +msgid "Build output" +msgstr "" + +#: build/serializers.py:828 +msgid "Build output must point to the same build" +msgstr "" + +#: build/serializers.py:864 +msgid "Build Line Item" +msgstr "" + +#: build/serializers.py:878 +msgid "bom_item.part must point to the same part as the build order" +msgstr "" + +#: build/serializers.py:893 stock/serializers.py:1294 +msgid "Item must be in stock" +msgstr "" + +#: build/serializers.py:941 order/serializers.py:1346 +#, python-brace-format +msgid "Available quantity ({q}) exceeded" +msgstr "" + +#: build/serializers.py:947 +msgid "Build output must be specified for allocation of tracked parts" +msgstr "" + +#: build/serializers.py:954 +msgid "Build output cannot be specified for allocation of untracked parts" +msgstr "" + +#: build/serializers.py:978 order/serializers.py:1605 +msgid "Allocation items must be provided" +msgstr "" + +#: build/serializers.py:1041 +msgid "Stock location where parts are to be sourced (leave blank to take from any location)" +msgstr "" + +#: build/serializers.py:1049 +msgid "Exclude Location" +msgstr "" + +#: build/serializers.py:1050 +msgid "Exclude stock items from this selected location" +msgstr "" + +#: build/serializers.py:1055 +msgid "Interchangeable Stock" +msgstr "" + +#: build/serializers.py:1056 +msgid "Stock items in multiple locations can be used interchangeably" +msgstr "" + +#: build/serializers.py:1061 +msgid "Substitute Stock" +msgstr "" + +#: build/serializers.py:1062 +msgid "Allow allocation of substitute parts" +msgstr "" + +#: build/serializers.py:1067 +msgid "Optional Items" +msgstr "" + +#: build/serializers.py:1068 +msgid "Allocate optional BOM items to build order" +msgstr "" + +#: build/serializers.py:1090 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 +msgid "BOM Item" +msgstr "" + +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +msgid "Allocated Stock" +msgstr "" + +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 +#: templates/js/translated/table_filters.js:170 +msgid "On Order" +msgstr "" + +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 +#: templates/js/translated/table_filters.js:360 +msgid "In Production" +msgstr "" + +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 +#: part/templates/part/part_base.html:192 +#: templates/js/translated/sales_order.js:1929 +msgid "Available Stock" +msgstr "" + +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External Stock" +msgstr "" + +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 +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:52 +#: templates/js/translated/filters.js:338 +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:54 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:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 +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:58 +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 "Duplicate Build" +msgstr "" + +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + +#: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 +msgid "Delete Build" +msgstr "" + +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:115 +msgid "Build Description" +msgstr "" + +#: build/templates/build/build_base.html:125 +msgid "No build outputs have been created for this build order" +msgstr "" + +#: build/templates/build/build_base.html:132 +msgid "Build Order is ready to mark as completed" +msgstr "" + +#: build/templates/build/build_base.html:137 +msgid "Build Order cannot be completed as outstanding outputs remain" +msgstr "" + +#: build/templates/build/build_base.html:142 +msgid "Required build quantity has not yet been completed" +msgstr "" + +#: build/templates/build/build_base.html:147 +msgid "Stock has not been fully allocated to this Build Order" +msgstr "" + +#: build/templates/build/build_base.html:168 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:749 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 +msgid "Target Date" +msgstr "" + +#: build/templates/build/build_base.html:173 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 +msgid "Completed Outputs" +msgstr "" + +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: 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:3008 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:205 +#: 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:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +msgid "Priority" +msgstr "" + +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Delete Build Order" +msgstr "" + +#: build/templates/build/build_base.html:312 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:324 +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:1532 +#: templates/js/translated/purchase_order.js:2259 +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:162 +#: stock/templates/stock/item_base.html:162 +#: templates/js/translated/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 +#: 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:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 +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:209 +#: templates/js/translated/table_filters.js:703 +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:21 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/detail.html:177 +msgid "Build Order Line Items" +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 +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:249 build/templates/build/sidebar.html:19 +msgid "Consumed Stock" +msgstr "" + +#: build/templates/build/detail.html:261 +msgid "Completed Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: 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:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" +msgstr "" + +#: build/templates/build/detail.html:303 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/detail.html:457 +msgid "Allocation Complete" +msgstr "" + +#: build/templates/build/detail.html:458 +msgid "All lines have been fully allocated" +msgstr "" + +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + +#: build/templates/build/sidebar.html:10 +msgid "Incomplete Outputs" +msgstr "" + +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + +#: common/currency.py:132 +msgid "Invalid currency code" +msgstr "" + +#: common/currency.py:134 +msgid "Duplicate currency code" +msgstr "" + +#: common/currency.py:139 +msgid "No valid currency codes provided" +msgstr "" + +#: common/currency.py:156 +msgid "No plugin" +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:86 +msgid "Updated" +msgstr "" + +#: common/models.py:87 +msgid "Timestamp of last update" +msgstr "" + +#: common/models.py:120 +msgid "Site URL is locked by configuration" +msgstr "" + +#: common/models.py:150 +msgid "Unique project code" +msgstr "" + +#: common/models.py:157 +msgid "Project description" +msgstr "" + +#: common/models.py:166 +msgid "User or group responsible for this project" +msgstr "" + +#: common/models.py:783 +msgid "Settings key (must be unique - case insensitive)" +msgstr "" + +#: common/models.py:787 +msgid "Settings value" +msgstr "" + +#: common/models.py:839 +msgid "Chosen value is not a valid option" +msgstr "" + +#: common/models.py:855 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:863 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:900 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:1132 +msgid "No group" +msgstr "" + +#: common/models.py:1231 +msgid "Restart required" +msgstr "" + +#: common/models.py:1233 +msgid "A setting has been changed which requires a server restart" +msgstr "" + +#: common/models.py:1240 +msgid "Pending migrations" +msgstr "" + +#: common/models.py:1241 +msgid "Number of pending database migrations" +msgstr "" + +#: common/models.py:1246 +msgid "Server Instance Name" +msgstr "" + +#: common/models.py:1248 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:1252 +msgid "Use instance name" +msgstr "" + +#: common/models.py:1253 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:1258 +msgid "Restrict showing `about`" +msgstr "" + +#: common/models.py:1259 +msgid "Show the `about` modal only to superusers" +msgstr "" + +#: common/models.py:1264 company/models.py:111 company/models.py:112 +msgid "Company name" +msgstr "" + +#: common/models.py:1265 +msgid "Internal company name" +msgstr "" + +#: common/models.py:1269 +msgid "Base URL" +msgstr "" + +#: common/models.py:1270 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:1276 +msgid "Default Currency" +msgstr "" + +#: common/models.py:1277 +msgid "Select base currency for pricing calculations" +msgstr "" + +#: common/models.py:1283 +msgid "Supported Currencies" +msgstr "" + +#: common/models.py:1284 +msgid "List of supported currency codes" +msgstr "" + +#: common/models.py:1290 +msgid "Currency Update Interval" +msgstr "" + +#: common/models.py:1292 +msgid "How often to update exchange rates (set to zero to disable)" +msgstr "" + +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 +msgid "days" +msgstr "" + +#: common/models.py:1299 +msgid "Currency Update Plugin" +msgstr "" + +#: common/models.py:1300 +msgid "Currency update plugin to use" +msgstr "" + +#: common/models.py:1305 +msgid "Download from URL" +msgstr "" + +#: common/models.py:1307 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:1313 +msgid "Download Size Limit" +msgstr "" + +#: common/models.py:1314 +msgid "Maximum allowable download size for remote image" +msgstr "" + +#: common/models.py:1320 +msgid "User-agent used to download from URL" +msgstr "" + +#: common/models.py:1322 +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:1327 +msgid "Strict URL Validation" +msgstr "" + +#: common/models.py:1328 +msgid "Require schema specification when validating URLs" +msgstr "" + +#: common/models.py:1333 +msgid "Require confirm" +msgstr "" + +#: common/models.py:1334 +msgid "Require explicit user confirmation for certain action." +msgstr "" + +#: common/models.py:1339 +msgid "Tree Depth" +msgstr "" + +#: common/models.py:1341 +msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." +msgstr "" + +#: common/models.py:1347 +msgid "Update Check Interval" +msgstr "" + +#: common/models.py:1348 +msgid "How often to check for updates (set to zero to disable)" +msgstr "" + +#: common/models.py:1354 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1355 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1360 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1361 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1367 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1369 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1376 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1378 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1385 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1387 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1395 +msgid "Enable barcode scanner support in the web interface" +msgstr "" + +#: common/models.py:1400 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1401 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1407 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1408 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1426 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1438 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1443 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1444 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1447 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1448 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1453 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1454 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1459 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1460 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1465 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1466 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1471 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1472 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1477 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1478 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:786 +msgid "Template" +msgstr "" + +#: common/models.py:1484 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:740 +msgid "Assembly" +msgstr "" + +#: common/models.py:1490 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 +msgid "Component" +msgstr "" + +#: common/models.py:1496 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1502 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 +msgid "Salable" +msgstr "" + +#: common/models.py:1508 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1514 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 +#: part/templates/part/part_base.html:154 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:794 +msgid "Virtual" +msgstr "" + +#: common/models.py:1520 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1525 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1526 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1531 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1532 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1537 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1538 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1543 templates/js/translated/part.js:108 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1545 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1551 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1552 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1558 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1559 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1564 +msgid "Enforce Parameter Units" +msgstr "" + +#: common/models.py:1566 +msgid "If units are provided, parameter values must match the specified units" +msgstr "" + +#: common/models.py:1572 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1574 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1585 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1587 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1598 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1600 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1606 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1608 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1614 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1616 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1622 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1624 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1631 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1632 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1637 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1639 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1645 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1647 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1654 +msgid "Internal Prices" +msgstr "" + +#: common/models.py:1655 +msgid "Enable internal prices for parts" +msgstr "" + +#: common/models.py:1660 +msgid "Internal Price Override" +msgstr "" + +#: common/models.py:1662 +msgid "If available, internal prices override price range calculations" +msgstr "" + +#: common/models.py:1668 +msgid "Enable label printing" +msgstr "" + +#: common/models.py:1669 +msgid "Enable label printing from the web interface" +msgstr "" + +#: common/models.py:1674 +msgid "Label Image DPI" +msgstr "" + +#: common/models.py:1676 +msgid "DPI resolution when generating image files to supply to label printing plugins" +msgstr "" + +#: common/models.py:1682 +msgid "Enable Reports" +msgstr "" + +#: common/models.py:1683 +msgid "Enable generation of reports" +msgstr "" + +#: common/models.py:1688 templates/stats.html:25 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:1689 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:1694 +msgid "Log Report Errors" +msgstr "" + +#: common/models.py:1695 +msgid "Log errors which occur when generating reports" +msgstr "" + +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 +msgid "Page Size" +msgstr "" + +#: common/models.py:1701 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:1706 +msgid "Enable Test Reports" +msgstr "" + +#: common/models.py:1707 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:1712 +msgid "Attach Test Reports" +msgstr "" + +#: common/models.py:1714 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +msgstr "" + +#: common/models.py:1720 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1721 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1726 +msgid "Autofill Serial Numbers" +msgstr "" + +#: common/models.py:1727 +msgid "Autofill serial numbers in forms" +msgstr "" + +#: common/models.py:1732 +msgid "Delete Depleted Stock" +msgstr "" + +#: common/models.py:1734 +msgid "Determines default behavior when a stock item is depleted" +msgstr "" + +#: common/models.py:1740 +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1742 +msgid "Template for generating default batch codes for stock items" +msgstr "" + +#: common/models.py:1747 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:1748 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:1753 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:1754 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:1759 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:1761 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:1768 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:1769 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:1774 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:1775 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:1780 +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1781 +msgid "Stock location default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1786 +msgid "Show Installed Stock Items" +msgstr "" + +#: common/models.py:1787 +msgid "Display installed stock items in stock tables" +msgstr "" + +#: common/models.py:1792 +msgid "Check BOM when installing items" +msgstr "" + +#: common/models.py:1794 +msgid "Installed stock items must exist in the BOM for the parent part" +msgstr "" + +#: common/models.py:1800 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1802 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1808 +msgid "Build Order Reference Pattern" +msgstr "" + +#: common/models.py:1810 +msgid "Required pattern for generating Build Order reference field" +msgstr "" + +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 +msgid "Require Responsible Owner" +msgstr "" + +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 +msgid "A responsible owner must be assigned to each order" +msgstr "" + +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 +msgid "Block Until Tests Pass" +msgstr "" + +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" +msgstr "" + +#: common/models.py:1850 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1856 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1870 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" +msgstr "" + +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1892 +msgid "Sales Order Default Shipment" +msgstr "" + +#: common/models.py:1893 +msgid "Enable creation of default shipment with sales orders" +msgstr "" + +#: common/models.py:1898 +msgid "Edit Completed Sales Orders" +msgstr "" + +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1906 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" +msgstr "" + +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" +msgstr "" + +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" +msgstr "" + +#: common/models.py:1938 +msgid "Automatically mark purchase orders as complete when all line items are received" +msgstr "" + +#: common/models.py:1945 +msgid "Enable password forgot" +msgstr "" + +#: common/models.py:1946 +msgid "Enable password forgot function on the login pages" +msgstr "" + +#: common/models.py:1951 +msgid "Enable registration" +msgstr "" + +#: common/models.py:1952 +msgid "Enable self-registration for users on the login pages" +msgstr "" + +#: common/models.py:1957 +msgid "Enable SSO" +msgstr "" + +#: common/models.py:1958 +msgid "Enable SSO on the login pages" +msgstr "" + +#: common/models.py:1963 +msgid "Enable SSO registration" +msgstr "" + +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" +msgstr "" + +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 +msgid "Email required" +msgstr "" + +#: common/models.py:2004 +msgid "Require user to supply mail on signup" +msgstr "" + +#: common/models.py:2009 +msgid "Auto-fill SSO users" +msgstr "" + +#: common/models.py:2011 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "" + +#: common/models.py:2017 +msgid "Mail twice" +msgstr "" + +#: common/models.py:2018 +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" +msgstr "" + +#: common/models.py:2024 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:2029 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "" + +#: common/models.py:2037 +msgid "Group on signup" +msgstr "" + +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" + +#: common/models.py:2045 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:2046 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:2051 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:2061 +msgid "Check for plugin updates" +msgstr "" + +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" +msgstr "" + +#: common/models.py:2111 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" + +#: common/models.py:2117 +msgid "Exclude External Locations" +msgstr "" + +#: common/models.py:2119 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" + +#: common/models.py:2125 +msgid "Automatic Stocktake Period" +msgstr "" + +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" + +#: common/models.py:2133 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:2142 +msgid "Display Users full names" +msgstr "" + +#: common/models.py:2143 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/models.py:2148 +msgid "Enable Test Station Data" +msgstr "" + +#: common/models.py:2149 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:2204 +msgid "Hide inactive parts" +msgstr "" + +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" +msgstr "" + +#: common/models.py:2212 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:2218 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:2224 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:2225 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:2230 +msgid "Show invalid BOMs" +msgstr "" + +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:2237 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" +msgstr "" + +#: common/models.py:2243 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:2248 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" +msgstr "" + +#: common/models.py:2254 +msgid "Show needed stock" +msgstr "" + +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" +msgstr "" + +#: common/models.py:2260 +msgid "Show expired stock" +msgstr "" + +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" +msgstr "" + +#: common/models.py:2266 +msgid "Show stale stock" +msgstr "" + +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" +msgstr "" + +#: common/models.py:2272 +msgid "Show pending builds" +msgstr "" + +#: common/models.py:2273 +msgid "Show pending builds on the homepage" +msgstr "" + +#: common/models.py:2278 +msgid "Show overdue builds" +msgstr "" + +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" +msgstr "" + +#: common/models.py:2284 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:2290 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" +msgstr "" + +#: common/models.py:2296 +msgid "Show outstanding SOs" +msgstr "" + +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" +msgstr "" + +#: common/models.py:2302 +msgid "Show overdue SOs" +msgstr "" + +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" +msgstr "" + +#: common/models.py:2308 +msgid "Show pending SO shipments" +msgstr "" + +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" +msgstr "" + +#: common/models.py:2314 +msgid "Show News" +msgstr "" + +#: common/models.py:2315 +msgid "Show news on the homepage" +msgstr "" + +#: common/models.py:2320 +msgid "Inline label display" +msgstr "" + +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" +msgstr "" + +#: common/models.py:2328 +msgid "Default label printer" +msgstr "" + +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:2336 +msgid "Inline report display" +msgstr "" + +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" +msgstr "" + +#: common/models.py:2344 +msgid "Search Parts" +msgstr "" + +#: common/models.py:2345 +msgid "Display parts in search preview window" +msgstr "" + +#: common/models.py:2350 +msgid "Search Supplier Parts" +msgstr "" + +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" +msgstr "" + +#: common/models.py:2357 +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" +msgstr "" + +#: common/models.py:2363 +msgid "Excluded inactive parts from search preview window" +msgstr "" + +#: common/models.py:2368 +msgid "Search Categories" +msgstr "" + +#: common/models.py:2369 +msgid "Display part categories in search preview window" +msgstr "" + +#: common/models.py:2374 +msgid "Search Stock" +msgstr "" + +#: common/models.py:2375 +msgid "Display stock items in search preview window" +msgstr "" + +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" +msgstr "" + +#: common/models.py:2382 +msgid "Exclude stock items which are not available from the search preview window" +msgstr "" + +#: common/models.py:2388 +msgid "Search Locations" +msgstr "" + +#: common/models.py:2389 +msgid "Display stock locations in search preview window" +msgstr "" + +#: common/models.py:2394 +msgid "Search Companies" +msgstr "" + +#: common/models.py:2395 +msgid "Display companies in search preview window" +msgstr "" + +#: common/models.py:2400 +msgid "Search Build Orders" +msgstr "" + +#: common/models.py:2401 +msgid "Display build orders in search preview window" +msgstr "" + +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" +msgstr "" + +#: common/models.py:2421 +msgid "Display sales orders in search preview window" +msgstr "" + +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" +msgstr "" + +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" +msgstr "" + +#: common/models.py:2434 +msgid "Search Return Orders" +msgstr "" + +#: common/models.py:2435 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:2448 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:2456 +msgid "Regex Search" +msgstr "" + +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 +msgid "Receive error reports" +msgstr "" + +#: common/models.py:2523 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/models.py:2528 +msgid "Last used printing machines" +msgstr "" + +#: common/models.py:2529 +msgid "Save the last used printing machines for a user" +msgstr "" + +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 +#: templates/js/translated/pricing.js:621 +#: templates/js/translated/return_order.js:739 +msgid "Price" +msgstr "" + +#: common/models.py:2580 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:2684 common/models.py:2869 +msgid "Endpoint" +msgstr "" + +#: common/models.py:2685 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:2695 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:2699 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:2715 users/models.py:159 +msgid "Token" +msgstr "" + +#: common/models.py:2716 +msgid "Token for access" +msgstr "" + +#: common/models.py:2724 +msgid "Secret" +msgstr "" + +#: common/models.py:2725 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:2833 +msgid "Message ID" +msgstr "" + +#: common/models.py:2834 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:2842 +msgid "Host" +msgstr "" + +#: common/models.py:2843 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:2851 +msgid "Header" +msgstr "" + +#: common/models.py:2852 +msgid "Header of this message" +msgstr "" + +#: common/models.py:2859 +msgid "Body" +msgstr "" + +#: common/models.py:2860 +msgid "Body of this message" +msgstr "" + +#: common/models.py:2870 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:2875 +msgid "Worked on" +msgstr "" + +#: common/models.py:2876 +msgid "Was the work on this message finished?" +msgstr "" + +#: common/models.py:3002 +msgid "Id" +msgstr "" + +#: common/models.py:3004 templates/js/translated/company.js:965 +#: templates/js/translated/news.js:44 +msgid "Title" +msgstr "" + +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 +msgid "Published" +msgstr "" + +#: common/models.py:3010 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:3012 templates/js/translated/news.js:52 +msgid "Summary" +msgstr "" + +#: common/models.py:3015 +msgid "Read" +msgstr "" + +#: common/models.py:3015 +msgid "Was this news item read?" +msgstr "" + +#: common/models.py:3032 company/models.py:159 part/models.py:1066 +#: 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:3032 +msgid "Image file" +msgstr "" + +#: common/models.py:3044 common/models.py:3248 +msgid "Target model type for this image" +msgstr "" + +#: common/models.py:3048 +msgid "Target model ID for this image" +msgstr "" + +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 +msgid "Unit name must be a valid identifier" +msgstr "" + +#: common/models.py:3125 +msgid "Unit name" +msgstr "" + +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 +msgid "Symbol" +msgstr "" + +#: common/models.py:3133 +msgid "Optional unit symbol" +msgstr "" + +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 +msgid "Definition" +msgstr "" + +#: common/models.py:3140 +msgid "Unit definition" +msgstr "" + +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +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:460 +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:375 +msgid "Is Running" +msgstr "" + +#: common/serializers.py:381 +msgid "Pending Tasks" +msgstr "" + +#: common/serializers.py:387 +msgid "Scheduled Tasks" +msgstr "" + +#: common/serializers.py:393 +msgid "Failed Tasks" +msgstr "" + +#: common/serializers.py:408 +msgid "Task ID" +msgstr "" + +#: common/serializers.py:408 +msgid "Unique task ID" +msgstr "" + +#: common/serializers.py:410 +msgid "Lock" +msgstr "" + +#: common/serializers.py:410 +msgid "Lock time" +msgstr "" + +#: common/serializers.py:412 +msgid "Task name" +msgstr "" + +#: common/serializers.py:414 +msgid "Function" +msgstr "" + +#: common/serializers.py:414 +msgid "Function name" +msgstr "" + +#: common/serializers.py:416 +msgid "Arguments" +msgstr "" + +#: common/serializers.py:416 +msgid "Task arguments" +msgstr "" + +#: common/serializers.py:419 +msgid "Keyword Arguments" +msgstr "" + +#: common/serializers.py:419 +msgid "Task keyword arguments" +msgstr "" + +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 +msgid "Minimum places cannot be greater than maximum places" +msgstr "" + +#: common/validators.py:94 +msgid "Maximum places cannot be less than minimum places" +msgstr "" + +#: common/validators.py:105 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/validators.py:107 +#, python-brace-format +msgid "Invalid domain name: {domain}" +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:141 +msgid "Part is Active" +msgstr "" + +#: company/api.py:145 +msgid "Manufacturer is Active" +msgstr "" + +#: company/api.py:278 +msgid "Supplier Part is Active" +msgstr "" + +#: company/api.py:282 +msgid "Internal Part is Active" +msgstr "" + +#: company/api.py:286 +msgid "Supplier is Active" +msgstr "" + +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 +msgid "Company description" +msgstr "" + +#: company/models.py:118 +msgid "Description of the company" +msgstr "" + +#: company/models.py:123 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:123 +msgid "Company website URL" +msgstr "" + +#: company/models.py:128 +msgid "Phone number" +msgstr "" + +#: company/models.py:130 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:137 +msgid "Contact email address" +msgstr "" + +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 +msgid "Contact" +msgstr "" + +#: company/models.py:144 +msgid "Point of contact" +msgstr "" + +#: company/models.py:150 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:163 +msgid "Is this company active?" +msgstr "" + +#: company/models.py:168 +msgid "Is customer" +msgstr "" + +#: company/models.py:169 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:174 +msgid "Is supplier" +msgstr "" + +#: company/models.py:175 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" + +#: company/models.py:181 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:189 +msgid "Default currency used for this company" +msgstr "" + +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "" + +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 +msgid "Select company" +msgstr "" + +#: company/models.py:377 +msgid "Address title" +msgstr "" + +#: company/models.py:378 +msgid "Title describing the address entry" +msgstr "" + +#: company/models.py:384 +msgid "Primary address" +msgstr "" + +#: company/models.py:385 +msgid "Set as primary address" +msgstr "" + +#: company/models.py:390 templates/js/translated/company.js:914 +#: templates/js/translated/company.js:971 +msgid "Line 1" +msgstr "" + +#: company/models.py:391 +msgid "Address line 1" +msgstr "" + +#: company/models.py:397 templates/js/translated/company.js:915 +#: templates/js/translated/company.js:977 +msgid "Line 2" +msgstr "" + +#: company/models.py:398 +msgid "Address line 2" +msgstr "" + +#: company/models.py:404 company/models.py:405 +#: templates/js/translated/company.js:983 +msgid "Postal code" +msgstr "" + +#: company/models.py:411 +msgid "City/Region" +msgstr "" + +#: company/models.py:412 +msgid "Postal code city/region" +msgstr "" + +#: company/models.py:418 +msgid "State/Province" +msgstr "" + +#: company/models.py:419 +msgid "State or province" +msgstr "" + +#: company/models.py:425 templates/js/translated/company.js:1001 +msgid "Country" +msgstr "" + +#: company/models.py:426 +msgid "Address country" +msgstr "" + +#: company/models.py:432 +msgid "Courier shipping notes" +msgstr "" + +#: company/models.py:433 +msgid "Notes for shipping courier" +msgstr "" + +#: company/models.py:439 +msgid "Internal shipping notes" +msgstr "" + +#: company/models.py:440 +msgid "Shipping notes for internal use" +msgstr "" + +#: company/models.py:447 +msgid "Link to address information (external)" +msgstr "" + +#: company/models.py:470 company/models.py:587 company/models.py:811 +#: 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:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 +msgid "Parameter name" +msgstr "" + +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 +msgid "Value" +msgstr "" + +#: company/models.py:601 +msgid "Parameter value" +msgstr "" + +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 +msgid "Units" +msgstr "" + +#: company/models.py:609 +msgid "Parameter units" +msgstr "" + +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 +msgid "Pack units must be compatible with the base part units" +msgstr "" + +#: company/models.py:726 +msgid "Pack units must be greater than zero" +msgstr "" + +#: company/models.py:740 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1772 +#: templates/js/translated/pricing.js:498 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 +msgid "Supplier" +msgstr "" + +#: company/models.py:790 +msgid "Select supplier" +msgstr "" + +#: company/models.py:796 part/serializers.py:548 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:802 +msgid "Is this supplier part active?" +msgstr "" + +#: company/models.py:812 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:819 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:828 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 +msgid "Note" +msgstr "" + +#: company/models.py:844 part/models.py:2110 +msgid "base cost" +msgstr "" + +#: company/models.py:845 part/models.py:2111 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:853 +msgid "Part packaging" +msgstr "" + +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: 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:2154 +#: templates/js/translated/purchase_order.js:2171 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:860 +msgid "Total quantity supplied in a single pack. Leave empty for single items." +msgstr "" + +#: company/models.py:879 part/models.py:2117 +msgid "multiple" +msgstr "" + +#: company/models.py:880 +msgid "Order multiple" +msgstr "" + +#: company/models.py:892 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:898 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:899 +msgid "Date of last update of availability data" +msgstr "" + +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 +msgid "Default currency used for this supplier" +msgstr "" + +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 +#: 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:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 +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:162 +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:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 +#: 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:3043 +#: templates/js/translated/table_filters.js:827 +msgid "Customer" +msgstr "" + +#: company/templates/company/company_base.html:117 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/company_base.html:131 +msgid "Phone" +msgstr "" + +#: company/templates/company/company_base.html:211 +#: part/templates/part/part_base.html:536 +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:539 +#: 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:568 +msgid "Upload Image" +msgstr "" + +#: company/templates/company/company_base.html:258 +#: part/templates/part/part_base.html:622 +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:372 +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:392 +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:122 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:143 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:125 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:446 +#: order/serializers.py:559 +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:902 +#: 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:211 part/templates/part/part_sidebar.html:8 +msgid "Parameters" +msgstr "" + +#: company/templates/company/manufacturer_part.html:160 +#: part/templates/part/detail.html:216 +#: templates/InvenTree/settings/category.html:12 +#: templates/InvenTree/settings/part_parameters.html:24 +msgid "New Parameter" +msgstr "" + +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 +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/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:126 +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 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 +#: templates/js/translated/pricing.js:510 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 +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:204 +msgid "Create new stock item" +msgstr "" + +#: company/templates/company/supplier_part.html:210 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 +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:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:316 +msgid "Link Barcode to Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:388 +msgid "Update Part Availability" +msgstr "" + +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 +#: stock/templates/stock/location_sidebar.html:7 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: 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:52 +msgid "New Company" +msgstr "" + +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "" + +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:216 +msgid "Number of copies to print for each label" +msgstr "" + +#: machine/machine_types/label_printer.py:231 +msgid "Connected" +msgstr "" + +#: machine/machine_types/label_printer.py:232 order/api.py:1408 +#: templates/js/translated/sales_order.js:1078 +msgid "Unknown" +msgstr "" + +#: machine/machine_types/label_printer.py:233 +msgid "Printing" +msgstr "" + +#: machine/machine_types/label_printer.py:234 +msgid "No media" +msgstr "" + +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 +msgid "Disconnected" +msgstr "" + +#: machine/machine_types/label_printer.py:243 +msgid "Label Printer" +msgstr "" + +#: machine/machine_types/label_printer.py:244 +msgid "Directly print labels for various items." +msgstr "" + +#: machine/machine_types/label_printer.py:250 +msgid "Printer Location" +msgstr "" + +#: machine/machine_types/label_printer.py:251 +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: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:90 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 +#: templates/js/translated/order.js:352 +#: templates/js/translated/purchase_order.js:2195 +#: templates/js/translated/sales_order.js:1883 +msgid "Total Price" +msgstr "" + +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 +msgid "Order Status" +msgstr "" + +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 +msgid "Has Pricing" +msgstr "" + +#: order/api.py:228 +msgid "No matching purchase order found" +msgstr "" + +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 +#: templates/js/translated/sales_order.js:1524 +msgid "Order" +msgstr "" + +#: order/api.py:427 order/api.py:782 +msgid "Order Complete" +msgstr "" + +#: order/api.py:450 +msgid "Order Pending" +msgstr "" + +#: order/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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:120 stock/templates/stock/item_base.html:176 +#: templates/email/overdue_purchase_order.html:15 +#: templates/js/translated/part.js:1749 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:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +msgid "Purchase Order" +msgstr "" + +#: order/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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:3025 +msgid "Return Order" +msgstr "" + +#: order/models.py:91 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:96 order/serializers.py:71 +msgid "Order Currency" +msgstr "" + +#: order/models.py:99 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:1385 order/models.py:1817 +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:469 order/models.py:980 +msgid "Order reference" +msgstr "" + +#: order/models.py:478 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:493 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:505 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:514 +msgid "received by" +msgstr "" + +#: order/models.py:520 order/models.py:2173 +msgid "Issue Date" +msgstr "" + +#: order/models.py:521 order/models.py:2174 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:528 order/models.py:2181 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:572 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:807 +msgid "Quantity must be a positive number" +msgstr "" + +#: order/models.py:992 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:1016 order/models.py:2167 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:1020 order/models.py:1771 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:1029 +msgid "shipped by" +msgstr "" + +#: order/models.py:1078 +msgid "Order is already complete" +msgstr "" + +#: order/models.py:1081 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1085 +msgid "Only an open order can be marked as complete" +msgstr "" + +#: order/models.py:1089 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:1094 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:1357 +msgid "Item quantity" +msgstr "" + +#: order/models.py:1374 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1381 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1393 +msgid "Target date for this line item (leave blank to use the target date from the order)" +msgstr "" + +#: order/models.py:1414 +msgid "Line item description (optional)" +msgstr "" + +#: order/models.py:1420 +msgid "Context" +msgstr "" + +#: order/models.py:1421 +msgid "Additional context for this line" +msgstr "" + +#: order/models.py:1431 +msgid "Unit price" +msgstr "" + +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:1476 +msgid "deleted" +msgstr "" + +#: order/models.py:1504 +msgid "Supplier part" +msgstr "" + +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:616 +msgid "Received" +msgstr "" + +#: order/models.py:1512 +msgid "Number of items received" +msgstr "" + +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:183 +#: templates/js/translated/stock.js:2396 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:1521 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:1536 +msgid "Where does the Purchaser want this item to be stored?" +msgstr "" + +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 +msgid "Virtual part cannot be assigned to a sales order" +msgstr "" + +#: order/models.py:1642 +msgid "Only salable parts can be assigned to a sales order" +msgstr "" + +#: order/models.py:1668 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:1669 +msgid "Unit sale price" +msgstr "" + +#: order/models.py:1678 order/status_codes.py:48 +#: 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:1679 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:1973 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:1976 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:1979 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:1998 order/serializers.py:1340 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:2001 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:2002 plugin/base/barcodes/api.py:524 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:2010 +msgid "Line" +msgstr "" + +#: order/models.py:2019 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 +msgid "Item" +msgstr "" + +#: order/models.py:2033 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:2042 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/models.py:2136 +msgid "Return Order reference" +msgstr "" + +#: order/models.py:2148 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:2160 +msgid "Return order status" +msgstr "" + +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:2392 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:2398 +msgid "Received Date" +msgstr "" + +#: order/models.py:2399 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:2410 templates/js/translated/return_order.js:731 +#: templates/js/translated/table_filters.js:123 +msgid "Outcome" +msgstr "" + +#: order/models.py:2411 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:2418 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" + +#: order/serializers.py:86 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:326 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/serializers.py:341 order/serializers.py:1361 +msgid "Allow order to be closed with incomplete line items" +msgstr "" + +#: order/serializers.py:351 order/serializers.py:1371 +msgid "Order has incomplete line items" +msgstr "" + +#: order/serializers.py:501 +msgid "Order is not open" +msgstr "" + +#: order/serializers.py:522 +msgid "Auto Pricing" +msgstr "" + +#: order/serializers.py:524 +msgid "Automatically calculate purchase price based on supplier part data" +msgstr "" + +#: order/serializers.py:534 +msgid "Purchase price currency" +msgstr "" + +#: order/serializers.py:540 +msgid "Merge Items" +msgstr "" + +#: order/serializers.py:542 +msgid "Merge items with the same part, destination and target date into one line item" +msgstr "" + +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 +msgid "Supplier part must be specified" +msgstr "" + +#: order/serializers.py:582 +msgid "Purchase order must be specified" +msgstr "" + +#: order/serializers.py:590 +msgid "Supplier must match purchase order" +msgstr "" + +#: order/serializers.py:591 +msgid "Purchase order must match supplier" +msgstr "" + +#: order/serializers.py:634 order/serializers.py:1441 +msgid "Line Item" +msgstr "" + +#: order/serializers.py:640 +msgid "Line item does not match purchase order" +msgstr "" + +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 +msgid "Select destination location for received items" +msgstr "" + +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 +msgid "Enter batch code for incoming stock items" +msgstr "" + +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 +msgid "Enter serial numbers for incoming stock items" +msgstr "" + +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 +msgid "Barcode" +msgstr "" + +#: order/serializers.py:702 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:718 +msgid "Barcode is already in use" +msgstr "" + +#: order/serializers.py:742 +msgid "An integer quantity must be provided for trackable parts" +msgstr "" + +#: order/serializers.py:790 order/serializers.py:1793 +msgid "Line items must be provided" +msgstr "" + +#: order/serializers.py:806 +msgid "Destination location must be specified" +msgstr "" + +#: order/serializers.py:817 +msgid "Supplied barcode values must be unique" +msgstr "" + +#: order/serializers.py:1182 +msgid "Sale price currency" +msgstr "" + +#: order/serializers.py:1243 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:1304 order/serializers.py:1450 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:1323 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:1460 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:1482 order/serializers.py:1588 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:1485 order/serializers.py:1591 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:1532 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:1539 +msgid "The following serial numbers are already allocated" +msgstr "" + +#: order/serializers.py:1747 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1753 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1756 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1785 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1868 +msgid "Line price currency" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:45 order/status_codes.py:77 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:101 +msgid "Return" +msgstr "" + +#: order/status_codes.py:104 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:107 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:110 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:113 +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 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 +msgid "Complete Order" +msgstr "" + +#: order/templates/order/order_base.html:96 +msgid "Supplier part thumbnail" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Description" +msgstr "" + +#: order/templates/order/order_base.html:146 +msgid "No suppplier information available" +msgstr "" + +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 +#: report/templates/report/inventree_build_order_report.html:121 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_base.html:229 +msgid "Total cost" +msgstr "" + +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 +msgid "Total cost could not be calculated" +msgstr "" + +#: order/templates/order/order_base.html:335 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:347 +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:530 +#: templates/js/translated/build.js:1802 +#: templates/js/translated/purchase_order.js:696 +#: templates/js/translated/purchase_order.js:1288 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 +#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: 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:141 +#: order/templates/order/sales_order_base.html:158 +#: 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:198 +#: order/templates/order/sales_order_base.html:242 +#: 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:1076 +#: templates/js/translated/purchase_order.js:1822 +#: 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:273 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:285 +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:91 +#: order/templates/order/sales_order_base.html:92 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:99 +#: templates/js/translated/sales_order.js:536 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:138 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:176 +#: 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:339 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:351 +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/build.js:1063 +#: templates/js/translated/filters.js:299 +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:48 part/models.py:1031 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 +msgid "IPN" +msgstr "" + +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 +msgid "Revision" +msgstr "" + +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +msgid "Keywords" +msgstr "" + +#: part/admin.py:60 +msgid "Part Image" +msgstr "" + +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:222 +msgid "Category ID" +msgstr "" + +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 +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:999 part/templates/part/part_base.html:177 +msgid "Variant Of" +msgstr "" + +#: part/admin.py:84 part/models.py:1137 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/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 +msgid "Building" +msgstr "" + +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 +msgid "Minimum Cost" +msgstr "" + +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 +msgid "Maximum Cost" +msgstr "" + +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +msgid "Parent ID" +msgstr "" + +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +msgid "Parent Name" +msgstr "" + +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 +msgid "Category Path" +msgstr "" + +#: part/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: 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:2819 templates/js/translated/search.js:130 +#: templates/navbar.html:24 users/models.py:203 +msgid "Parts" +msgstr "" + +#: part/admin.py:378 +msgid "BOM Level" +msgstr "" + +#: part/admin.py:381 +msgid "BOM Item ID" +msgstr "" + +#: part/admin.py:391 +msgid "Parent IPN" +msgstr "" + +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" + +#: part/admin.py:418 part/serializers.py:1344 +#: templates/js/translated/pricing.js:358 +#: templates/js/translated/pricing.js:1024 +msgid "Minimum Price" +msgstr "" + +#: part/admin.py:423 part/serializers.py:1359 +#: templates/js/translated/pricing.js:353 +#: templates/js/translated/pricing.js:1032 +msgid "Maximum Price" +msgstr "" + +#: part/api.py:104 +msgid "Starred" +msgstr "" + +#: part/api.py:106 +msgid "Filter by starred categories" +msgstr "" + +#: part/api.py:123 stock/api.py:312 +msgid "Depth" +msgstr "" + +#: part/api.py:123 +msgid "Filter by category depth" +msgstr "" + +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 +msgid "Cascade" +msgstr "" + +#: part/api.py:158 +msgid "Include sub-categories in filtered results" +msgstr "" + +#: part/api.py:179 templates/js/translated/part.js:308 +msgid "Parent" +msgstr "" + +#: part/api.py:181 +msgid "Filter by parent category" +msgstr "" + +#: part/api.py:214 +msgid "Exclude Tree" +msgstr "" + +#: part/api.py:216 +msgid "Exclude sub-categories under the specified category" +msgstr "" + +#: part/api.py:441 +msgid "Has Results" +msgstr "" + +#: part/api.py:608 +msgid "Incoming Purchase Order" +msgstr "" + +#: part/api.py:626 +msgid "Outgoing Sales Order" +msgstr "" + +#: part/api.py:642 +msgid "Stock produced by Build Order" +msgstr "" + +#: part/api.py:726 +msgid "Stock required for Build Order" +msgstr "" + +#: part/api.py:874 +msgid "Validate entire Bill of Materials" +msgstr "" + +#: part/api.py:880 +msgid "This option must be selected" +msgstr "" + +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 +#: templates/InvenTree/settings/settings_staff_js.html:300 +#: templates/js/translated/notification.js:60 +#: templates/js/translated/part.js:2380 +msgid "Category" +msgstr "" + +#: part/api.py:1811 +msgid "Uses" +msgstr "" + +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 +msgid "Default Location" +msgstr "" + +#: part/bom.py:179 part/serializers.py:903 +#: 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:88 part/models.py:4040 part/templates/part/category.html:16 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:89 part/templates/part/category.html:133 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 +#: users/models.py:202 +msgid "Part Categories" +msgstr "" + +#: part/models.py:108 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 +msgid "Structural" +msgstr "" + +#: part/models.py:115 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:124 +msgid "Default keywords" +msgstr "" + +#: part/models.py:125 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 +msgid "Icon" +msgstr "" + +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:178 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:526 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:564 +msgid "Invalid choice for parent part" +msgstr "" + +#: part/models.py:612 part/models.py:619 +#, python-brace-format +msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" +msgstr "" + +#: part/models.py:631 +#, python-brace-format +msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" +msgstr "" + +#: part/models.py:694 +#, python-brace-format +msgid "IPN must match regex pattern {pattern}" +msgstr "" + +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 +msgid "Stock item with this serial number already exists" +msgstr "" + +#: part/models.py:916 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 +msgid "Part with this Name, IPN and Revision already exists." +msgstr "" + +#: part/models.py:950 +msgid "Parts cannot be assigned to structural part categories!" +msgstr "" + +#: part/models.py:982 part/models.py:4095 +msgid "Part name" +msgstr "" + +#: part/models.py:987 +msgid "Is Template" +msgstr "" + +#: part/models.py:988 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:998 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:1006 +msgid "Part description (optional)" +msgstr "" + +#: part/models.py:1014 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:1024 +msgid "Part category" +msgstr "" + +#: part/models.py:1039 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:1120 part/templates/part/part_base.html:385 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:1121 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:1128 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:1129 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:1138 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:1147 +msgid "Units of measure for this part" +msgstr "" + +#: part/models.py:1154 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:1160 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:1166 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:1172 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:1178 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:1182 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:1200 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1201 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:1209 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:1214 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:1230 +msgid "Creation User" +msgstr "" + +#: part/models.py:1240 +msgid "Owner responsible for this part" +msgstr "" + +#: part/models.py:1245 part/templates/part/part_base.html:348 +#: stock/templates/stock/item_base.html:451 +#: templates/js/translated/part.js:2487 +msgid "Last Stocktake" +msgstr "" + +#: part/models.py:2118 +msgid "Sell multiple" +msgstr "" + +#: part/models.py:3109 +msgid "Currency used to cache pricing calculations" +msgstr "" + +#: part/models.py:3125 +msgid "Minimum BOM Cost" +msgstr "" + +#: part/models.py:3126 +msgid "Minimum cost of component parts" +msgstr "" + +#: part/models.py:3132 +msgid "Maximum BOM Cost" +msgstr "" + +#: part/models.py:3133 +msgid "Maximum cost of component parts" +msgstr "" + +#: part/models.py:3139 +msgid "Minimum Purchase Cost" +msgstr "" + +#: part/models.py:3140 +msgid "Minimum historical purchase cost" +msgstr "" + +#: part/models.py:3146 +msgid "Maximum Purchase Cost" +msgstr "" + +#: part/models.py:3147 +msgid "Maximum historical purchase cost" +msgstr "" + +#: part/models.py:3153 +msgid "Minimum Internal Price" +msgstr "" + +#: part/models.py:3154 +msgid "Minimum cost based on internal price breaks" +msgstr "" + +#: part/models.py:3160 +msgid "Maximum Internal Price" +msgstr "" + +#: part/models.py:3161 +msgid "Maximum cost based on internal price breaks" +msgstr "" + +#: part/models.py:3167 +msgid "Minimum Supplier Price" +msgstr "" + +#: part/models.py:3168 +msgid "Minimum price of part from external suppliers" +msgstr "" + +#: part/models.py:3174 +msgid "Maximum Supplier Price" +msgstr "" + +#: part/models.py:3175 +msgid "Maximum price of part from external suppliers" +msgstr "" + +#: part/models.py:3181 +msgid "Minimum Variant Cost" +msgstr "" + +#: part/models.py:3182 +msgid "Calculated minimum cost of variant parts" +msgstr "" + +#: part/models.py:3188 +msgid "Maximum Variant Cost" +msgstr "" + +#: part/models.py:3189 +msgid "Calculated maximum cost of variant parts" +msgstr "" + +#: part/models.py:3196 +msgid "Override minimum cost" +msgstr "" + +#: part/models.py:3203 +msgid "Override maximum cost" +msgstr "" + +#: part/models.py:3210 +msgid "Calculated overall minimum cost" +msgstr "" + +#: part/models.py:3217 +msgid "Calculated overall maximum cost" +msgstr "" + +#: part/models.py:3223 +msgid "Minimum Sale Price" +msgstr "" + +#: part/models.py:3224 +msgid "Minimum sale price based on price breaks" +msgstr "" + +#: part/models.py:3230 +msgid "Maximum Sale Price" +msgstr "" + +#: part/models.py:3231 +msgid "Maximum sale price based on price breaks" +msgstr "" + +#: part/models.py:3237 +msgid "Minimum Sale Cost" +msgstr "" + +#: part/models.py:3238 +msgid "Minimum historical sale price" +msgstr "" + +#: part/models.py:3244 +msgid "Maximum Sale Cost" +msgstr "" + +#: part/models.py:3245 +msgid "Maximum historical sale price" +msgstr "" + +#: part/models.py:3264 +msgid "Part for stocktake" +msgstr "" + +#: part/models.py:3269 +msgid "Item Count" +msgstr "" + +#: part/models.py:3270 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:3278 +msgid "Total available stock at time of stocktake" +msgstr "" + +#: part/models.py:3282 part/models.py:3365 +#: 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:543 +#: templates/js/translated/part.js:1089 templates/js/translated/pricing.js:826 +#: templates/js/translated/pricing.js:950 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 +msgid "Date" +msgstr "" + +#: part/models.py:3283 +msgid "Date stocktake was performed" +msgstr "" + +#: part/models.py:3291 +msgid "Additional notes" +msgstr "" + +#: part/models.py:3301 +msgid "User who performed this stocktake" +msgstr "" + +#: part/models.py:3307 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3308 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3314 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3315 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 +msgid "Report" +msgstr "" + +#: part/models.py:3372 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 +msgid "Part Count" +msgstr "" + +#: part/models.py:3378 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3388 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3398 +msgid "Part Sale Price Break" +msgstr "" + +#: part/models.py:3510 +msgid "Part Test Template" +msgstr "" + +#: part/models.py:3536 +msgid "Invalid template name - must include at least one alphanumeric character" +msgstr "" + +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 +msgid "Choices" +msgstr "" + +#: part/models.py:3642 +msgid "Valid choices for this test (comma-separated)" +msgstr "" + +#: part/models.py:3674 +msgid "Part Parameter Template" +msgstr "" + +#: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 +msgid "Parameter description" +msgstr "" + +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 +msgid "Checkbox" +msgstr "" + +#: part/models.py:3780 +msgid "Is this parameter a checkbox?" +msgstr "" + +#: part/models.py:3786 +msgid "Valid choices for this parameter (comma-separated)" +msgstr "" + +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 +msgid "Invalid choice for parameter value" +msgstr "" + +#: part/models.py:3931 +msgid "Parent Part" +msgstr "" + +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 +#: templates/InvenTree/settings/settings_staff_js.html:295 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:3945 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 +msgid "Default Value" +msgstr "" + +#: part/models.py:4055 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:4093 +msgid "Part ID or part name" +msgstr "" + +#: part/models.py:4094 +msgid "Unique part ID value" +msgstr "" + +#: part/models.py:4096 +msgid "Part IPN value" +msgstr "" + +#: part/models.py:4097 +msgid "Level" +msgstr "" + +#: part/models.py:4097 +msgid "BOM level" +msgstr "" + +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 +msgid "Select parent part" +msgstr "" + +#: part/models.py:4235 +msgid "Sub part" +msgstr "" + +#: part/models.py:4236 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:4247 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:4253 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:4259 +msgid "This BOM item is consumable (it is not tracked in build orders)" +msgstr "" + +#: part/models.py:4266 part/templates/part/upload_bom.html:55 +msgid "Overage" +msgstr "" + +#: part/models.py:4267 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:4274 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:4282 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:4288 +msgid "Checksum" +msgstr "" + +#: part/models.py:4289 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:4294 templates/js/translated/table_filters.js:174 +msgid "Validated" +msgstr "" + +#: part/models.py:4295 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:4300 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:4301 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:4307 +msgid "Stock items for variant parts can be used for this BOM item" +msgstr "" + +#: part/models.py:4392 stock/models.py:685 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:4402 part/models.py:4404 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:4542 +msgid "BOM Item Substitute" +msgstr "" + +#: part/models.py:4563 +msgid "Substitute part cannot be the same as the master part" +msgstr "" + +#: part/models.py:4576 +msgid "Parent BOM item" +msgstr "" + +#: part/models.py:4584 +msgid "Substitute part" +msgstr "" + +#: part/models.py:4600 +msgid "Part 1" +msgstr "" + +#: part/models.py:4608 +msgid "Part 2" +msgstr "" + +#: part/models.py:4609 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:4628 +msgid "Part relationship cannot be created between a part and itself" +msgstr "" + +#: part/models.py:4633 +msgid "Duplicate relationship already exists" +msgstr "" + +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/templates/part/category_sidebar.html:7 +msgid "Subcategories" +msgstr "" + +#: part/serializers.py:197 +msgid "Results" +msgstr "" + +#: part/serializers.py:198 +msgid "Number of results recorded against this template" +msgstr "" + +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +msgid "Purchase currency of this stock item" +msgstr "" + +#: part/serializers.py:291 +msgid "Number of parts using this template" +msgstr "" + +#: part/serializers.py:420 +msgid "No parts selected" +msgstr "" + +#: part/serializers.py:430 +msgid "Select category" +msgstr "" + +#: part/serializers.py:465 +msgid "Original Part" +msgstr "" + +#: part/serializers.py:466 +msgid "Select original part to duplicate" +msgstr "" + +#: part/serializers.py:471 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:472 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:478 part/templates/part/detail.html:293 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:479 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:485 +msgid "Copy Parameters" +msgstr "" + +#: part/serializers.py:486 +msgid "Copy parameter data from original part" +msgstr "" + +#: part/serializers.py:492 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:493 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:511 +msgid "Initial Stock Quantity" +msgstr "" + +#: part/serializers.py:513 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "" + +#: part/serializers.py:520 +msgid "Initial Stock Location" +msgstr "" + +#: part/serializers.py:521 +msgid "Specify initial stock location for this Part" +msgstr "" + +#: part/serializers.py:538 +msgid "Select supplier (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:554 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:564 +msgid "Manufacturer part number" +msgstr "" + +#: part/serializers.py:571 +msgid "Selected company is not a valid supplier" +msgstr "" + +#: part/serializers.py:580 +msgid "Selected company is not a valid manufacturer" +msgstr "" + +#: part/serializers.py:591 +msgid "Manufacturer part matching this MPN already exists" +msgstr "" + +#: part/serializers.py:598 +msgid "Supplier part matching this SKU already exists" +msgstr "" + +#: part/serializers.py:901 +msgid "Revisions" +msgstr "" + +#: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 +msgid "Filename of an existing part image" +msgstr "" + +#: part/serializers.py:986 +msgid "Image file does not exist" +msgstr "" + +#: part/serializers.py:1192 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:1202 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:1212 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:1218 +msgid "Exclude External Stock" +msgstr "" + +#: part/serializers.py:1219 +msgid "Exclude stock items in external locations" +msgstr "" + +#: part/serializers.py:1224 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1225 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:1230 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:1231 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:1239 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:1345 +msgid "Override calculated value for minimum price" +msgstr "" + +#: part/serializers.py:1352 +msgid "Minimum price currency" +msgstr "" + +#: part/serializers.py:1360 +msgid "Override calculated value for maximum price" +msgstr "" + +#: part/serializers.py:1367 +msgid "Maximum price currency" +msgstr "" + +#: part/serializers.py:1396 +msgid "Update" +msgstr "" + +#: part/serializers.py:1397 +msgid "Update pricing for this part" +msgstr "" + +#: part/serializers.py:1420 +#, python-brace-format +msgid "Could not convert from provided currencies to {default_currency}" +msgstr "" + +#: part/serializers.py:1427 +msgid "Minimum price must not be greater than maximum price" +msgstr "" + +#: part/serializers.py:1430 +msgid "Maximum price must not be less than minimum price" +msgstr "" + +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 +msgid "Select part to copy BOM from" +msgstr "" + +#: part/serializers.py:1843 +msgid "Remove Existing Data" +msgstr "" + +#: part/serializers.py:1844 +msgid "Remove existing BOM items before copying" +msgstr "" + +#: part/serializers.py:1849 +msgid "Include Inherited" +msgstr "" + +#: part/serializers.py:1850 +msgid "Include BOM items which are inherited from templated parts" +msgstr "" + +#: part/serializers.py:1855 +msgid "Skip Invalid Rows" +msgstr "" + +#: part/serializers.py:1856 +msgid "Enable this option to skip invalid rows" +msgstr "" + +#: part/serializers.py:1861 +msgid "Copy Substitute Parts" +msgstr "" + +#: part/serializers.py:1862 +msgid "Copy substitute parts when duplicate BOM items" +msgstr "" + +#: part/serializers.py:1899 +msgid "Clear Existing BOM" +msgstr "" + +#: part/serializers.py:1900 +msgid "Delete existing BOM items before uploading" +msgstr "" + +#: part/serializers.py:1932 +msgid "No part column specified" +msgstr "" + +#: part/serializers.py:1976 +msgid "Multiple matching parts found" +msgstr "" + +#: part/serializers.py:1979 +msgid "No matching part found" +msgstr "" + +#: part/serializers.py:1982 +msgid "Part is not designated as a component" +msgstr "" + +#: part/serializers.py:1991 +msgid "Quantity not provided" +msgstr "" + +#: part/serializers.py:1999 +msgid "Invalid quantity" +msgstr "" + +#: part/serializers.py:2022 +msgid "At least one BOM item is required" +msgstr "" + +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 +msgid "Total Quantity" +msgstr "" + +#: part/stocktake.py:226 +msgid "Total Cost Min" +msgstr "" + +#: part/stocktake.py:227 +msgid "Total Cost Max" +msgstr "" + +#: part/stocktake.py:285 +msgid "Stocktake Report Available" +msgstr "" + +#: part/stocktake.py:286 +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:32 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:38 part/templates/part/category.html:42 +msgid "You are subscribed to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:46 +msgid "Subscribe to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:52 +msgid "Category Actions" +msgstr "" + +#: part/templates/part/category.html:57 +msgid "Edit category" +msgstr "" + +#: part/templates/part/category.html:58 +msgid "Edit Category" +msgstr "" + +#: part/templates/part/category.html:62 +msgid "Delete category" +msgstr "" + +#: part/templates/part/category.html:63 +msgid "Delete Category" +msgstr "" + +#: part/templates/part/category.html:99 +msgid "Top level part category" +msgstr "" + +#: part/templates/part/category.html:124 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:162 +msgid "Create new part" +msgstr "" + +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +msgid "New Part" +msgstr "" + +#: part/templates/part/category.html:189 +#: templates/InvenTree/settings/part_parameters.html:7 +#: templates/InvenTree/settings/sidebar.html:49 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/category.html:208 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:209 +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:255 templates/InvenTree/settings/part_stocktake.html:30 +#: templates/InvenTree/settings/sidebar.html:53 +#: templates/js/translated/stock.js:2301 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:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +msgid "Sales Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:172 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/detail.html:187 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/detail.html:191 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/detail.html:192 +msgid "New Variant" +msgstr "" + +#: part/templates/part/detail.html:215 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +msgid "Add Related" +msgstr "" + +#: part/templates/part/detail.html:271 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:276 +msgid "Export actions" +msgstr "" + +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +msgid "Export BOM" +msgstr "" + +#: part/templates/part/detail.html:282 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/detail.html:288 +msgid "BOM actions" +msgstr "" + +#: part/templates/part/detail.html:292 +msgid "Upload BOM" +msgstr "" + +#: part/templates/part/detail.html:294 +msgid "Validate BOM" +msgstr "" + +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 +msgid "Add BOM Item" +msgstr "" + +#: part/templates/part/detail.html:313 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/detail.html:329 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +msgid "Build Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:368 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/detail.html:388 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/detail.html:672 +msgid "Related Part" +msgstr "" + +#: part/templates/part/detail.html:680 +msgid "Add Related Part" +msgstr "" + +#: part/templates/part/detail.html:765 +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:154 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:155 +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:71 templates/js/translated/label.js:136 +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:80 +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:2296 +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:690 +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:300 +msgid "Minimum stock level" +msgstr "" + +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 +#: templates/js/translated/pricing.js:391 +#: templates/js/translated/pricing.js:1054 +msgid "Price Range" +msgstr "" + +#: part/templates/part/part_base.html:361 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/part_base.html:365 +#: stock/templates/stock/item_base.html:322 +msgid "Search for serial number" +msgstr "" + +#: part/templates/part/part_base.html:453 +msgid "Part QR Code" +msgstr "" + +#: part/templates/part/part_base.html:470 +msgid "Link Barcode to Part" +msgstr "" + +#: part/templates/part/part_base.html:520 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_base.html:537 +msgid "Remove associated image from this part" +msgstr "" + +#: part/templates/part/part_base.html:588 +msgid "No matching images found" +msgstr "" + +#: part/templates/part/part_base.html:684 +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:21 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:51 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 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:103 +#: 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:251 +#: stock/templates/stock/item_base.html:446 +#: templates/js/translated/company.js:1703 +#: templates/js/translated/company.js:1713 +#: templates/js/translated/stock.js:2331 +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:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 +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:172 +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:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 +msgid "No match found for barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:129 +msgid "Match found for barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 +msgid "Barcode matches existing item" +msgstr "" + +#: plugin/base/barcodes/api.py:336 +msgid "No matching part data found" +msgstr "" + +#: plugin/base/barcodes/api.py:353 +msgid "No matching supplier parts found" +msgstr "" + +#: plugin/base/barcodes/api.py:357 +msgid "Multiple matching supplier parts found" +msgstr "" + +#: plugin/base/barcodes/api.py:381 +msgid "Matched supplier part" +msgstr "" + +#: plugin/base/barcodes/api.py:430 +msgid "Item has already been received" +msgstr "" + +#: plugin/base/barcodes/api.py:467 +msgid "No match for supplier barcode" +msgstr "" + +#: plugin/base/barcodes/api.py:510 +msgid "Multiple matching line items found" +msgstr "" + +#: plugin/base/barcodes/api.py:513 +msgid "No matching line item found" +msgstr "" + +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +msgid "Barcode does not match an existing stock item" +msgstr "" + +#: plugin/base/barcodes/api.py:569 +msgid "Stock item does not match line item" +msgstr "" + +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 +#: templates/js/translated/sales_order.js:1953 +msgid "Insufficient stock available" +msgstr "" + +#: plugin/base/barcodes/api.py:602 +msgid "Stock item allocated to sales order" +msgstr "" + +#: plugin/base/barcodes/api.py:606 +msgid "Not enough information" +msgstr "" + +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +msgid "Found multiple matching supplier parts for barcode" +msgstr "" + +#: plugin/base/barcodes/mixins.py:222 +#, python-brace-format +msgid "Found multiple purchase orders matching '{order}'" +msgstr "" + +#: plugin/base/barcodes/mixins.py:226 +#, python-brace-format +msgid "No matching purchase order for '{order}'" +msgstr "" + +#: plugin/base/barcodes/mixins.py:231 +msgid "Purchase order does not match supplier" +msgstr "" + +#: plugin/base/barcodes/mixins.py:465 +msgid "Failed to find pending line item for supplier part" +msgstr "" + +#: plugin/base/barcodes/mixins.py:496 +msgid "Further information required to receive line item" +msgstr "" + +#: plugin/base/barcodes/mixins.py:504 +msgid "Received purchase order line item" +msgstr "" + +#: plugin/base/barcodes/serializers.py:21 +msgid "Scanned barcode data" +msgstr "" + +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 +msgid "Purchase Order to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 +msgid "Purchase order has not been placed" +msgstr "" + +#: plugin/base/barcodes/serializers.py:143 +msgid "Location to receive items into" +msgstr "" + +#: plugin/base/barcodes/serializers.py:149 +msgid "Cannot select a structural location" +msgstr "" + +#: plugin/base/barcodes/serializers.py:163 +msgid "Sales Order to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:169 +msgid "Sales order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:177 +msgid "Sales order line item to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:184 +msgid "Sales order shipment to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:190 +msgid "Shipment has already been delivered" +msgstr "" + +#: plugin/base/barcodes/serializers.py:195 +msgid "Quantity to allocate" +msgstr "" + +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +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:27 +msgid "InvenTree Barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:28 +msgid "Provides native support for barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: 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:64 +#: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +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 +#: plugin/builtin/labels/label_sheet.py:70 +msgid "Debug mode" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 +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:149 +msgid "last used" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:166 +msgid "Options" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:30 +msgid "Page size for the label sheet" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:35 +msgid "Skip Labels" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:36 +msgid "Skip this number of labels when printing label sheets" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:42 +msgid "Border" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:43 +msgid "Print a border around each label" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 +msgid "Landscape" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:49 +msgid "Print the label sheet in landscape mode" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:61 +msgid "InvenTree Label Sheet Printer" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:62 +msgid "Arrays multiple labels onto a single sheet" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:107 +msgid "Label is too large for page size" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:141 +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:36 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:37 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:43 users/models.py:100 +msgid "Key" +msgstr "" + +#: plugin/models.py:44 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:52 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:59 plugin/serializers.py:90 +msgid "Package Name" +msgstr "" + +#: plugin/models.py:61 +msgid "Name of the installed package, if the plugin was installed via PIP" +msgstr "" + +#: plugin/models.py:66 +msgid "Is the plugin active" +msgstr "" + +#: plugin/models.py:157 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:518 +msgid "Installed" +msgstr "" + +#: plugin/models.py:166 +msgid "Sample plugin" +msgstr "" + +#: plugin/models.py:174 +msgid "Builtin Plugin" +msgstr "" + +#: plugin/models.py:182 +msgid "Package Plugin" +msgstr "" + +#: plugin/models.py:220 report/models.py:475 +#: templates/InvenTree/settings/plugin_settings.html:9 +#: templates/js/translated/plugin.js:51 +msgid "Plugin" +msgstr "" + +#: plugin/models.py:267 +msgid "Method" +msgstr "" + +#: plugin/plugin.py:270 +msgid "No author found" +msgstr "" + +#: plugin/registry.py:534 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" +msgstr "" + +#: plugin/registry.py:537 +#, python-brace-format +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:539 +#, 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:226 +msgid "Delete configuration" +msgstr "" + +#: plugin/serializers.py:227 +msgid "Delete the plugin configuration from the database" +msgstr "" + +#: report/api.py:88 +msgid "No valid objects provided to template" +msgstr "" + +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 +#: 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:180 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:182 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:184 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:233 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:248 report/api.py:329 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:283 +msgid "Error printing label" +msgstr "" + +#: report/api.py:375 report/api.py:411 +#, python-brace-format +msgid "Template file '{template}' is missing or does not exist" +msgstr "" + +#: report/helpers.py:43 +msgid "A4" +msgstr "" + +#: report/helpers.py:44 +msgid "A3" +msgstr "" + +#: report/helpers.py:45 +msgid "Legal" +msgstr "" + +#: report/helpers.py:46 +msgid "Letter" +msgstr "" + +#: report/models.py:119 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:151 +msgid "Template name" +msgstr "" + +#: report/models.py:157 +msgid "Template description" +msgstr "" + +#: report/models.py:163 +msgid "Revision number (auto-increments)" +msgstr "" + +#: report/models.py:203 +msgid "Filename Pattern" +msgstr "" + +#: report/models.py:204 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:209 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:215 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:235 +msgid "Filters" +msgstr "" + +#: report/models.py:236 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:295 report/models.py:362 +msgid "Template file" +msgstr "" + +#: report/models.py:303 +msgid "Page size for PDF reports" +msgstr "" + +#: report/models.py:309 +msgid "Render report in landscape orientation" +msgstr "" + +#: report/models.py:368 +msgid "Width [mm]" +msgstr "" + +#: report/models.py:369 +msgid "Label width, specified in mm" +msgstr "" + +#: report/models.py:375 +msgid "Height [mm]" +msgstr "" + +#: report/models.py:376 +msgid "Label height, specified in mm" +msgstr "" + +#: report/models.py:439 +msgid "Number of items to process" +msgstr "" + +#: report/models.py:445 +msgid "Report generation is complete" +msgstr "" + +#: report/models.py:449 templates/js/translated/build.js:2349 +msgid "Progress" +msgstr "" + +#: report/models.py:449 +msgid "Report generation progress" +msgstr "" + +#: report/models.py:457 +msgid "Report Template" +msgstr "" + +#: report/models.py:464 report/models.py:487 +msgid "Output File" +msgstr "" + +#: report/models.py:465 report/models.py:488 +msgid "Generated output file" +msgstr "" + +#: report/models.py:476 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:480 +msgid "Label Template" +msgstr "" + +#: report/models.py:503 +msgid "Snippet" +msgstr "" + +#: report/models.py:504 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:511 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:529 +msgid "Asset" +msgstr "" + +#: report/models.py:530 +msgid "Report asset file" +msgstr "" + +#: report/models.py:537 +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:341 templates/js/translated/pricing.js:527 +#: templates/js/translated/pricing.js:596 +#: templates/js/translated/pricing.js:834 +#: templates/js/translated/purchase_order.js:2185 +#: 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:2087 +#: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 +msgid "Total" +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:1580 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report.html:129 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report.html:131 +msgid "Fail" +msgstr "" + +#: report/templates/report/inventree_test_report.html:138 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report.html:140 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +msgid "Installed Items" +msgstr "" + +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 +msgid "Serial" +msgstr "" + +#: report/templatetags/report.py:98 +msgid "Asset file does not exist" +msgstr "" + +#: report/templatetags/report.py:154 report/templatetags/report.py:233 +msgid "Image file not found" +msgstr "" + +#: report/templatetags/report.py:258 +msgid "part_image tag requires a Part instance" +msgstr "" + +#: report/templatetags/report.py:299 +msgid "company_image tag requires a Company instance" +msgstr "" + +#: stock/admin.py:51 stock/admin.py:171 +msgid "Location ID" +msgstr "" + +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 +msgid "Location Path" +msgstr "" + +#: stock/admin.py:148 +msgid "Stock Item ID" +msgstr "" + +#: stock/admin.py:167 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:179 +msgid "Supplier Part ID" +msgstr "" + +#: stock/admin.py:184 +msgid "Supplier Part SKU" +msgstr "" + +#: stock/admin.py:189 +msgid "Supplier ID" +msgstr "" + +#: stock/admin.py:195 +msgid "Supplier Name" +msgstr "" + +#: stock/admin.py:200 +msgid "Customer ID" +msgstr "" + +#: stock/admin.py:205 stock/models.py:825 +#: stock/templates/stock/item_base.html:354 +msgid "Installed In" +msgstr "" + +#: stock/admin.py:210 +msgid "Build ID" +msgstr "" + +#: stock/admin.py:220 +msgid "Sales Order ID" +msgstr "" + +#: stock/admin.py:225 +msgid "Purchase Order ID" +msgstr "" + +#: stock/admin.py:240 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:245 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:260 stock/models.py:919 +#: stock/templates/stock/item_base.html:433 +#: templates/js/translated/stock.js:2315 users/models.py:124 +msgid "Expiry Date" +msgstr "" + +#: stock/api.py:312 +msgid "Filter by location depth" +msgstr "" + +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 +msgid "Include sub-locations in filtered results" +msgstr "" + +#: stock/api.py:369 stock/serializers.py:1186 +msgid "Parent Location" +msgstr "" + +#: stock/api.py:370 +msgid "Filter by parent location" +msgstr "" + +#: stock/api.py:617 templates/js/translated/table_filters.js:427 +msgid "External Location" +msgstr "" + +#: stock/api.py:805 +msgid "Part Tree" +msgstr "" + +#: stock/api.py:835 +msgid "Expiry date before" +msgstr "" + +#: stock/api.py:839 +msgid "Expiry date after" +msgstr "" + +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 +msgid "Stale" +msgstr "" + +#: stock/api.py:929 +msgid "Quantity is required" +msgstr "" + +#: stock/api.py:935 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/api.py:966 +msgid "The given supplier part does not exist" +msgstr "" + +#: stock/api.py:976 +msgid "The supplier part has a pack size defined, but flag use_pack_size not set" +msgstr "" + +#: stock/api.py:1007 +msgid "Serial numbers cannot be supplied for a non-trackable part" +msgstr "" + +#: stock/models.py:64 +msgid "Stock Location type" +msgstr "" + +#: stock/models.py:65 +msgid "Stock Location types" +msgstr "" + +#: stock/models.py:91 +msgid "Default icon for all locations that have no icon set (optional)" +msgstr "" + +#: stock/models.py:131 stock/models.py:807 +#: stock/templates/stock/location.html:17 +#: stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:132 stock/templates/stock/location.html:183 +#: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 +#: users/models.py:205 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:180 stock/models.py:968 +#: stock/templates/stock/item_base.html:247 +msgid "Owner" +msgstr "" + +#: stock/models.py:181 stock/models.py:969 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:189 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:196 templates/js/translated/stock.js:2865 +#: templates/js/translated/table_filters.js:243 +msgid "External" +msgstr "" + +#: stock/models.py:197 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:203 templates/js/translated/stock.js:2874 +#: templates/js/translated/table_filters.js:246 +msgid "Location type" +msgstr "" + +#: stock/models.py:207 +msgid "Stock location type of this location" +msgstr "" + +#: stock/models.py:279 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:664 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:691 stock/serializers.py:480 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:708 +#, python-brace-format +msgid "Part type ('{self.supplier_part.part}') must be {self.part}" +msgstr "" + +#: stock/models.py:718 stock/models.py:731 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:721 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:743 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:748 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:761 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:777 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:789 +msgid "Base part" +msgstr "" + +#: stock/models.py:799 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:811 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:819 stock/serializers.py:1580 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:830 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:849 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:863 stock/serializers.py:1563 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:868 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:878 +msgid "Source Build" +msgstr "" + +#: stock/models.py:881 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:888 stock/templates/stock/item_base.html:363 +msgid "Consumed By" +msgstr "" + +#: stock/models.py:891 +msgid "Build order which consumed this stock item" +msgstr "" + +#: stock/models.py:900 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:904 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:910 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:921 +msgid "Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:939 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:940 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:960 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:991 +msgid "Converted to part" +msgstr "" + +#: stock/models.py:1511 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:1517 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:1525 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({self.quantity})" +msgstr "" + +#: stock/models.py:1531 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:1536 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:1544 stock/serializers.py:726 +msgid "Serial numbers already exist" +msgstr "" + +#: stock/models.py:1641 +msgid "Test template does not exist" +msgstr "" + +#: stock/models.py:1659 +msgid "Stock item has been assigned to a sales order" +msgstr "" + +#: stock/models.py:1663 +msgid "Stock item is installed in another item" +msgstr "" + +#: stock/models.py:1666 +msgid "Stock item contains other items" +msgstr "" + +#: stock/models.py:1669 +msgid "Stock item has been assigned to a customer" +msgstr "" + +#: stock/models.py:1672 +msgid "Stock item is currently in production" +msgstr "" + +#: stock/models.py:1675 +msgid "Serialized stock cannot be merged" +msgstr "" + +#: stock/models.py:1682 stock/serializers.py:1469 +msgid "Duplicate stock items" +msgstr "" + +#: stock/models.py:1686 +msgid "Stock items must refer to the same part" +msgstr "" + +#: stock/models.py:1694 +msgid "Stock items must refer to the same supplier part" +msgstr "" + +#: stock/models.py:1699 +msgid "Stock status codes must match" +msgstr "" + +#: stock/models.py:1960 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:2414 +msgid "Stock Item Test Result" +msgstr "" + +#: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 +msgid "Test notes" +msgstr "" + +#: stock/models.py:2569 templates/js/translated/stock.js:1633 +msgid "Test station" +msgstr "" + +#: stock/models.py:2570 +msgid "The identifier of the test station where the test was performed" +msgstr "" + +#: stock/models.py:2576 +msgid "Started" +msgstr "" + +#: stock/models.py:2577 +msgid "The timestamp of the test start" +msgstr "" + +#: stock/models.py:2583 +msgid "Finished" +msgstr "" + +#: stock/models.py:2584 +msgid "The timestamp of the test finish" +msgstr "" + +#: stock/serializers.py:76 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:85 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:94 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:103 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:112 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:121 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:128 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:151 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:160 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:168 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:233 +msgid "Test template for this result" +msgstr "" + +#: stock/serializers.py:254 +msgid "Template ID or test name must be provided" +msgstr "" + +#: stock/serializers.py:286 +msgid "The test finished time cannot be earlier than the test started time" +msgstr "" + +#: stock/serializers.py:323 +msgid "Serial number is too large" +msgstr "" + +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 +msgid "Use pack size when adding: the quantity defined is the number of packs" +msgstr "" + +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 +msgid "Purchase price of this stock item, per unit or pack" +msgstr "" + +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 +msgid "Enter number of stock items to serialize" +msgstr "" + +#: stock/serializers.py:674 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({q})" +msgstr "" + +#: stock/serializers.py:681 +msgid "Enter serial numbers for new items" +msgstr "" + +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +msgid "Destination stock location" +msgstr "" + +#: stock/serializers.py:699 +msgid "Optional note field" +msgstr "" + +#: stock/serializers.py:709 +msgid "Serial numbers cannot be assigned to this part" +msgstr "" + +#: stock/serializers.py:764 +msgid "Select stock item to install" +msgstr "" + +#: stock/serializers.py:771 +msgid "Quantity to Install" +msgstr "" + +#: stock/serializers.py:772 +msgid "Enter the quantity of items to install" +msgstr "" + +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/serializers.py:785 +msgid "Quantity to install must be at least 1" +msgstr "" + +#: stock/serializers.py:793 +msgid "Stock item is unavailable" +msgstr "" + +#: stock/serializers.py:804 +msgid "Selected part is not in the Bill of Materials" +msgstr "" + +#: stock/serializers.py:817 +msgid "Quantity to install must not exceed available quantity" +msgstr "" + +#: stock/serializers.py:852 +msgid "Destination location for uninstalled item" +msgstr "" + +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 +msgid "Select part to convert stock item into" +msgstr "" + +#: stock/serializers.py:930 +msgid "Selected part is not a valid option for conversion" +msgstr "" + +#: stock/serializers.py:947 +msgid "Cannot convert stock item with assigned SupplierPart" +msgstr "" + +#: stock/serializers.py:978 +msgid "Destination location for returned item" +msgstr "" + +#: stock/serializers.py:1015 +msgid "Select stock items to change status" +msgstr "" + +#: stock/serializers.py:1021 +msgid "No stock items selected" +msgstr "" + +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 +#: stock/templates/stock/location_sidebar.html:5 +msgid "Sublocations" +msgstr "" + +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:1302 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:1306 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:1330 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:1336 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:1344 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:1354 stock/serializers.py:1608 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:1433 +msgid "Stock merging notes" +msgstr "" + +#: stock/serializers.py:1438 +msgid "Allow mismatched suppliers" +msgstr "" + +#: stock/serializers.py:1439 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" + +#: stock/serializers.py:1444 +msgid "Allow mismatched status" +msgstr "" + +#: stock/serializers.py:1445 +msgid "Allow stock items with different status codes to be merged" +msgstr "" + +#: stock/serializers.py:1455 +msgid "At least two stock items must be provided" +msgstr "" + +#: stock/serializers.py:1522 +msgid "No Change" +msgstr "" + +#: stock/serializers.py:1551 +msgid "StockItem primary key value" +msgstr "" + +#: stock/serializers.py:1570 +msgid "Stock item status code" +msgstr "" + +#: stock/serializers.py:1598 +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:550 +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:1943 +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:1849 +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:276 +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:3354 +msgid "Install Stock Item" +msgstr "" + +#: stock/templates/stock/item.html:264 +msgid "Delete all test results for this stock item" +msgstr "" + +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +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:67 +#: templates/js/translated/filters.js:434 +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:87 templates/js/translated/stock.js:1909 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:81 +#: templates/js/translated/stock.js:1891 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:82 +#: templates/js/translated/stock.js:1900 +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:93 templates/js/translated/stock.js:1918 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:91 +#: templates/js/translated/stock.js:1972 +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:2295 templates/navbar.html:38 +msgid "Build" +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:146 +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:398 +#: templates/js/translated/build.js:2552 +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: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:2037 +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:656 +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:35 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:42 +msgid "Locate stock location" +msgstr "" + +#: stock/templates/stock/location.html:60 +msgid "Scan stock items into this location" +msgstr "" + +#: stock/templates/stock/location.html:60 +msgid "Scan In Stock Items" +msgstr "" + +#: stock/templates/stock/location.html:61 +msgid "Scan stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:61 +msgid "Scan In Container" +msgstr "" + +#: stock/templates/stock/location.html:72 +msgid "Print Location Report" +msgstr "" + +#: stock/templates/stock/location.html:101 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:103 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:105 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:135 +msgid "Top level stock location" +msgstr "" + +#: stock/templates/stock/location.html:141 +msgid "Location Owner" +msgstr "" + +#: stock/templates/stock/location.html:145 +msgid "You are not in the list of owners of this location. This stock location cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:173 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:223 +msgid "Create new stock location" +msgstr "" + +#: stock/templates/stock/location.html:224 +msgid "New Location" +msgstr "" + +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 +msgid "stock location" +msgstr "" + +#: stock/templates/stock/location.html:320 +msgid "Scanned stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:393 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:404 +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 "" + +#: 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:44 +msgid "Part Import" +msgstr "" + +#: templates/InvenTree/settings/part.html:48 +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:510 +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:514 +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:35 +msgid "Exchange Rates" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:39 +msgid "Update Now" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:47 +#: templates/InvenTree/settings/pricing.html:51 +msgid "Last Update" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:51 +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:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 +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:2400 +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:1649 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:309 +#: templates/js/translated/part.js:1650 +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:352 +msgid "Delete Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:387 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:416 +msgid "Create Part Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:439 +msgid "No stock location types found" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:464 +msgid "Location count" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 +msgid "Edit Location Type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:470 +msgid "Delete Location type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:493 +msgid "Delete Location Type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:503 +#: 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:2200 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: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:592 +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:775 +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:45 +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:20 +msgid "Secret: " +msgstr "" + +#: templates/allauth_2fa/setup.html:24 +msgid "Step 2" +msgstr "" + +#: templates/allauth_2fa/setup.html:28 +msgid "Input a token generated by the app:" +msgstr "" + +#: templates/allauth_2fa/setup.html:38 +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:2747 +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:3234 +msgid "Minimum Quantity" +msgstr "" + +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +msgid "No Response" +msgstr "" + +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +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:1145 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +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:1160 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +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:260 +msgid "Attachment actions" +msgstr "" + +#: templates/js/translated/attachment.js:294 +msgid "No attachments found" +msgstr "" + +#: templates/js/translated/attachment.js:334 +msgid "Edit Attachment" +msgstr "" + +#: templates/js/translated/attachment.js:365 +msgid "Upload Date" +msgstr "" + +#: templates/js/translated/attachment.js:385 +msgid "Edit attachment" +msgstr "" + +#: templates/js/translated/attachment.js:393 +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:1125 +msgid "Invalid server response" +msgstr "" + +#: templates/js/translated/barcode.js:403 +msgid "Scan barcode data" +msgstr "" + +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +msgid "Scan Barcode" +msgstr "" + +#: templates/js/translated/barcode.js:489 +msgid "No URL in response" +msgstr "" + +#: templates/js/translated/barcode.js:529 +msgid "This will remove the link to the associated barcode" +msgstr "" + +#: templates/js/translated/barcode.js:535 +msgid "Unlink" +msgstr "" + +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +msgid "Remove stock item" +msgstr "" + +#: templates/js/translated/barcode.js:641 +msgid "Scan Stock Items Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:643 +msgid "Scan stock item barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 +msgid "Check In" +msgstr "" + +#: templates/js/translated/barcode.js:678 +msgid "No barcode provided" +msgstr "" + +#: templates/js/translated/barcode.js:718 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/translated/barcode.js:722 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/translated/barcode.js:729 +msgid "Added stock item" +msgstr "" + +#: templates/js/translated/barcode.js:738 +msgid "Barcode does not match valid stock item" +msgstr "" + +#: templates/js/translated/barcode.js:757 +msgid "Scan Stock Container Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:759 +msgid "Scan stock container barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:793 +msgid "Barcode does not match valid stock location" +msgstr "" + +#: templates/js/translated/barcode.js:837 +msgid "Check Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 +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:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: 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:2673 +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:2812 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 +#: templates/js/translated/sales_order.js:1946 +msgid "No Stock Available" +msgstr "" + +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +msgid "Includes variant and substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 +#: templates/js/translated/sales_order.js:1943 +msgid "Includes variant stock" +msgstr "" + +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +msgid "Includes substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +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:2658 +msgid "Required Part" +msgstr "" + +#: templates/js/translated/bom.js:1683 +msgid "Inherited from parent BOM" +msgstr "" + +#: templates/js/translated/build.js:143 +msgid "Edit Build Order" +msgstr "" + +#: templates/js/translated/build.js:191 +msgid "Create Build Order" +msgstr "" + +#: templates/js/translated/build.js:223 +msgid "Cancel Build Order" +msgstr "" + +#: templates/js/translated/build.js:232 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: templates/js/translated/build.js:238 +msgid "Stock items have been allocated to this build order" +msgstr "" + +#: templates/js/translated/build.js:245 +msgid "There are incomplete outputs remaining for this build order" +msgstr "" + +#: templates/js/translated/build.js:297 +msgid "Build order is ready to be completed" +msgstr "" + +#: templates/js/translated/build.js:305 +msgid "This build order cannot be completed as there are incomplete outputs" +msgstr "" + +#: templates/js/translated/build.js:310 +msgid "Build Order is incomplete" +msgstr "" + +#: templates/js/translated/build.js:328 +msgid "Complete Build Order" +msgstr "" + +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 +msgid "Next available serial number" +msgstr "" + +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 +msgid "Latest serial number" +msgstr "" + +#: templates/js/translated/build.js:380 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: templates/js/translated/build.js:381 +msgid "Build outputs must be generated individually" +msgstr "" + +#: templates/js/translated/build.js:389 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: templates/js/translated/build.js:390 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: templates/js/translated/build.js:397 +msgid "Create Build Output" +msgstr "" + +#: templates/js/translated/build.js:428 +msgid "Allocate stock items to this build output" +msgstr "" + +#: templates/js/translated/build.js:436 +msgid "Deallocate stock from build output" +msgstr "" + +#: templates/js/translated/build.js:445 +msgid "Complete build output" +msgstr "" + +#: templates/js/translated/build.js:453 +msgid "Scrap build output" +msgstr "" + +#: templates/js/translated/build.js:460 +msgid "Delete build output" +msgstr "" + +#: templates/js/translated/build.js:480 +msgid "Are you sure you wish to deallocate the selected stock items from this build?" +msgstr "" + +#: templates/js/translated/build.js:498 +msgid "Deallocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 +msgid "Select Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 +msgid "At least one build output must be selected" +msgstr "" + +#: templates/js/translated/build.js:599 +msgid "Selected build outputs will be marked as complete" +msgstr "" + +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 +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:761 +msgid "Scrap Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:851 +msgid "Selected build outputs will be deleted" +msgstr "" + +#: templates/js/translated/build.js:853 +msgid "Build output data will be permanently deleted" +msgstr "" + +#: templates/js/translated/build.js:854 +msgid "Allocated stock items will be returned to stock" +msgstr "" + +#: templates/js/translated/build.js:872 +msgid "Delete Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:959 +msgid "Delete allocations" +msgstr "" + +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" +msgstr "" + +#: templates/js/translated/build.js:989 +msgid "No allocated stock" +msgstr "" + +#: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 +msgid "Scrap outputs" +msgstr "" + +#: templates/js/translated/build.js:1236 +msgid "Delete outputs" +msgstr "" + +#: templates/js/translated/build.js:1289 +msgid "build output" +msgstr "" + +#: templates/js/translated/build.js:1290 +msgid "build outputs" +msgstr "" + +#: templates/js/translated/build.js:1294 +msgid "Build output actions" +msgstr "" + +#: templates/js/translated/build.js:1470 +msgid "No active build outputs found" +msgstr "" + +#: templates/js/translated/build.js:1563 +msgid "Allocated Lines" +msgstr "" + +#: templates/js/translated/build.js:1577 +msgid "Required Tests" +msgstr "" + +#: templates/js/translated/build.js:1749 +#: templates/js/translated/purchase_order.js:611 +#: templates/js/translated/sales_order.js:1207 +msgid "Select Parts" +msgstr "" + +#: templates/js/translated/build.js:1750 +#: templates/js/translated/sales_order.js:1208 +msgid "You must select at least one part to allocate" +msgstr "" + +#: templates/js/translated/build.js:1813 +#: templates/js/translated/sales_order.js:1157 +msgid "Specify stock allocation quantity" +msgstr "" + +#: templates/js/translated/build.js:1890 +msgid "All Parts Allocated" +msgstr "" + +#: templates/js/translated/build.js:1891 +msgid "All selected parts have been fully allocated" +msgstr "" + +#: templates/js/translated/build.js:1905 +#: templates/js/translated/sales_order.js:1222 +msgid "Select source location (leave blank to take from all locations)" +msgstr "" + +#: templates/js/translated/build.js:1933 +msgid "Allocate Stock Items to Build Order" +msgstr "" + +#: templates/js/translated/build.js:1944 +#: templates/js/translated/sales_order.js:1319 +msgid "No matching stock locations" +msgstr "" + +#: templates/js/translated/build.js:2017 +#: templates/js/translated/sales_order.js:1398 +msgid "No matching stock items" +msgstr "" + +#: templates/js/translated/build.js:2114 +msgid "Automatic Stock Allocation" +msgstr "" + +#: templates/js/translated/build.js:2115 +msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" +msgstr "" + +#: templates/js/translated/build.js:2117 +msgid "If a location is specified, stock will only be allocated from that location" +msgstr "" + +#: templates/js/translated/build.js:2118 +msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" +msgstr "" + +#: templates/js/translated/build.js:2119 +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:2149 +msgid "Allocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:2254 +msgid "No builds matching query" +msgstr "" + +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +msgid "Select" +msgstr "" + +#: templates/js/translated/build.js:2303 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +msgid "No user information" +msgstr "" + +#: templates/js/translated/build.js:2561 +#: templates/js/translated/sales_order.js:1682 +msgid "Edit stock allocation" +msgstr "" + +#: templates/js/translated/build.js:2562 +#: templates/js/translated/sales_order.js:1683 +msgid "Delete stock allocation" +msgstr "" + +#: templates/js/translated/build.js:2577 +msgid "Edit Allocation" +msgstr "" + +#: templates/js/translated/build.js:2589 +msgid "Remove Allocation" +msgstr "" + +#: templates/js/translated/build.js:2628 +msgid "build line" +msgstr "" + +#: templates/js/translated/build.js:2629 +msgid "build lines" +msgstr "" + +#: templates/js/translated/build.js:2647 +msgid "No build lines found" +msgstr "" + +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 +msgid "Trackable part" +msgstr "" + +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 +msgid "Unit Quantity" +msgstr "" + +#: templates/js/translated/build.js:2782 +#: templates/js/translated/sales_order.js:1951 +msgid "Sufficient stock available" +msgstr "" + +#: templates/js/translated/build.js:2837 +msgid "Consumable Item" +msgstr "" + +#: templates/js/translated/build.js:2844 +msgid "Tracked item" +msgstr "" + +#: templates/js/translated/build.js:2845 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2853 +#: templates/js/translated/sales_order.js:2052 +msgid "Build stock" +msgstr "" + +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +msgid "Order stock" +msgstr "" + +#: templates/js/translated/build.js:2862 +#: templates/js/translated/sales_order.js:2046 +msgid "Allocate stock" +msgstr "" + +#: templates/js/translated/build.js:2866 +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:2247 +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:1214 +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:1218 +msgid "Assembled part" +msgstr "" + +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 +msgid "No parameters found" +msgstr "" + +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 +msgid "Edit parameter" +msgstr "" + +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 +msgid "Delete parameter" +msgstr "" + +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 +msgid "Edit Parameter" +msgstr "" + +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 +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:189 +#: templates/js/translated/filters.js:670 +msgid "true" +msgstr "" + +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 +msgid "false" +msgstr "" + +#: templates/js/translated/filters.js:217 +msgid "Select filter" +msgstr "" + +#: templates/js/translated/filters.js:440 +msgid "Print Labels" +msgstr "" + +#: templates/js/translated/filters.js:444 +msgid "Print Reports" +msgstr "" + +#: templates/js/translated/filters.js:456 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:463 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:472 +msgid "Add new filter" +msgstr "" + +#: templates/js/translated/filters.js:480 +msgid "Clear all filters" +msgstr "" + +#: templates/js/translated/filters.js:580 +msgid "Create filter" +msgstr "" + +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +msgid "Action Prohibited" +msgstr "" + +#: templates/js/translated/forms.js:381 +msgid "Create operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:396 +msgid "Update operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:410 +msgid "Delete operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:424 +msgid "View operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:801 +msgid "Keep this form open" +msgstr "" + +#: templates/js/translated/forms.js:904 +msgid "Enter a valid number" +msgstr "" + +#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/modals.html:43 +msgid "Form errors exist" +msgstr "" + +#: templates/js/translated/forms.js:2008 +msgid "No results found" +msgstr "" + +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +msgid "Searching" +msgstr "" + +#: templates/js/translated/forms.js:2532 +msgid "Clear input" +msgstr "" + +#: templates/js/translated/forms.js:3134 +msgid "File Column" +msgstr "" + +#: templates/js/translated/forms.js:3134 +msgid "Field Name" +msgstr "" + +#: templates/js/translated/forms.js:3146 +msgid "Select Columns" +msgstr "" + +#: templates/js/translated/helpers.js:80 +msgid "YES" +msgstr "" + +#: templates/js/translated/helpers.js:83 +msgid "NO" +msgstr "" + +#: templates/js/translated/helpers.js:96 +msgid "True" +msgstr "" + +#: templates/js/translated/helpers.js:97 +msgid "False" +msgstr "" + +#: templates/js/translated/index.js:104 +msgid "No parts required for builds" +msgstr "" + +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:143 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 +msgid "Cancel" +msgstr "" + +#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/modals.html:28 templates/modals.html:51 +msgid "Submit" +msgstr "" + +#: templates/js/translated/modals.js:157 +msgid "Form Title" +msgstr "" + +#: templates/js/translated/modals.js:446 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/translated/modals.js:597 +msgid "Show Error Information" +msgstr "" + +#: templates/js/translated/modals.js:687 +msgid "Accept" +msgstr "" + +#: templates/js/translated/modals.js:745 +msgid "Loading Data" +msgstr "" + +#: templates/js/translated/modals.js:1016 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/translated/modals.js:1016 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/translated/modals.js:1028 +msgid "Error posting form data" +msgstr "" + +#: templates/js/translated/modals.js:1125 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/translated/modals.js:1140 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/translated/modals.js:1141 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/translated/modals.js:1164 +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:1608 +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:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 +msgid "Add Extra Line Item" +msgstr "" + +#: templates/js/translated/order.js:151 +msgid "Export Order" +msgstr "" + +#: templates/js/translated/order.js:266 +msgid "Duplicate Line" +msgstr "" + +#: templates/js/translated/order.js:280 +msgid "Edit Line" +msgstr "" + +#: templates/js/translated/order.js:293 +msgid "Delete Line" +msgstr "" + +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 +msgid "No line items found" +msgstr "" + +#: templates/js/translated/order.js:394 +msgid "Duplicate line" +msgstr "" + +#: templates/js/translated/order.js:395 +msgid "Edit line" +msgstr "" + +#: templates/js/translated/order.js:399 +msgid "Delete line" +msgstr "" + +#: templates/js/translated/part.js:91 +msgid "Part Attributes" +msgstr "" + +#: templates/js/translated/part.js:95 +msgid "Part Creation Options" +msgstr "" + +#: templates/js/translated/part.js:99 +msgid "Part Duplication Options" +msgstr "" + +#: templates/js/translated/part.js:122 +msgid "Add Part Category" +msgstr "" + +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 +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:766 +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:1210 +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:893 +msgid "Schedule generation of a new stocktake report." +msgstr "" + +#: templates/js/translated/part.js:893 +msgid "Once complete, the stocktake report will be available for download." +msgstr "" + +#: templates/js/translated/part.js:901 +msgid "Generate Stocktake Report" +msgstr "" + +#: templates/js/translated/part.js:905 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:1054 +msgid "No stocktake information available" +msgstr "" + +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 +msgid "Edit Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 +msgid "Delete Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1285 +msgid "No variants found" +msgstr "" + +#: templates/js/translated/part.js:1603 +msgid "No part parameter templates found" +msgstr "" + +#: templates/js/translated/part.js:1666 +msgid "Edit Part Parameter Template" +msgstr "" + +#: templates/js/translated/part.js:1678 +msgid "Any parameters which reference this template will also be deleted" +msgstr "" + +#: templates/js/translated/part.js:1686 +msgid "Delete Part Parameter Template" +msgstr "" + +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 +#: templates/js/translated/sales_order.js:1911 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1973 +msgid "Delete part relationship" +msgstr "" + +#: templates/js/translated/part.js:1995 +msgid "Delete Part Relationship" +msgstr "" + +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 +msgid "No parts found" +msgstr "" + +#: templates/js/translated/part.js:2204 +msgid "Set the part category for the selected parts" +msgstr "" + +#: templates/js/translated/part.js:2209 +msgid "Set Part Category" +msgstr "" + +#: templates/js/translated/part.js:2238 +msgid "Set category" +msgstr "" + +#: templates/js/translated/part.js:2290 +msgid "part" +msgstr "" + +#: templates/js/translated/part.js:2291 +msgid "parts" +msgstr "" + +#: templates/js/translated/part.js:2387 +msgid "No category" +msgstr "" + +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 +msgid "Display as list" +msgstr "" + +#: templates/js/translated/part.js:2563 +msgid "Display as grid" +msgstr "" + +#: templates/js/translated/part.js:2661 +msgid "No subcategories found" +msgstr "" + +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 +msgid "Display as tree" +msgstr "" + +#: templates/js/translated/part.js:2777 +msgid "Load Subcategories" +msgstr "" + +#: templates/js/translated/part.js:2792 +msgid "Subscribed category" +msgstr "" + +#: templates/js/translated/part.js:2880 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 +msgid "results" +msgstr "" + +#: templates/js/translated/part.js:2952 +msgid "Edit test template" +msgstr "" + +#: templates/js/translated/part.js:2953 +msgid "Delete test template" +msgstr "" + +#: templates/js/translated/part.js:2957 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/translated/part.js:2973 +msgid "Edit Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:2987 +msgid "Delete Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 +msgid "No date specified" +msgstr "" + +#: templates/js/translated/part.js:3069 +msgid "Specified date is in the past" +msgstr "" + +#: templates/js/translated/part.js:3075 +msgid "Speculative" +msgstr "" + +#: templates/js/translated/part.js:3125 +msgid "No scheduling information available for this part" +msgstr "" + +#: templates/js/translated/part.js:3131 +msgid "Error fetching scheduling information for this part" +msgstr "" + +#: templates/js/translated/part.js:3227 +msgid "Scheduled Stock Quantities" +msgstr "" + +#: templates/js/translated/part.js:3243 +msgid "Maximum Quantity" +msgstr "" + +#: templates/js/translated/part.js:3288 +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:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1237 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1238 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1241 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1368 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1370 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1396 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1464 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1465 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1479 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1751 +#: 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:1913 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1931 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1986 +#: templates/js/translated/sales_order.js:2106 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2001 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:667 +#: templates/js/translated/sales_order.js:2119 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 +#: templates/js/translated/sales_order.js:2130 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2294 +#: templates/js/translated/sales_order.js:2060 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 +#: templates/js/translated/sales_order.js:2061 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 +#: 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:560 +msgid "Receive Return Order Items" +msgstr "" + +#: templates/js/translated/return_order.js:691 +#: templates/js/translated/sales_order.js:2267 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:796 +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:1861 +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:106 +msgid "Serialize Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:137 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:173 +msgid "Add Location type" +msgstr "" + +#: templates/js/translated/stock.js:209 +msgid "Edit Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:224 +msgid "New Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:226 +msgid "Create another location after this one" +msgstr "" + +#: templates/js/translated/stock.js:227 +msgid "Stock location created" +msgstr "" + +#: templates/js/translated/stock.js:241 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: templates/js/translated/stock.js:248 +msgid "Move to parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:257 +msgid "Delete Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:261 +msgid "Action for stock items in this stock location" +msgstr "" + +#: templates/js/translated/stock.js:266 +msgid "Action for sub-locations" +msgstr "" + +#: templates/js/translated/stock.js:320 +msgid "This part cannot be serialized" +msgstr "" + +#: templates/js/translated/stock.js:356 +msgid "Add given quantity as packs instead of individual items" +msgstr "" + +#: templates/js/translated/stock.js:368 +msgid "Enter initial quantity for this stock item" +msgstr "" + +#: templates/js/translated/stock.js:374 +msgid "Enter serial numbers for new stock (or leave blank)" +msgstr "" + +#: templates/js/translated/stock.js:445 +msgid "Stock item duplicated" +msgstr "" + +#: templates/js/translated/stock.js:465 +msgid "Duplicate Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:481 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: templates/js/translated/stock.js:486 +msgid "Delete Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:507 +msgid "Edit Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:549 +msgid "Create another item after this one" +msgstr "" + +#: templates/js/translated/stock.js:561 +msgid "Created new stock item" +msgstr "" + +#: templates/js/translated/stock.js:574 +msgid "Created multiple stock items" +msgstr "" + +#: templates/js/translated/stock.js:599 +msgid "Find Serial Number" +msgstr "" + +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +msgid "Enter serial number" +msgstr "" + +#: templates/js/translated/stock.js:620 +msgid "Enter a serial number" +msgstr "" + +#: templates/js/translated/stock.js:640 +msgid "No matching serial number" +msgstr "" + +#: templates/js/translated/stock.js:649 +msgid "More than one matching result found" +msgstr "" + +#: templates/js/translated/stock.js:757 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:758 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:835 +msgid "Warning: Merge operation cannot be reversed" +msgstr "" + +#: templates/js/translated/stock.js:836 +msgid "Some information will be lost when merging stock items" +msgstr "" + +#: templates/js/translated/stock.js:838 +msgid "Stock transaction history will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:839 +msgid "Supplier part information will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:933 +msgid "Confirm stock item merge" +msgstr "" + +#: templates/js/translated/stock.js:934 +msgid "Merge Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1031 +msgid "Transfer Stock" +msgstr "" + +#: templates/js/translated/stock.js:1032 +msgid "Move" +msgstr "" + +#: templates/js/translated/stock.js:1038 +msgid "Count Stock" +msgstr "" + +#: templates/js/translated/stock.js:1039 +msgid "Count" +msgstr "" + +#: templates/js/translated/stock.js:1043 +msgid "Remove Stock" +msgstr "" + +#: templates/js/translated/stock.js:1044 +msgid "Take" +msgstr "" + +#: templates/js/translated/stock.js:1048 +msgid "Add Stock" +msgstr "" + +#: templates/js/translated/stock.js:1049 users/models.py:396 +msgid "Add" +msgstr "" + +#: templates/js/translated/stock.js:1053 +msgid "Delete Stock" +msgstr "" + +#: templates/js/translated/stock.js:1152 +msgid "Quantity cannot be adjusted for serialized stock" +msgstr "" + +#: templates/js/translated/stock.js:1152 +msgid "Specify stock quantity" +msgstr "" + +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1257 +msgid "Select at least one available stock item" +msgstr "" + +#: templates/js/translated/stock.js:1303 +msgid "Confirm stock adjustment" +msgstr "" + +#: templates/js/translated/stock.js:1448 +msgid "PASS" +msgstr "" + +#: templates/js/translated/stock.js:1450 +msgid "FAIL" +msgstr "" + +#: templates/js/translated/stock.js:1455 +msgid "NO RESULT" +msgstr "" + +#: templates/js/translated/stock.js:1535 +msgid "Pass test" +msgstr "" + +#: templates/js/translated/stock.js:1538 +msgid "Add test result" +msgstr "" + +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 +msgid "No test results found" +msgstr "" + +#: templates/js/translated/stock.js:1625 +msgid "Test Date" +msgstr "" + +#: templates/js/translated/stock.js:1638 +msgid "Test started" +msgstr "" + +#: templates/js/translated/stock.js:1647 +msgid "Test finished" +msgstr "" + +#: templates/js/translated/stock.js:1801 +msgid "Edit Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1821 +msgid "Delete Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1853 +msgid "In production" +msgstr "" + +#: templates/js/translated/stock.js:1857 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:1865 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/translated/stock.js:1871 +msgid "No stock location set" +msgstr "" + +#: templates/js/translated/stock.js:1927 +msgid "Change stock status" +msgstr "" + +#: templates/js/translated/stock.js:1936 +msgid "Merge stock" +msgstr "" + +#: templates/js/translated/stock.js:1985 +msgid "Delete stock" +msgstr "" + +#: templates/js/translated/stock.js:2038 +msgid "stock items" +msgstr "" + +#: templates/js/translated/stock.js:2043 +msgid "Scan to location" +msgstr "" + +#: templates/js/translated/stock.js:2054 +msgid "Stock Actions" +msgstr "" + +#: templates/js/translated/stock.js:2098 +msgid "Load installed items" +msgstr "" + +#: templates/js/translated/stock.js:2176 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/translated/stock.js:2181 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/translated/stock.js:2184 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/translated/stock.js:2187 +msgid "Serialized stock item has been allocated" +msgstr "" + +#: templates/js/translated/stock.js:2189 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:2191 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:2194 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:2196 +msgid "Stock item has been consumed by a build order" +msgstr "" + +#: templates/js/translated/stock.js:2200 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/translated/stock.js:2202 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/translated/stock.js:2207 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/translated/stock.js:2209 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/translated/stock.js:2211 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/translated/stock.js:2215 +#: templates/js/translated/table_filters.js:350 +msgid "Depleted" +msgstr "" + +#: templates/js/translated/stock.js:2380 +msgid "Supplier part not specified" +msgstr "" + +#: templates/js/translated/stock.js:2427 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2555 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/translated/stock.js:2658 +msgid "stock locations" +msgstr "" + +#: templates/js/translated/stock.js:2813 +msgid "Load Sublocations" +msgstr "" + +#: templates/js/translated/stock.js:2930 +msgid "Details" +msgstr "" + +#: templates/js/translated/stock.js:2934 +msgid "No changes" +msgstr "" + +#: templates/js/translated/stock.js:2946 +msgid "Part information unavailable" +msgstr "" + +#: templates/js/translated/stock.js:2968 +msgid "Location no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2985 +msgid "Build order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3000 +msgid "Purchase order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3017 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3034 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3053 +msgid "Customer no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3071 +msgid "Stock item no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3089 +msgid "Added" +msgstr "" + +#: templates/js/translated/stock.js:3097 +msgid "Removed" +msgstr "" + +#: templates/js/translated/stock.js:3169 +msgid "No installed items" +msgstr "" + +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +msgid "Uninstall Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:3280 +msgid "Select stock item to uninstall" +msgstr "" + +#: templates/js/translated/stock.js:3301 +msgid "Install another stock item into this item" +msgstr "" + +#: templates/js/translated/stock.js:3302 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: templates/js/translated/stock.js:3304 +msgid "The Stock Item links to a Part which is the BOM for this Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:3305 +msgid "The Stock Item is currently available in stock" +msgstr "" + +#: templates/js/translated/stock.js:3306 +msgid "The Stock Item is not already installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:3307 +msgid "The Stock Item is tracked by either a batch code or serial number" +msgstr "" + +#: templates/js/translated/stock.js:3320 +msgid "Select part to install" +msgstr "" + +#: templates/js/translated/stock.js:3383 +msgid "Select one or more stock items" +msgstr "" + +#: templates/js/translated/stock.js:3396 +msgid "Selected stock items" +msgstr "" + +#: templates/js/translated/stock.js:3400 +msgid "Change Stock Status" +msgstr "" + +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 +msgid "Order status" +msgstr "" + +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 +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:725 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:778 +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:714 +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:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:726 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:731 +msgid "Show active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 +msgid "Available stock" +msgstr "" + +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 +msgid "Has Units" +msgstr "" + +#: templates/js/translated/table_filters.js:753 +msgid "Part has defined units" +msgstr "" + +#: templates/js/translated/table_filters.js:757 +msgid "Has IPN" +msgstr "" + +#: templates/js/translated/table_filters.js:758 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/translated/table_filters.js:762 +msgid "In stock" +msgstr "" + +#: templates/js/translated/table_filters.js:770 +msgid "Purchasable" +msgstr "" + +#: templates/js/translated/table_filters.js:782 +msgid "Has stocktake entries" +msgstr "" + +#: templates/js/translated/table_filters.js:848 +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: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/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +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:379 +msgid "Permission set" +msgstr "" + +#: users/models.py:388 +msgid "Group" +msgstr "" + +#: users/models.py:392 +msgid "View" +msgstr "" + +#: users/models.py:392 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:396 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:400 +msgid "Change" +msgstr "" + +#: users/models.py:402 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:408 +msgid "Permission to delete items" +msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index b2c3121cc6..d68d86d86a 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:03\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "Не е намерена крайна точка на API" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Потребителя няма нужното разрешение, за да вижда този модел" @@ -52,30 +52,34 @@ msgstr "Зададено е недопустимо количество ({exc})" msgid "Error details can be found in the admin panel" msgstr "Подробности за грешката могат да се намерят в администраторския панел" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Въведи дата" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Бележки" @@ -88,258 +92,270 @@ msgstr "Значението '{name}' не отговаря на шаблона" msgid "Provided value does not match required pattern: " msgstr "Въведеното значение не отговаря на задължителния шаблон: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Въведете парола" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Въведи нова парола" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Потвърди паролата" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Потвърди нова парола" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Стара парола" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Е-поща отново" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Потвърждение на електронната поща" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Трябва ла въведете една и съща електронна поща." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Въведената основна електронна поща е невалидна." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Въведеният домейн на електронната поща не е утвърден." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Регистрацията е деактивирана." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Въведена е недопустима стойност" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Липсва сериен номер" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Повтарящ се сериен номер" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Невалиден диапазон от групи: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Не са открити серийни номера" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Премахнете HTML маркерите от тази стойност" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Грешка при съединението" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Сървърът отговари с невалиден статусен код" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Възникна изключение" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Сървърът отговори с невалидна стойност за дължината на съдържанието (Content-Length)" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Размерът на изображението е твърде голям" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Сваляното на изображение превиши максималния размер" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Отдалеченият сървър върна празен отговор" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 +msgid "French" +msgstr "" + +#: InvenTree/locales.py:31 +msgid "Hebrew" +msgstr "" + +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Хинди" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Унгарски" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Италиански" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Японски" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Корейски" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Нидерландски" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Норвежки" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Полски" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Португалски" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Португалски (Бразилия)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Руски" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Словенски" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Шведски" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Тайландски" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Турски" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Виетнамски" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Китайски (опростен)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Китайски (традиционен)" @@ -348,257 +364,165 @@ msgstr "Китайски (традиционен)" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "родител" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Част" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Потребител" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Изгубен" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Върнат" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Изпълнява се" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Цялостна наличност" @@ -6010,1042 +6579,1144 @@ msgstr "Цялостна наличност" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Наличност" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Няма наличност" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 999bdb01d1..8e092916f3 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:03\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint nebyl nalezen" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Uživatel nemá právo zobrazit tento model" @@ -52,30 +52,34 @@ msgstr "Vyplněno neplatné množství ({exc})" msgid "Error details can be found in the admin panel" msgstr "Podrobnosti o chybě lze nalézt v panelu administrace" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Zadejte datum" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Poznámky" @@ -88,258 +92,270 @@ msgstr "Hodnota '{name}' neodpovídá formátu vzoru" msgid "Provided value does not match required pattern: " msgstr "Poskytnutá hodnota neodpovídá požadovanému vzoru: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Zadejte heslo" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Zadejte nové heslo" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Potvrďte heslo" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Potvrďte nové heslo" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Původní heslo" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (znovu)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Potvrzení emailové adresy" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Pokaždé musíte zadat stejný email." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Zadaná primární e-mailová adresa je neplatná." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Zadaná e-mailová doména není povolena." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Registrace vypnuta." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Nevyplněné výrobní číslo" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Duplicitní výrobní číslo" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Neplatný rozsah skupiny: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rozsah skupiny {group} překračuje povolené množství ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Neplatná sekvence skupiny: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Nenalezena žádná výrobní čísla" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Počet jedinečných sériových čísel ({len(serials)}) musí odpovídat množství ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Odstranit HTML tagy z této hodnoty" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Chyba spojení" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Server odpověděl s neplatným stavovým kódem" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Došlo k výjimce" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Server odpověděl s neplatnou hodnotou Content-Length" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Velikost obrázku je příliš velká" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Stahování obrázku překročilo maximální velikost" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Vzdálený server vrátil prázdnou odpověď" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Zadaná URL adresa není platný soubor obrázku" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulharština" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Čeština" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Dánština" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Němčina" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Řečtina" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Angličtina" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Španělština" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Španělština (Mexiko)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Perština" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finština" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Francouzština" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebrejština" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hindština" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Maďarština" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italština" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japonština" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Korejština" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "Lotyština" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Nizozemština" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norština" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polština" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugalština" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugalština (Brazilská)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Rumunština" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Ruština" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Slovenština" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slovinština" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Srbština" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Švédština" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Thajština" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turečtina" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "Ukrajinština" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamština" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Čínština (zjednodušená)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Čínština (tradiční)" @@ -348,257 +364,165 @@ msgstr "Čínština (tradiční)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Přihlásit se do aplikace" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-mail" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Chyba při ověření pluginu" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metadata musí být objekt python dict" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Metadata pluginu" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "Pole metadat JSON pro použití externími pluginy" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Nesprávně naformátovaný vzor" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Neznámý formát klíče" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Chybí požadovaný klíč" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Referenční pole nemůže být prázdné" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Referenční číslo musí odpovídat požadovanému vzoru" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Referenční číslo je příliš velké" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Chybějící soubor" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Chybějící externí odkaz" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Příloha" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Vyberte soubor k přiložení" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Odkaz na externí URL" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Komentář" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Komentář k souboru" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "datum přidání" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Název souboru nesmí být prázdný" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Neplatný adresář přílohy" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Název souboru obsahuje nepovolený znak '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Chybějící přípona souboru" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Příloha s tímto názvem již existuje" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Chyba při přejmenování souboru" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 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:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Název" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Popis" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "nadřazený" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Cesta" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Poznámky (volitelné)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Data čárového kódu" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Data čárového kódu třetí strany" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Hash čárového kódu" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Jedinečný hash dat čárového kódu" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Nalezen existující čárový kód" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Chyba serveru" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Server zaznamenal chybu." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Měna" msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Uživatelské jméno" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Křestní jméno" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "Křestní jméno uživatele" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Příjmení" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "Příjmení uživatele" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "Emailová adresa uživatele" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "Personál" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "Má tento uživatel oprávnění personálu" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "Super-uživatel" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "Je tento uživatel superuživatel" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Aktivní" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "Je tento uživatelský účet aktivní" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Nemáte oprávnění měnit tuto uživatelskou roli." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Pouze superuživatelé mohou vytvářet nové uživatele" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Váš účet byl vytvořen." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Pro přihlášení použijte funkci obnovení hesla" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Vítejte v InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Název souboru" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Neplatná hodnota" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Datový soubor" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Vyberte datový soubor k nahrání" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Nepodporovaný typ souboru" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Soubor je příliš velký" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "V souboru nebyly nalezeny žádné sloupce" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "V souboru nebyly nalezeny žádné řádky s daty" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Nebyly zadány žádné řádky s daty" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Nebyly zadány žádné sloupce s daty" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Chybí povinný sloupec: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplicitní sloupec: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Vzdálený obraz" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL souboru vzdáleného obrázku" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Kontrola procesů na pozadí se nezdařila" @@ -702,27 +679,27 @@ msgstr "Email backend není nakonfigurován" msgid "InvenTree system health checks failed" msgstr "Kontroly zdraví systému InvenTree selhaly" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Neznámá databáze" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Neplatná fyzikální jednotka" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Neplatný kód měny" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Přidaná hodnota nesmí být záporná" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Nesmí přesáhnout 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Neplatná hodnota překročení" @@ -750,62 +727,63 @@ msgstr "Informace o systému" msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:255 +#: build/api.py:247 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:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Volitelné" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Sledováno" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Přiděleno" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Dostupné" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Vytvořit objednávku" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Vytvořit objednávku" msgid "Build Orders" msgstr "Vytvořené objednávky" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Neplatná volba nadřazeného sestavení" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 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:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Díly obědnávky sestavení nemohou být změněny" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Referenční číslo objednávky" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Reference" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Stručný popis sestavení (nepovinné)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Nadřazená sestava" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Příkaz sestavení pro který je toto sestavení přiděleno" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Příkaz sestavení pro který je toto sestavení přiděleno" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Díl" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Vyber téma, které chceš stavět" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Referenční číslo prodejní objednávky" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Prodejní příkaz, kterému je tato verze přidělena" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Umístění lokace" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Cílová lokace" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Vyberte lokaci, kde budou dokončené položky uloženy" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Množství sestav" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Počet skladových položek k sestavení" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Dokončené položky" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Počet skladových položek, které byly dokončeny" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Stav sestavení" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Kód dávky" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Datum vytvoření" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Cílové datum dokončení" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Datum dokončení" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "dokončil" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Vystavil" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Uživatel, který vydal tento příkaz k sestavení" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Odpovědný" -#: build/models.py:339 +#: build/models.py:371 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:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externí odkaz" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Odkaz na externí URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "Priorita sestavení" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Priorita tohoto příkazu k sestavení" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Priorita tohoto příkazu k sestavení" msgid "Project Code" msgstr "Kód projektu" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Kód projektu pro objednávku sestavení" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "Nepodařilo se uvolnit úlohu pro dokončení přidělení sestavy" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Příkaz k sestavení {build} byl dokončen" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Příkaz k sestavení byl dokončen" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Výstup sestavení je již dokončen" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "Výstup sestavení neodpovídá příkazu sestavení" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 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:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, 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:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "Vytvořit položku řádku objednávky" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Vytvořit objekt" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Vytvořit objekt" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Množství" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Vyžadované množství pro objednávku" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Množství musí být 1 pro zřetězený sklad" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "Vybraná položka zásob neodpovídá řádku BOM" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Skladové položky" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Cílová skladová položka" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Název dílu" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "Výstupní část se neshoduje s částí příkazu sestavení" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Tento stavební výstup není plně přiřazen" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:279 +#: build/serializers.py:289 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:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Sériová čísla" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Zadejte sériová čísla pro sestavení výstupů" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Lokace" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "Skladové umístění pro výstup sestavy" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Automaticky zvolit sériová čísla" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automaticky přidělit požadované položky s odpovídajícími sériovými čísly" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "U sledovatelných dílů musí být uvedena sériová čísla" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "Následující sériová čísla již existují nebo jsou neplatná" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "Musí být uveden seznam výstupů sestavy" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Umístění zásob pro seškrábnuté výstupy" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Zahodit alokace" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "Vyřadit všechny přidělené zásoby pro vyřazené výstupy" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Důvod vyřazení výstupu(ů) sestavy" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "Umístění dokončených výstupů sestavy" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Stav" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Přijmout neúplné přidělení" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "Dokončit výstupy pokud zásoby nebyly plně přiděleny" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "Spotřebovat přidělené zásoby" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "Spotřebovat všechny zásoby, které již byly přiděleny této sestavě" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Odstranit neúplné výstupy" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "Odstranit všechny výstupy sestavy, které nebyly dokončeny" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Není povoleno" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Přijmout jako spotřebované touto objednávkou sestavy" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "Uvolnit před dokončením této objednávky sestavy" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Nadměrně přidělené zásoby" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Jak chcete zacházet s extra skladovými položkami přiřazenými k objednávce na sestavu" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Některé skladové položky byly nadměrně přiděleny" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Přijmout nepřidělené" -#: build/serializers.py:697 +#: build/serializers.py:734 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Přijmout, že skladové položky nebyly plně přiřazeny k této objednávce sestavy" -#: build/serializers.py:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Požadované zásoby nebyly plně přiděleny" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Přijmout neúplné" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "Přijmout, že nebyl dokončen požadovaný počet výstupů sestavy" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Požadované množství sestavy nebylo dokončeno" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "Objednávka sestavy má neúplné výstupy" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Linka sestavy" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Výstup sestavy" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "Výstup sestavy musí odkazovat na stejnou sestavu" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Řádková položka sestavy" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part musí ukazovat na stejný díl jako objednávka sestavy" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "Položka musí být skladem" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupné množství ({q}) překročeno" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "Pro přidělení sledovaných dílů musí být zadán výstup sestavy" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Výstup sestavy nelze zadat pro přidělení nesledovaných dílů" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Položky přidělení musí být poskytnuty" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Skladové místo, odkud se mají díly odebírat (ponechte prázdné, pokud chcete odebírat z libovolného místa)" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Vyloučit skladové položky z tohoto vybraného umístění" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Zaměnitelné zásoby" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Skladové položky na více místech lze používat zaměnitelně" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Náhradní zásoby" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Povolit přidělování náhradních dílů" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "Přiřazení volitelných BOM položek k objednávce sestavy" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "Nepodařilo se spustit úlohu automatického přidělování" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Číslo dílu výrobce" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Balení" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "ID dílu" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "IPN dílu" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Popis dílu" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Sledovatelné" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "BOM Položka" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Přidělené zásoby" -#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Na objednávku" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Ve výrobě" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Dostupné zásoby" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Nevyřízeno" @@ -1540,15 +1677,21 @@ msgstr "Nevyřízeno" 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 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Hotovo" @@ -1576,8 +1719,8 @@ msgstr "Miniatura dílu" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Akce čárového kódu" @@ -1588,7 +1731,7 @@ msgstr "Akce čárového kódu" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Zobrazit QR kód" @@ -1599,9 +1742,9 @@ msgstr "Zobrazit QR kód" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Odstranit čárový kód" @@ -1612,7 +1755,7 @@ msgstr "Odstranit čárový kód" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Přiřadit čárový kód" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Upravit sestavu" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Zrušit sestavu" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "Duplikovat sestavu" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Zrušit sestavu" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Smazat sestavu" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Dokončit sestavu" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Popis sestavy" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Pro tuto objednávku sestavy nebyly vytvořeny žádné výstupy sestavy" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Objednávka sestavy je připravena k označení jako dokončená" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Objednávku sestavy nelze dokončit, protože zbývají nevyřízené výstupy" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Požadované množství sestavy ještě nebylo dokončeno" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "Zásoby nebyly plně přiřazeny k této objednávce na sestavu" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Cílené datum" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Tato sestava byla splatná v %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Po splatnosti" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Dokončené výstupy" -#: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Dokončené výstupy" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Prodejní objednávka" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Vystavil" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Priorita" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "Odstranit objednávku sestavy" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "QR kód objednávky sestavy" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "Propojit čárový kód s objednávkou sestavy" @@ -1766,8 +1930,8 @@ msgstr "Zdroj zásob" msgid "Stock can be taken from any available location." msgstr "Zásoby lze odebírat z jakéhokoli dostupného umístění." -#: build/templates/build/detail.html:49 order/models.py:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Místo určení" @@ -1779,23 +1943,23 @@ msgstr "Místo určení není specifikováno" msgid "Allocated Parts" msgstr "Přidělené díly" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "Šarže" #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Vytvořeno" @@ -1804,8 +1968,8 @@ msgid "No target date set" msgstr "Nenastaveno cílené datum" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Dokončeno" @@ -1813,13 +1977,13 @@ msgstr "Dokončeno" msgid "Build not complete" msgstr "Sestava není dokončena" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Podřízené objednávky sestavy" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Přiděleit zásoby k sestavě" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Automaticky přiřadit" msgid "Manually allocate stock to build" msgstr "Manuálně přiřadit zásoby k sestavě" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Přidělit zásoby" @@ -1870,15 +2034,19 @@ msgstr "Vytvořit nový výstup sestavy" msgid "New Build Output" msgstr "Nový výstup sestavy" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "Spotřebované zásoby" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Dokončené výstupy sestavy" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Dokončené výstupy sestavy" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Přílohy" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Poznámky k sestavě" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "Přidělení dokončeno" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "Všechny řádky byly plně přiděleny" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Objednávka nové sestavy" @@ -1914,10 +2082,37 @@ msgstr "Objednávka nové sestavy" msgid "Build Order Details" msgstr "Podrobnosti o objednávce sestavy" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "Řádkové položky" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Neúplné výstupy" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "Je odkaz" + +#: common/api.py:700 +msgid "Is File" +msgstr "Je soubor" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "Uživatel nemá oprávnění k odstranění této přílohy" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "Neplatný kód měny" @@ -1930,7 +2125,7 @@ msgstr "Duplicitní kód měny" msgid "No valid currency codes provided" msgstr "Nejsou uvedeny žádné platné kódy měn" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Žádný plugin" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Soubor" msgid "Select {name} file to upload" msgstr "Vyberte {name} soubor k nahrání" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Aktualizováno" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Časové razítko poslední aktualizace" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "Adresa URL webu je uzamčena konfigurací" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Jedinečný kód projektu" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Popis projektu" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "Uživatel nebo skupina odpovědná za tento projekt" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "Klíč nastavení (musí být unikátní - rozlišuje malá a velká písmena)" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "Hodnota nastavení" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "Zvolená hodnota není platnou možností" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Hodnota musí být logická hodnota" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Hodnota musí být celé číslo" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Klíčový text musí být jedinečný" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Žádná skupina" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Je vyžadován restart" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "Bylo změněno nastavení, které vyžaduje restart serveru" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Nevyřízené migrace" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "Počet nevyřízených migrací databáze" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Název instance serveru" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "Textový popisovač pro instanci serveru" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Použít název instance" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "Použít název instance v liště" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Omezit zobrazování `o aplikaci`" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "Zobrazovat okno `o aplikaci` pouze superuživatelům" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Jméno společnosti" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Interní název společnosti" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Základní URL" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "Základní URL pro instanci serveru" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Výchozí měna" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "Vyberte základní měnu pro cenové kalkulace" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "Podporované měny" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "Seznam podporovaných kódů měn" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "Interval aktualizace měny" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Jak často aktualizovat směnné kurzy (pro vypnutí nastavte na nulu)" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "dny" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "Plugin aktualizace měny" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "Plugin pro aktualizaci měn k použití" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Stáhnout z URL" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "Povolit stahování vzdálených obrázků a souborů z externích URL" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" -msgstr "" - -#: common/models.py:1295 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/models.py:1301 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/models.py:1303 -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:1308 -msgid "Strict URL Validation" -msgstr "" - -#: common/models.py:1309 -msgid "Require schema specification when validating URLs" -msgstr "" +msgstr "Limit velikosti stahování" #: common/models.py:1314 -msgid "Require confirm" -msgstr "" - -#: common/models.py:1315 -msgid "Require explicit user confirmation for certain action." -msgstr "" +msgid "Maximum allowable download size for remote image" +msgstr "Maximální povolená velikost stahování vzdáleného obrázku" #: common/models.py:1320 -msgid "Tree Depth" -msgstr "" +msgid "User-agent used to download from URL" +msgstr "User-agent použitý ke stažení z adresy URL" #: common/models.py:1322 -msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "" +msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" +msgstr "Povolit přepsání user-agenta používaného ke stahování obrázků a souborů z externí adresy URL (ponechte prázdné pro výchozí)" + +#: common/models.py:1327 +msgid "Strict URL Validation" +msgstr "Přísná validace URL" #: common/models.py:1328 -msgid "Update Check Interval" -msgstr "" +msgid "Require schema specification when validating URLs" +msgstr "Vyžadovat specifikaci schématu při ověřování adres URL" -#: common/models.py:1329 -msgid "How often to check for updates (set to zero to disable)" -msgstr "" +#: common/models.py:1333 +msgid "Require confirm" +msgstr "Vyžadovat potvrzení" -#: common/models.py:1335 -msgid "Automatic Backup" -msgstr "" +#: common/models.py:1334 +msgid "Require explicit user confirmation for certain action." +msgstr "Vyžadovat výslovné potvrzení uživatele pro určitou akci." -#: common/models.py:1336 -msgid "Enable automatic backup of database and media files" -msgstr "" +#: common/models.py:1339 +msgid "Tree Depth" +msgstr "Hloubka stromu" #: common/models.py:1341 -msgid "Auto Backup Interval" -msgstr "" +msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." +msgstr "Výchozí hloubka stromu pro zobrazení stromu. Hlubší úrovně lze načítat líně podle potřeby." -#: common/models.py:1342 -msgid "Specify number of days between automated backup events" -msgstr "" +#: common/models.py:1347 +msgid "Update Check Interval" +msgstr "Interval kontroly aktualizací" #: common/models.py:1348 +msgid "How often to check for updates (set to zero to disable)" +msgstr "Jak často kontrolovat aktualizace (nastavte na nulu pro vypnutí)" + +#: common/models.py:1354 +msgid "Automatic Backup" +msgstr "Automatické Zálohování" + +#: common/models.py:1355 +msgid "Enable automatic backup of database and media files" +msgstr "Povolit automatické zálohování databáze a mediálních souborů" + +#: common/models.py:1360 +msgid "Auto Backup Interval" +msgstr "Interval automatického zálohování" + +#: common/models.py:1361 +msgid "Specify number of days between automated backup events" +msgstr "Zadejte počet dní mezi automatickými zálohovými událostmi" + +#: common/models.py:1367 msgid "Task Deletion Interval" -msgstr "" +msgstr "Interval mazání úloh" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1357 -msgid "Error Log Deletion Interval" -msgstr "" - -#: common/models.py:1359 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1366 -msgid "Notification Deletion Interval" -msgstr "" - -#: common/models.py:1368 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 -msgid "Barcode Support" -msgstr "" +msgstr "Výsledky úloh na pozadí budou odstraněny po zadaném počtu dní" #: common/models.py:1376 -msgid "Enable barcode scanner support in the web interface" -msgstr "" +msgid "Error Log Deletion Interval" +msgstr "Interval odstranění protokolu chyb" -#: common/models.py:1381 -msgid "Barcode Input Delay" -msgstr "" +#: common/models.py:1378 +msgid "Error logs will be deleted after specified number of days" +msgstr "Záznamy chyb budou odstraněny po zadaném počtu dní" -#: common/models.py:1382 -msgid "Barcode input processing delay time" -msgstr "" +#: common/models.py:1385 +msgid "Notification Deletion Interval" +msgstr "Interval pro odstranění oznámení" -#: common/models.py:1388 -msgid "Barcode Webcam Support" -msgstr "" +#: common/models.py:1387 +msgid "User notifications will be deleted after specified number of days" +msgstr "Uživatelská oznámení budou smazána po zadaném počtu dní" -#: common/models.py:1389 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1394 -msgid "Part Revisions" -msgstr "" +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Podpora čárových kódů" #: common/models.py:1395 -msgid "Enable revision field for Part" -msgstr "" +msgid "Enable barcode scanner support in the web interface" +msgstr "Povolit podporu pro skenování čárových kódů ve webovém rozhraní" #: common/models.py:1400 -msgid "Allow Deletion from Assembly" -msgstr "" +msgid "Barcode Input Delay" +msgstr "Zpoždění vstupu čárového kódu" #: common/models.py:1401 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1406 -msgid "IPN Regex" -msgstr "" +msgid "Barcode input processing delay time" +msgstr "Doba zpoždění zpracování vstupu čárového kódu" #: common/models.py:1407 +msgid "Barcode Webcam Support" +msgstr "Podpora webové kamery pro čárové kódy" + +#: common/models.py:1408 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Povolit skenování čárových kódů přes webovou kameru v prohlížeči" + +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 +msgid "Part Revisions" +msgstr "Revize dílu" + +#: common/models.py:1426 +msgid "Enable revision field for Part" +msgstr "Povolit pole revize pro díl" + +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 +msgid "Allow Deletion from Assembly" +msgstr "Povolit odstranění ze sestavy" + +#: common/models.py:1438 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "Povolit odstranění dílů, které jsou použity v sestavě" + +#: common/models.py:1443 +msgid "IPN Regex" +msgstr "IPN Regex" + +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1410 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1411 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1416 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1417 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1422 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1423 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1428 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1429 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1434 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1435 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1440 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1441 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: 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 "" +msgstr "Regulární vzorec výrazu pro odpovídající IPN dílu" #: common/models.py:1447 -msgid "Parts are templates by default" -msgstr "" +msgid "Allow Duplicate IPN" +msgstr "Povolit duplicitní IPN" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: 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:1448 +msgid "Allow multiple parts to share the same IPN" +msgstr "Povolit více dílům sdílet stejný IPN" #: common/models.py:1453 -msgid "Parts can be assembled from other components by default" -msgstr "" +msgid "Allow Editing IPN" +msgstr "Povolit editaci IPN" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1454 +msgid "Allow changing the IPN value while editing a part" +msgstr "Povolit změnu IPN při úpravách dílu" + +#: common/models.py:1459 +msgid "Copy Part BOM Data" +msgstr "Kopírovat data BOM dílu" + +#: common/models.py:1460 +msgid "Copy BOM data by default when duplicating a part" +msgstr "Kopírovat data BOM ve výchozím nastavení při duplikování dílu" + +#: common/models.py:1465 +msgid "Copy Part Parameter Data" +msgstr "Kopírovat data parametrů dílu" + +#: common/models.py:1466 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Kopírovat data parametrů ve výchozím nastavení při duplikování dílu" + +#: common/models.py:1471 +msgid "Copy Part Test Data" +msgstr "Kopírovat zkušební data dílu" + +#: common/models.py:1472 +msgid "Copy test data by default when duplicating a part" +msgstr "Kopírovat testovací data ve výchozím nastavení při duplikování dílu" + +#: common/models.py:1477 +msgid "Copy Category Parameter Templates" +msgstr "Kopírovat šablony parametrů kategorie" + +#: common/models.py:1478 +msgid "Copy category parameter templates when creating a part" +msgstr "Kopírování šablon parametrů kategorie při vytváření dílu" + +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:786 +msgid "Template" +msgstr "Šablona" + +#: common/models.py:1484 +msgid "Parts are templates by default" +msgstr "Díly jsou ve výchozím nastavení šablony" + +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:740 +msgid "Assembly" +msgstr "Sestava" + +#: common/models.py:1490 +msgid "Parts can be assembled from other components by default" +msgstr "Díly lze ve výchozím nastavení sestavit z jiných komponentů" + +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Komponent" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "Díly lze ve výchozím nastavení použít jako dílčí komponenty" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Možné zakoupit" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Prodejné" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Díly jsou prodejné ve výchozím nastavení" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Díly jsou sledovatelné ve výchozím nastavení" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Nehmotné (virtuální)" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Díly jsou nehmotné (virtuální) ve výchozím nastavení" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Zobrazit Import v zobrazeních" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "Zobrazit průvodce importem v některých zobrazeních dílu" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Zobrazit související díly" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Zobrazit související díly pro díl" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Počáteční údaje zásob" -#: common/models.py:1501 +#: common/models.py:1538 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:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Počáteční údaje dodavatele" -#: common/models.py:1508 +#: common/models.py:1545 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:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Formát zobrazení jména dílu" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Formát pro zobrazení názvu dílu" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "Výchozí ikona kategorie dílu" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "Výchozí ikona kategorie dílu (prázdné znamená bez ikony)" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "Vynutit jednotky parametru" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "Pokud jsou uvedeny jednotky, musí hodnoty parametrů odpovídat zadaným jednotkám" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "Minimální počet desetinných míst u cen" -#: common/models.py:1536 +#: common/models.py:1574 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:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "Maximální počet desetinných míst u cen" -#: common/models.py:1549 +#: common/models.py:1587 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:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Použít ceny dodavatele" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Zahrnout cenová zvýhodnění dodavatelů do celkových cenových kalkulací" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Přepsání historie nákupu" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historické ceny nákupních objednávek mají přednost před cenovými zvýhodněními dodavatele" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Použít ceny skladových položek" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Použít ceny z ručně zadaných skladových údajů pro cenové kalkulace" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Stáří cen skladových položek" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Vyloučit skladové položky starší než tento počet dní z cenových kalkulací" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Použít cenu varianty" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "Zahrnutí cen variant do celkových cenových kalkulací" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Pouze aktivní varianty" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "Pro výpočet ceny varianty použijte pouze aktivní díly varianty" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "Interval přestavby cen" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "Počet dní před automatickou aktualizací cen dílů" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Interní ceny" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Povolit interní ceny pro díly" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Přepis interní ceny" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "Pokud jsou k dispozici, interní ceny mají přednost před výpočty cenového rozpětí" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Povolit tisk štítků" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Povolit tisk štítků z webového rozhraní" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "DPI rozlišení štítků" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Rozlišení DPI při generování obrazových souborů, které se dodávají do zásuvných modulů pro tisk štítků" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Povolit reporty" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Povolit generování reportů" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Režim ladění chyb" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Generovat reporty v režimu ladění (HTML výstup)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "Zaznamenávat chyby reportů" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "Zaznamenávat chyby, které se vyskytnou při vytváření reportů" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Velikost stránky" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Výchozí velikost stránky pro PDF reporty" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Povolit testovací reporty" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Povolit generování zkušebních reportů" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Připojit testovací reporty" -#: common/models.py:1676 +#: common/models.py:1714 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:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "Globálně unikátní sériová čísla" -#: common/models.py:1683 +#: common/models.py:1721 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:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Automaticky vyplnit sériová čísla" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "Automaticky vyplnit sériová čísla ve formulářích" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "Odstranit vyčerpané zásoby" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "Určuje výchozí chování při vyčerpání zásoby položky" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "Šablona kódu dávky" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "Šablona pro generování výchozích kódů dávky pro skladové položky" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Expirace zásob" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "Povolit funkci expirace zásob" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "Prodat prošlé zásoby" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "Povolit prodej prošlých zásob" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Čas stáří zásob" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "Počet dnů, po které jsou skladové položky považovány za nevyužité před uplynutím doby expirace" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Sestavit prošlé zásoby" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "Povolit sestavování s prošlými zásobami" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "Kontrola vlastnictví zásob" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "Umožnit kontrolu vlastnictví nad skladovými místy a položkami" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "Výchozí ikona umístění zásob" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "Výchozí ikona umístění zásob (prázdné znamená bez ikony)" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "Zobrazit nainstalované skladové položky" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "Zobrazit nainstalované skladové položky ve skladových tabulkách" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "Zkontrolovat BOM při instalaci položek" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Nainstalované skladové položky musí existovat v BOM pro nadřazený díl" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "Povolit převod mimo sklad" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Umožnit přesun skladových položek, které nejsou na skladě, mezi skladovými místy" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Referenční vzor objednávky sestavy" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole Objednávka sestavy" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "Vyžadovat odpovědného vlastníka" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "Ke každé objednávce musí být přiřazen odpovědný vlastník" -#: common/models.py:1783 +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "Blokovat, dokud testy neprojdou" -#: common/models.py:1785 +#: common/models.py:1844 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Zabránit dokončení výstupů sestavy, dokud neprojdou všechny požadované testy" -#: common/models.py:1791 +#: common/models.py:1850 msgid "Enable Return Orders" msgstr "Povolit vracení objednávek" -#: common/models.py:1792 +#: common/models.py:1851 msgid "Enable return order functionality in the user interface" msgstr "Povolit funkci vrácení objednávky v uživatelském rozhraní" -#: common/models.py:1797 +#: common/models.py:1856 msgid "Return Order Reference Pattern" msgstr "Referenční vzor návratové objednávky" -#: common/models.py:1799 +#: common/models.py:1858 msgid "Required pattern for generating Return Order reference field" msgstr "Požadovaný vzor pro vygenerování referenčního pole Návratová objednávka" -#: common/models.py:1811 +#: common/models.py:1870 msgid "Edit Completed Return Orders" msgstr "Úprava dokončených návratových objednávek" -#: common/models.py:1813 +#: common/models.py:1872 msgid "Allow editing of return orders after they have been completed" msgstr "Umožnit úpravu návratových objednávek po jejich dokončení" -#: common/models.py:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "Referenční vzor prodejní objednávky" -#: common/models.py:1821 +#: common/models.py:1880 msgid "Required pattern for generating Sales Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole prodejní objednávky" -#: common/models.py:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "Výchozí přeprava prodejní objednávky" -#: common/models.py:1834 +#: common/models.py:1893 msgid "Enable creation of default shipment with sales orders" msgstr "Povolit vytvoření výchozí přepravy s prodejními objednávkami" -#: common/models.py:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "Úprava dokončených prodejních objednávek" -#: common/models.py:1841 +#: common/models.py:1900 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Umožnit úpravy prodejních objednávek po jejich odeslání nebo dokončení" -#: common/models.py:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" msgstr "Označit odeslané objednávky jako dokončené" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Prodejní objednávky označené jako odeslané se automaticky dokončí a obejdou stav „odesláno“" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "Referenční vzor nákupní objednávky" -#: common/models.py:1857 +#: common/models.py:1916 msgid "Required pattern for generating Purchase Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole nákupní objednávky" -#: common/models.py:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "Úprava dokončených nákupních objednávek" -#: common/models.py:1871 +#: common/models.py:1930 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Umožnit úpravy nákupních objednávek po jejich odeslání nebo dokončení" -#: common/models.py:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "Automatické dokončování nákupních objednávek" -#: common/models.py:1879 +#: common/models.py:1938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automaticky označit nákupní objednávky jako kompletní, jakmile jsou přijaty všechny řádkové položky" -#: common/models.py:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Povolit pole zapomenutého hesla" -#: common/models.py:1887 +#: common/models.py:1946 msgid "Enable password forgot function on the login pages" msgstr "Povolení funkce zapomenutého hesla na přihlašovacích stránkách" -#: common/models.py:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Povolit registrace" -#: common/models.py:1893 +#: common/models.py:1952 msgid "Enable self-registration for users on the login pages" msgstr "Povolit samoregistraci uživatelů na přihlašovacích stránkách" -#: common/models.py:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "Povolit SSO" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "Povolit SSO na přihlašovacích stránkách" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "Povolit SSO registraci" -#: common/models.py:1906 +#: common/models.py:1965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Povolit samoregistraci uživatelů prostřednictvím SSO na přihlašovacích stránkách" -#: common/models.py:1912 -msgid "Email required" -msgstr "Vyžadován e-mail" - -#: common/models.py:1913 -msgid "Require user to supply mail on signup" -msgstr "Požadovat, aby uživatel při registraci zadal e-mail" - -#: common/models.py:1918 -msgid "Auto-fill SSO users" -msgstr "Automaticky vyplnit SSO uživatele" - -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" -msgstr "Automaticky vyplnit údaje o uživateli z údajů o účtu SSO" - -#: common/models.py:1926 -msgid "Mail twice" -msgstr "Mail dvakrát" - -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "Při registraci dvakrát požádat uživatele o zadání e-mailu" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "Heslo dvakrát" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" -msgstr "Při registraci dvakrát požádat uživatele o heslo" - -#: common/models.py:1938 -msgid "Allowed domains" -msgstr "Povolené domény" - -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "Omezit registraci na určité domény (oddělené čárkou a začínající @)" - -#: common/models.py:1946 -msgid "Group on signup" -msgstr "Skupina při registraci" - -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" -msgstr "Skupina, ke které jsou přiděleni noví uživatelé při registraci" - -#: common/models.py:1952 -msgid "Enforce MFA" -msgstr "Vynutit MFA" - -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1958 -msgid "Check plugins on startup" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/models.py:1975 -msgid "Enable URL integration" -msgstr "" - -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" -msgstr "" - -#: common/models.py:1982 -msgid "Enable navigation integration" -msgstr "" - -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" -msgstr "" +msgid "Email required" +msgstr "Vyžadován e-mail" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" -msgstr "" +msgid "Require user to supply mail on signup" +msgstr "Požadovat, aby uživatel při registraci zadal e-mail" -#: common/models.py:2010 -msgid "Enable project codes" -msgstr "" +#: common/models.py:2009 +msgid "Auto-fill SSO users" +msgstr "Automaticky vyplnit SSO uživatele" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" -msgstr "" +msgid "Automatically fill out user-details from SSO account-data" +msgstr "Automaticky vyplnit údaje o uživateli z údajů o účtu SSO" -#: common/models.py:2016 -msgid "Stocktake Functionality" -msgstr "" +#: common/models.py:2017 +msgid "Mail twice" +msgstr "Mail dvakrát" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" -msgstr "" +msgid "On signup ask users twice for their mail" +msgstr "Při registraci dvakrát požádat uživatele o zadání e-mailu" + +#: common/models.py:2023 +msgid "Password twice" +msgstr "Heslo dvakrát" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" +msgstr "Při registraci dvakrát požádat uživatele o heslo" + +#: common/models.py:2029 +msgid "Allowed domains" +msgstr "Povolené domény" + +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "Omezit registraci na určité domény (oddělené čárkou a začínající @)" + +#: common/models.py:2037 +msgid "Group on signup" +msgstr "Skupina při registraci" + +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +#: common/models.py:2045 +msgid "Enforce MFA" +msgstr "Vynutit MFA" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" -msgstr "" +#: common/models.py:2046 +msgid "Users must use multifactor security." +msgstr "Uživatelé musí používat vícefaktorové zabezpečení." -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "" +#: common/models.py:2051 +msgid "Check plugins on startup" +msgstr "Zkontrolovat pluginy při spuštění" -#: common/models.py:2040 -msgid "Report Deletion Interval" -msgstr "" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "Zkontrolujte, zda jsou při spuštění nainstalovány všechny pluginy - povolit v kontejnerových prostředích" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" -msgstr "" +#: common/models.py:2061 +msgid "Check for plugin updates" +msgstr "Zkontrolovat aktualizace pluginů" -#: common/models.py:2049 -msgid "Display Users full names" -msgstr "" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "Povolit pravidelné kontroly aktualizací nainstalovaných pluginů" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" -msgstr "" +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "Povolit integraci URL" -#: common/models.py:2055 -msgid "Enable Test Station Data" -msgstr "" +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "Povolit plug-inům přidávat trasy URL" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" -msgstr "" +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "Povolit integraci navigace" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" -msgstr "" +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "Povolit integrování pluginů do navigace" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "Povolit integraci aplikací" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "Povolit pluginům přidávát aplikace" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "Povolit integraci plánu" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "Povolit pluginům spouštění naplánovaných úloh" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "Povolit integraci událostí" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "Povolit pluginům reagovat na interní události" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "Povolit kódy projektů" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "Povolit kódy projektů pro sledování projektů" + +#: common/models.py:2109 +msgid "Stocktake Functionality" +msgstr "Funkce inventury" #: common/models.py:2111 -msgid "Hide inactive parts" -msgstr "" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "Povolit funkci inventury pro evidenci stavu zásob a výpočet hodnoty zásob" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" -msgstr "" +#: common/models.py:2117 +msgid "Exclude External Locations" +msgstr "Vyloučit externí umístění" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" -msgstr "" +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "Vyloučit skladové položky na externích místech z výpočtů inventury" #: common/models.py:2125 -msgid "Show subscribed categories" -msgstr "" +msgid "Automatic Stocktake Period" +msgstr "Perioda automatické inventury" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" -msgstr "" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "Počet dní mezi automatickým záznamem inventury (pro vypnutí nastavte nulu)" -#: common/models.py:2131 -msgid "Show latest parts" -msgstr "" +#: common/models.py:2133 +msgid "Report Deletion Interval" +msgstr "Interval mazání reportů" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" -msgstr "" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "Reporty o inventuře se po určitém počtu dní vymažou" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" -msgstr "" +#: common/models.py:2142 +msgid "Display Users full names" +msgstr "Zobrazit celá jména uživatelů" #: common/models.py:2143 -msgid "Show recent stock changes" -msgstr "" +msgid "Display Users full names instead of usernames" +msgstr "Zobrazit plná jména uživatelů namísto uživatelských jmen" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" -msgstr "" +#: common/models.py:2148 +msgid "Enable Test Station Data" +msgstr "Povolit data zkušební stanice" #: common/models.py:2149 +msgid "Enable test station data collection for test results" +msgstr "Povolit sběr dat ze zkušební stanice pro výsledky testů" + +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" +msgstr "Klíč nastavení (musí být unikátní - rozlišuje malá a velká písmena" + +#: common/models.py:2204 +msgid "Hide inactive parts" +msgstr "Skrýt neaktivní díly" + +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" +msgstr "Skrýt neaktivní díly ve výsledcích zobrazených na domovské stránce" + +#: common/models.py:2212 +msgid "Show subscribed parts" +msgstr "Zobrazit odebírané díly" + +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" +msgstr "Zobrazit odebírané díly na domovské stránce" + +#: common/models.py:2218 +msgid "Show subscribed categories" +msgstr "Zobrazit odebírané kategorie" + +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" +msgstr "Zobrazit kategorie odebíraných dílů na hlavní stránce" + +#: common/models.py:2224 +msgid "Show latest parts" +msgstr "Zobrazit nejnovější díly" + +#: common/models.py:2225 +msgid "Show latest parts on the homepage" +msgstr "Zobrazit nejnovější díly na domovské stránce" + +#: common/models.py:2230 +msgid "Show invalid BOMs" +msgstr "Zobrazit neplatné kusovníky (BOMy)" + +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "Zobrazit kusovníky (BOMy), které čekají na ověření, na domovské stránce" + +#: common/models.py:2236 +msgid "Show recent stock changes" +msgstr "Zobrazit nedávné změny zásob" + +#: common/models.py:2237 +msgid "Show recently changed stock items on the homepage" +msgstr "Zobrazit nedávno změněné skladové položky na domovské stránce" + +#: common/models.py:2242 msgid "Show low stock" -msgstr "" +msgstr "Zobrazit nízký stav zásob" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" -msgstr "" +msgstr "Zobrazit na domovské stránce položky s nízkou skladovou zásobou" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" -msgstr "" +msgstr "Zobrazit vyčerpané zásoby" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" -msgstr "" +msgstr "Zobrazit vyčerpané položky na domovské stránce" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" -msgstr "" +msgstr "Zobrazit potřebné zásoby" -#: common/models.py:2162 +#: common/models.py:2255 msgid "Show stock items needed for builds on the homepage" -msgstr "" +msgstr "Zobrazit skladové položky potřebné pro sestavy na domovské stránce" -#: common/models.py:2167 +#: common/models.py:2260 msgid "Show expired stock" -msgstr "" +msgstr "Zobrazit expirované zásoby" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" -msgstr "" +msgstr "Zobrazit expirované skladové položky na domovské stránce" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Zobrazit neaktuální zásoby" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "Zobrazit neaktuální skladové položky na domovské stránce" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Zobrazit nevyřízené sestavy" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Zobrazit nevyřízené sestavy na domovské stránce" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Zobrazit sestavy po splatnosti" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "Zobrazit sestavy po splatnosti na domovské stránce" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "Zobrazit nevyřízené PO" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "Zobrazit nevyřízené PO na domovské stránce" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Zobrazit PO po splatnosti" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "Zobrazit PO po splatnosti na domovské stránce" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "Zobrazit nevyřízené SO" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "Zobrazit nevyřízené SO na domovské stránce" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Zobrazit SO po splatnosti" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "Zobrazit SO po splatnosti na domovské stránce" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "Zobrazit čekající zásilky SO" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "Zobrazit čekající zásilky SO na domovské stránce" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Zobrazit novinky" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Zobrazit novinky na domovské stránce" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "Zobrazení štítků na řádku" -#: common/models.py:2229 +#: common/models.py:2322 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Zobrazit štítky PDF v prohlížeči namísto stahování jako soubor" -#: common/models.py:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "Výchozí tiskárna štítků" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" msgstr "Konfigurovat tiskárnu štítků, která má být vybrána jako výchozí" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "Zobrazení reportů na řádku" -#: common/models.py:2245 +#: common/models.py:2338 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Zobrazit reporty PDF v prohlížeči namísto stahování jako soubor" -#: common/models.py:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Hledat díly" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "Zobrazit díly v náhledu hledání" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "Hledat díly dodavatele" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" msgstr "Zobrazit díly dodavatele v náhledu hledání" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "Vyhledávání dílů výrobce" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" msgstr "Zobrazit díly výrobce v náhledu hledání" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Skrýt neaktivní díly" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" msgstr "Vyloučené neaktivní části z okna náhledu vyhledávání" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "Hledat kategorie" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" msgstr "Zobrazit kategorie dílů v náhledu hledání" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Hledat zásoby" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "Zobrazit skladové položky v náhledu hledání" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Skrýt nedostupné skladové položky" -#: common/models.py:2289 +#: common/models.py:2382 msgid "Exclude stock items which are not available from the search preview window" msgstr "Vyloučit skladové položky, které nejsou dostupné z okna náhledu hledání" -#: common/models.py:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Hledat umístění" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "Zobrazit skladová umístění v náhledu hledání" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Hledat společnosti" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "Zobrazit společnosti v náhledu hledání" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Hledat objednávky sestav" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "Zobrazit objednávky sestav v náhledu hledání" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Hledat nákupní objednávky" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "Zobrazit nákupní objednávky v náhledu hledání" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Vyloučit neaktivní nákupní objednávky" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "Vyloučit neaktivní nákupní objednávky z okna náhledu vyhledávání" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Hledat prodejní objednávky" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "Zobrazit prodejní objednávky v náhledu hledání" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" -msgstr "" +msgstr "Vyloučit neaktivní prodejní objednávky" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" -msgstr "" +msgstr "Vyloučit neaktivní prodejní objednávky z okna náhledu vyhledávání" -#: common/models.py:2341 +#: common/models.py:2434 msgid "Search Return Orders" -msgstr "" +msgstr "Vyhledávání vrácených objednávek" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" -msgstr "" +msgstr "Zobrazit vrácené objednávky v okně náhledu vyhledávání" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" -msgstr "" +msgstr "Vyloučit neaktivní vrácené objednávky" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" -msgstr "" +msgstr "Vyloučit neaktivní vrácené objednávky z okna náhledu vyhledávání" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" -msgstr "" +msgstr "Náhled výsledků vyhledávání" -#: common/models.py:2357 +#: common/models.py:2450 msgid "Number of results to show in each section of the search preview window" -msgstr "" +msgstr "Počet výsledků, které se mají zobrazit v každé části okna náhledu vyhledávání" -#: common/models.py:2363 +#: common/models.py:2456 msgid "Regex Search" -msgstr "" +msgstr "Regex hledání" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" -msgstr "" +msgstr "Povolit regulární výrazy ve vyhledávacích dotazech" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" -msgstr "" +msgstr "Vyhledávání celého slova" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" -msgstr "" +msgstr "Vyhledávací dotazy vracejí výsledky pro shody celých slov" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" -msgstr "" +msgstr "Zobrazit množství ve formulářích" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" -msgstr "" +msgstr "Zobrazit dostupné množství dílů v některých formulářích" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" -msgstr "" +msgstr "Klávesa Escape zavře formuláře" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" -msgstr "" +msgstr "Zavřít modální formuláře pomocí klávesy escape" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" -msgstr "" +msgstr "Pevná navigační lišta" -#: common/models.py:2388 +#: common/models.py:2481 msgid "The navbar position is fixed to the top of the screen" -msgstr "" +msgstr "Pozice navigační lišty je pevně nastavena na horní okraj obrazovky" -#: common/models.py:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Formát data" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" -msgstr "" +msgstr "Preferovaný formát pro zobrazení datumů" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" -msgstr "" +msgstr "Plánování dílů" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" -msgstr "" +msgstr "Zobrazit informace o plánování dílů" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" -msgstr "" +msgstr "Inventura dílu" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" -msgstr "" +msgstr "Zobrazit informace o skladových zásobách dílů (pokud je povolena funkce inventury)" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" -msgstr "" +msgstr "Délka textu v tabulce" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" -msgstr "" +msgstr "Maximální délka textu v zobrazeních tabulek" -#: common/models.py:2429 -msgid "Default part label template" -msgstr "" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" -msgstr "" +msgstr "Přijímat zprávy o chybách" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" -msgstr "" +msgstr "Dostávat oznámení o systémových chybách" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" -msgstr "" +msgstr "Poslední použité tiskárny" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" -msgstr "" +msgstr "Uložte poslední použité tiskárny pro uživatele" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Uživatel" + +#: common/models.py:2572 msgid "Price break quantity" -msgstr "" +msgstr "Množství cenové slevy" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Cena" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" -msgstr "" +msgstr "Jednotková cena při stanoveném množství" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" -msgstr "" +msgstr "Koncový bod" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" -msgstr "" +msgstr "Koncový bod, ve kterém je tento webhook přijímán" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" -msgstr "" +msgstr "Název tohoto webhooku" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" -msgstr "" +msgstr "Je tento webhook aktivní" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" -msgstr "" +msgstr "Token" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" -msgstr "" +msgstr "Token pro přístup" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" -msgstr "" +msgstr "Tajný klíč" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" -msgstr "" +msgstr "Sdílený tajný klíč pro HMAC" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" -msgstr "" +msgstr "ID zprávy" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" -msgstr "" +msgstr "Unikátní identifikátor pro tuto zprávu" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" -msgstr "" +msgstr "Hostitel" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" -msgstr "" +msgstr "Hostitel, od kterého byla tato zpráva přijata" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" -msgstr "" +msgstr "Záhlaví" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" -msgstr "" +msgstr "Záhlaví této zprávy" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" -msgstr "" +msgstr "Tělo" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" -msgstr "" +msgstr "Tělo zprávy" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" -msgstr "" +msgstr "Koncový bod, na kterém byla zpráva přijata" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" -msgstr "" +msgstr "Pracoval na" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" -msgstr "" +msgstr "Byla práce na této zprávě dokončena?" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" -msgstr "" +msgstr "ID" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" -msgstr "" +msgstr "Název" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Odkaz" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" -msgstr "" +msgstr "Zveřejněno" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" -msgstr "" +msgstr "Autor" -#: common/models.py:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" -msgstr "" +msgstr "Souhrn" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" -msgstr "" +msgstr "Přečteno" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" -msgstr "" +msgstr "Byla tato novinka přečtena?" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,61 +3832,116 @@ msgstr "" msgid "Image" msgstr "Obrazek" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" -msgstr "" +msgstr "Soubor obrázku" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" -msgstr "" +msgstr "Cílový typ modelu pro tento obrázek" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" +msgstr "Cílové ID modelu pro tento obrázek" + +#: common/models.py:3070 +msgid "Custom Unit" msgstr "" -#: common/models.py:3017 +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" -msgstr "" +msgstr "Název jednotky musí být platný identifikátor" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" -msgstr "" +msgstr "Název jednotky" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" -msgstr "" +msgstr "Symbol" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" -msgstr "" +msgstr "Volitelný symbol jednotky" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" -msgstr "" +msgstr "Definice" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" -msgstr "" +msgstr "Definice jednotky" + +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Příloha" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Chybějící soubor" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Chybějící externí odkaz" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Vyberte soubor k přiložení" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Komentář" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "Komentář přílohy" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "Datum nahrání" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "Datum, kdy byl soubor nahrán" + +#: common/models.py:3293 +msgid "File size" +msgstr "Velikost souboru" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "Velikost souboru v bytech" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "Uveden neplatný typ modelu pro přílohu" #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" -msgstr "" +msgstr "Nový {verbose_name}" #: common/notifications.py:316 msgid "A new order has been created and assigned to you" -msgstr "" +msgstr "Byla vytvořena nová objednávka a přiřazena k vám" #: common/notifications.py:322 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "" +msgstr "{verbose_name} zrušeno" #: common/notifications.py:324 msgid "A order that is assigned to you was canceled" -msgstr "" +msgstr "Objednávka, která je vám přidělena, byla zrušena" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,89 +3957,109 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" -msgstr "" +msgstr "Čas uzamčení" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" -msgstr "" +msgstr "Jméno úkolu" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" -msgstr "" +msgstr "Funkce" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" -msgstr "" +msgstr "Název funkce" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" -msgstr "" +msgstr "Argumenty" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" -msgstr "" +msgstr "Argumenty úlohy" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" -msgstr "" +msgstr "Argumenty klíčových slov" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" +msgstr "Argumenty klíčových slov úlohy" + +#: common/serializers.py:529 +msgid "Filename" +msgstr "Název souboru" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "Typ modelu" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "Uživatel nemá oprávnění k vytváření nebo úpravám příloh pro tento model" + +#: common/validators.py:35 +msgid "No attachment model type provided" msgstr "" -#: common/validators.py:43 +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" -msgstr "" +msgstr "Minimální počet míst nesmí být větší než maximální počet míst" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" -msgstr "" +msgstr "Maximální počet míst nesmí být menší než minimální počet míst" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." -msgstr "" +msgstr "Prázdná doména není povolena." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "" +msgstr "Neplatný název domény: {domain}" #: 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 "" +msgstr "Nahrát soubor" #: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:119 @@ -3741,19 +4067,19 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" -msgstr "" +msgstr "Přiřadit pole" #: common/views.py:84 msgid "Match Items" -msgstr "" +msgstr "Přiřadit položky" #: common/views.py:401 msgid "Fields matching failed" -msgstr "" +msgstr "Shoda polí se nezdařila" #: common/views.py:464 msgid "Parts imported" -msgstr "" +msgstr "Importované díly" #: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -3764,427 +4090,457 @@ msgstr "" #: templates/patterns/wizard/match_fields.html:26 #: templates/patterns/wizard/upload.html:35 msgid "Previous Step" -msgstr "" +msgstr "Předchozí krok" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" -msgstr "" +msgstr "Díl je aktivní" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" -msgstr "" +msgstr "Výrobce je aktivní" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" -msgstr "" +msgstr "Díl dodavatele je aktivní" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" -msgstr "" +msgstr "Interní díl je aktivní" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" -msgstr "" +msgstr "Dodavatel je aktivní" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Společnost" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Společnosti" + +#: company/models.py:117 msgid "Company description" -msgstr "" +msgstr "Popis společnosti" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" -msgstr "" +msgstr "Popis společnosti" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Webová stránka" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "Webové stránky společnosti" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Telefonní číslo" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Kontaktní telefonní číslo" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Kontaktní e-mailová adresa" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Kontakt" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Kontaktní místo" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" -msgstr "" +msgstr "Odkaz na externí informace o společnosti" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" +msgstr "Je tato společnost aktivní?" + +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "je zákazník" - -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" +msgstr "Prodáváte zboží této společnosti?" + +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:171 -msgid "is supplier" -msgstr "" - -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" +msgstr "Zakupujete zboží od této společnosti?" + +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "" - -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" -msgstr "" +msgstr "Vyrábí tato společnost díly?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" -msgstr "" +msgstr "Výchozí měna používaná pro tuto společnost" -#: 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 "Společnost" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Adresa" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adresy" + +#: company/models.py:372 msgid "Select company" -msgstr "" +msgstr "Vyberte společnost" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" -msgstr "" +msgstr "Název adresy" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" -msgstr "" +msgstr "Název popisující záznam adresy" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" -msgstr "" +msgstr "Primární adresa" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" -msgstr "" +msgstr "Nastavit jako primární adresu" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" -msgstr "" +msgstr "Řádek 1" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" -msgstr "" +msgstr "1. řádek adresy" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" -msgstr "" +msgstr "Řádek 2" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" -msgstr "" +msgstr "2. řádek adresy" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" -msgstr "" +msgstr "PSČ" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" -msgstr "" +msgstr "Město/Region" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" -msgstr "" +msgstr "PSČ město/region" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" -msgstr "" +msgstr "Stát/kraj" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" -msgstr "" +msgstr "Stát nebo provincie" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" -msgstr "" +msgstr "Země" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" -msgstr "" +msgstr "Adresovaná země" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" -msgstr "" +msgstr "Doručovací poznámky pro kurýra" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" -msgstr "" +msgstr "Poznámky pro kurýra" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" -msgstr "" +msgstr "Interní přepravní poznámky" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" -msgstr "" +msgstr "Doručovací poznámky pro interní použití" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" -msgstr "" +msgstr "Odkaz na informace o adrese (externí)" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Výrobce" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: 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 "Číslo dílu výrobce" - -#: company/models.py:515 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:524 -msgid "Manufacturer part description" -msgstr "Popis dílu výrobce" - -#: company/models.py:581 company/models.py:608 company/models.py:824 +#: company/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Základní díl" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Zvolte díl" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Výrobce" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Vyberte výrobce" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "MPN" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "URL pro odkaz na díl externího výrobce" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "Popis dílu výrobce" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "Název parametru" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Hodnota" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Hodnota parametru" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Jednotky" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" -msgstr "" +msgstr "Jednotky parametru" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Díl dodavatele" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" -msgstr "" +msgstr "Jednotky balení musí být kompatibilní s jednotkami základních dílů" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" -msgstr "" +msgstr "Jednotky balení musí být větší než nula" -#: company/models.py:753 +#: company/models.py:740 msgid "Linked manufacturer part must reference the same base part" -msgstr "" +msgstr "Odkazovaný díl výrobce musí odkazovat na stejný základní díl" -#: 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Dodavatel" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" -msgstr "" +msgstr "Vyberte dodavatele" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" -msgstr "" +msgstr "Skladová evidence dodavatele" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" -msgstr "" +msgstr "Je tento díl dodavatele aktivní?" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" -msgstr "" +msgstr "Vyberte díl výrobce" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" -msgstr "" +msgstr "Adresa URL pro odkaz na externí díl dodavatele" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" -msgstr "" +msgstr "Popis dílu dodavatele" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Poznámka" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" -msgstr "" +msgstr "základní cena" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" -msgstr "" +msgstr "Minimální poplatek (např. poplatek za skladování)" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" -msgstr "" +msgstr "Balení dílu" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" -msgstr "" +msgstr "Počet kusů v balení" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "" +msgstr "Celkové množství dodávané v jednom balení. Pro jednotlivé položky ponechte prázdné." -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" -msgstr "" +msgstr "více" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" -msgstr "" +msgstr "Objednat více" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" -msgstr "" +msgstr "Množství dostupné od dodavatele" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" -msgstr "" +msgstr "Dostupnost aktualizována" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" +msgstr "Datum poslední aktualizace údajů o dostupnosti" + +#: company/models.py:1027 +msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:164 +#: company/serializers.py:174 msgid "Default currency used for this supplier" +msgstr "Výchozí měna používaná pro tohoto dodavatele" + +#: company/serializers.py:210 +msgid "Company Name" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 msgid "In Stock" -msgstr "" +msgstr "Skladem" #: 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:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" -msgstr "" +msgstr "Neaktivní" #: company/templates/company/company_base.html:27 #: templates/js/translated/purchase_order.js:242 msgid "Create Purchase Order" -msgstr "" +msgstr "Vytvořit nákupní objednávku" #: company/templates/company/company_base.html:33 msgid "Company actions" -msgstr "" +msgstr "Akce společnosti" #: company/templates/company/company_base.html:38 msgid "Edit company information" @@ -4212,9 +4568,9 @@ msgstr "Odstranit společnost" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" -msgstr "" +msgstr "Obrázek dílu" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:12 @@ -4231,60 +4587,53 @@ msgstr "Stáhnout obrázek z URL" msgid "Delete image" msgstr "Smazat obrázek" -#: 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Zákazník" #: 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 "Adresa" +msgstr "Použít výchozí měnu" #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" -msgstr "" +msgstr "Odstranit obrázek" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "" +msgstr "Odstranit přidružený obrázek z této společnosti" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" -msgstr "" +msgstr "Nahrát obrázek" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" -msgstr "" +msgstr "Stáhnout obrázek" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 @@ -4298,7 +4647,7 @@ msgstr "Vytvořit nového dodavatele dílu" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Nová díl dodavatele" @@ -4311,7 +4660,7 @@ msgstr "Výrobce dílů" msgid "Create new manufacturer part" msgstr "Vytvořit nového výrobce dílu" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Nový výrobce dílu" @@ -4325,7 +4674,7 @@ msgstr "Dodavatelský sklad" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4336,39 +4685,39 @@ msgstr "Zakoupené objednávky" #: company/templates/company/detail.html:79 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" -msgstr "" +msgstr "Vytvořit novou nákupní objednávku" #: company/templates/company/detail.html:80 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" -msgstr "" +msgstr "Nová nákupní objednávka" #: 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 +#: part/templates/part/detail.html:143 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 "" +msgstr "Prodejní objednávky" #: company/templates/company/detail.html:105 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" -msgstr "" +msgstr "Vytvořit novou prodejní objednávku" #: company/templates/company/detail.html:106 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" -msgstr "" +msgstr "Nová prodejní objednávka" #: company/templates/company/detail.html:126 msgid "Assigned Stock" -msgstr "" +msgstr "Přiřazené zásoby" #: company/templates/company/detail.html:142 #: company/templates/company/sidebar.html:29 @@ -4379,17 +4728,17 @@ msgstr "" #: templates/js/translated/search.js:232 templates/navbar.html:65 #: users/models.py:210 msgid "Return Orders" -msgstr "" +msgstr "Návratové objednávky" #: company/templates/company/detail.html:146 #: order/templates/order/return_orders.html:20 msgid "Create new return order" -msgstr "" +msgstr "Vytvořit novou návratovou objednávku" #: company/templates/company/detail.html:147 #: order/templates/order/return_orders.html:21 msgid "New Return Order" -msgstr "" +msgstr "Nová návratová objednávka" #: company/templates/company/detail.html:168 msgid "Company Notes" @@ -4397,128 +4746,120 @@ msgstr "Poznámky ke společnosti" #: company/templates/company/detail.html:183 msgid "Company Contacts" -msgstr "" +msgstr "Kontakty na společnost" #: company/templates/company/detail.html:187 #: company/templates/company/detail.html:188 msgid "Add Contact" -msgstr "" +msgstr "Přidat kontakt" #: company/templates/company/detail.html:206 msgid "Company addresses" -msgstr "" +msgstr "Adresy společnosti" #: company/templates/company/detail.html:210 #: company/templates/company/detail.html:211 msgid "Add Address" -msgstr "" +msgstr "Přidat adresu" #: company/templates/company/manufacturer_part.html:15 company/views.py:37 #: templates/InvenTree/search.html:180 templates/navbar.html:49 msgid "Manufacturers" -msgstr "" +msgstr "Výrobci" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Objednávka dílů" #: company/templates/company/manufacturer_part.html:39 #: templates/js/translated/company.js:1343 msgid "Edit manufacturer part" -msgstr "" +msgstr "Upravit díl výrobce" #: company/templates/company/manufacturer_part.html:43 #: templates/js/translated/company.js:1344 msgid "Delete manufacturer part" -msgstr "" +msgstr "Odstranit díl výrobce" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" -msgstr "" +msgstr "Interní díl" #: company/templates/company/manufacturer_part.html:95 msgid "No manufacturer information available" -msgstr "" +msgstr "Nejsou k dispozici žádné informace o výrobci" #: 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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" -msgstr "" +msgstr "Dodavatelé" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" -msgstr "" +msgstr "Parametry" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" +msgstr "Nový parametr" + +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" msgstr "" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" -msgstr "" +msgstr "Přidat parametr" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" -msgstr "" +msgstr "Vyrobené díly" #: company/templates/company/sidebar.html:10 msgid "Supplied Parts" -msgstr "" +msgstr "Dodané díly" #: company/templates/company/sidebar.html:16 msgid "Supplied Stock Items" -msgstr "" +msgstr "Dodané skladové položky" #: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" -msgstr "" +msgstr "Přiřazené skladové položky" #: 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 "" +msgstr "Kontakty" #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" -msgstr "" +msgstr "Akce týkající se dílu dodavatele" #: 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Objednávka dílů" #: company/templates/company/supplier_part.html:60 #: company/templates/company/supplier_part.html:61 msgid "Update Availability" -msgstr "" +msgstr "Aktualizovat dostupnost" #: company/templates/company/supplier_part.html:63 #: company/templates/company/supplier_part.html:64 @@ -4542,150 +4883,330 @@ msgstr "Vymazat dodavatele dílu" #: company/templates/company/supplier_part.html:133 msgid "No supplier information available" -msgstr "" +msgstr "Nejsou k dispozici žádné informace o dodavateli" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" -msgstr "" +msgstr "Číslo zboží (SKU)" #: company/templates/company/supplier_part.html:206 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:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 msgid "Create new stock item" -msgstr "" +msgstr "Vytvořit novou položku skladu" #: 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" -msgstr "" +msgstr "Nová skladová položka" #: company/templates/company/supplier_part.html:223 msgid "Supplier Part Orders" -msgstr "" +msgstr "Objednávky dílu dodavatele" #: company/templates/company/supplier_part.html:246 msgid "Pricing Information" -msgstr "" +msgstr "Informace o cenách" #: company/templates/company/supplier_part.html:251 #: templates/js/translated/company.js:398 #: templates/js/translated/pricing.js:684 msgid "Add Price Break" +msgstr "Přidat cenovou slevu" + +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" -msgstr "" +msgstr "QR kód dílu dodavatele" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" -msgstr "" +msgstr "Propojit čárový kód s dílem dodavatele" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" -msgstr "" +msgstr "Aktualizovat dostupnost dílu" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" -msgstr "" +msgstr "Skladové položky" #: company/templates/company/supplier_part_sidebar.html:9 msgid "Supplier Part Pricing" -msgstr "" +msgstr "Ceny dílu dodavatele" #: company/views.py:32 msgid "New Supplier" -msgstr "" +msgstr "Nový dodavatel" #: company/views.py:38 msgid "New Manufacturer" -msgstr "" +msgstr "Nový výrobce" #: company/views.py:43 templates/InvenTree/search.html:210 #: templates/navbar.html:60 msgid "Customers" -msgstr "" +msgstr "Zákazníci" #: company/views.py:44 msgid "New Customer" -msgstr "" - -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" +msgstr "Nový zákazník" #: company/views.py:52 msgid "New Company" -msgstr "" +msgstr "Nová společnost" #: generic/states/tests.py:18 order/status_codes.py:13 msgid "Placed" msgstr "Umístěno" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" -msgstr "" +msgstr "Kopie" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" -msgstr "" +msgstr "Počet kopií, které se mají tisknout pro každý štítek" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" -msgstr "" +msgstr "Připojeno" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" +msgstr "Neznámý" + +#: machine/machine_types/label_printer.py:233 +msgid "Printing" +msgstr "Tisk" + +#: machine/machine_types/label_printer.py:234 +msgid "No media" +msgstr "Žádná média" + +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" 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 "" +msgstr "Odpojeno" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" -msgstr "" +msgstr "Tiskárna štítků" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." -msgstr "" +msgstr "Přímo vytisknout štítky pro různé položky." -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" -msgstr "" +msgstr "Umístění tiskárny" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" -msgstr "" +msgstr "Určení rozsahu tiskárny na konkrétní místo" #: machine/models.py:25 msgid "Name of machine" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 msgid "Company from which the items are being ordered" -msgstr "" +msgstr "Společnost, od které se položky objednávají" -#: order/models.py:498 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1702 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" -msgstr "" +msgstr "Reference dodavatele" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" -msgstr "" +msgstr "Referenční kód objednávky dodavatele" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" -msgstr "" +msgstr "přijal" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" -msgstr "" +msgstr "Datum vystavení" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" -msgstr "" +msgstr "Datum vystavení objednávky" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" -msgstr "" +msgstr "Datum dokončení objednávky" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" -msgstr "" +msgstr "Dodavatel dílu se musí shodovat s dodavatelem PO" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" -msgstr "" +msgstr "Množství musí být kladné" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" +msgstr "Společnost, jíž se položky prodávají" + +#: order/models.py:1004 +msgid "Sales order status" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " -msgstr "" +msgstr "Reference zákazníka " -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" -msgstr "" +msgstr "Referenční kód objednávky zákazníka" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" -msgstr "" +msgstr "Datum odeslání" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" -msgstr "" +msgstr "odesláno společností" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" -msgstr "" +msgstr "Objednávka je již dokončena" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" -msgstr "" +msgstr "Objednávka je již zrušena" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" -msgstr "" +msgstr "Pouze otevřená objednávka může být označena jako kompletní" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" +msgstr "Objednávku nelze dokončit, protože dodávky jsou nekompletní" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" -msgstr "" +msgstr "Objednávka nemůže být dokončena, protože jsou neúplné řádkové položky" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" -msgstr "" +msgstr "Množství položky" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" -msgstr "" +msgstr "Odkaz na řádkovou položku" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" -msgstr "" +msgstr "Poznámky k řádkovým položkám" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" +msgstr "Cílové datum pro tuto řádkovou položku (pro použití cílového data z objednávky ponechte prázdné)" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" -msgstr "" +msgstr "Popis řádkové položky (nepovinné)" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" -msgstr "" +msgstr "Kontext" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" -msgstr "" +msgstr "Dodatečný kontext pro tento řádek" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" +msgstr "Cena za jednotku" + +#: order/models.py:1445 +msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1416 +#: order/models.py:1469 msgid "Supplier part must match supplier" -msgstr "" +msgstr "Dodavatelský díl musí odpovídat dodavateli" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" -msgstr "" +msgstr "smazáno" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" -msgstr "" +msgstr "Díl dodavatele" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" -msgstr "" +msgstr "Doručeno" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" -msgstr "" +msgstr "Počet přijatých položek" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" -msgstr "" +msgstr "Nákupní cena" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" -msgstr "" +msgstr "Jednotková nákupní cena" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" +msgstr "Kde si kupující přeje, aby byla tato položka uložena?" + +#: order/models.py:1587 +msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:1574 +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" -msgstr "" +msgstr "Virtuální díl nelze přiřadit k prodejní objednávce" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" -msgstr "" +msgstr "K prodejní objednávce lze přiřadit pouze prodejné díly" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" -msgstr "" +msgstr "Prodejní cena" -#: order/models.py:1606 +#: order/models.py:1669 msgid "Unit sale price" -msgstr "" +msgstr "Jednotková prodejní cena" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" -msgstr "" +msgstr "Odeslané množství" -#: 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "Datum odeslání" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "Datum doručení" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "Datum doručení zásilky" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "Kontroloval(a)" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "Uživatel, který zkontroloval tuto zásilku" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "Doprava" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "Číslo zásilky" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "Sledovací číslo" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "Informace o sledování zásilky" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "Číslo faktury" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "Referenční číslo přiřazené faktury" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "Zásilka již byla odeslána" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" +msgstr "Zásilka nemá žádné přidělené skladové položky" + +#: order/models.py:1912 +msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" -msgstr "" +msgstr "Zásobní položka nebyla přiřazena" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" -msgstr "" +msgstr "Nelze přidělit skladovou položku na řádek s jiným dílem" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" -msgstr "" +msgstr "Nelze přidělit skladovou položku na řádek bez dílu" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" +msgstr "Přidělené množství nesmí překročit množství zásob" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" -msgstr "" +msgstr "Množství musí být 1 pro serializovanou skladovou položku" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" -msgstr "" +msgstr "Prodejní objednávka neodpovídá zásilce" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" -msgstr "" +msgstr "Zásilka neodpovídá prodejní objednávce" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" -msgstr "" +msgstr "Řádek" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" -msgstr "" +msgstr "Odkaz na zásilku z prodejní objednávky" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" -msgstr "" +msgstr "Položka" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" -msgstr "" +msgstr "Vyberte skladovou položku pro přidělení" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" -msgstr "" +msgstr "Zadejte množství pro přidělení zásob" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" -msgstr "" +msgstr "Reference návratové objednávky" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" -msgstr "" +msgstr "Společnost, od které se vrací položky" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" +msgstr "Stav návratové objednávky" + +#: order/models.py:2362 +msgid "Return Order Line Item" msgstr "" -#: order/models.py:2260 +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" -msgstr "" +msgstr "K návratové objednávce lze přiřadit pouze serializované položky" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" -msgstr "" +msgstr "Vyberte položku pro vrácení od zákazníka" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" -msgstr "" +msgstr "Datum přijetí" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" -msgstr "" +msgstr "Datum přijetí této vrácené položky" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" -msgstr "" +msgstr "Výsledek" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" -msgstr "" +msgstr "Výsledky pro tuto položku" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" +msgstr "Náklady spojené s návratem nebo opravou této položky" + +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 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:85 +#: order/serializers.py:86 msgid "Completed Lines" -msgstr "" +msgstr "Dokončené řádky" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" -msgstr "" +msgstr "Objednávku nelze zrušit" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" -msgstr "" +msgstr "Povolit uzavření objednávky s neúplnými řádkovými položkami" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" -msgstr "" +msgstr "Objednávka má nedokončené řádkové položky" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" -msgstr "" +msgstr "Objednávka není otevřena" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" -msgstr "" +msgstr "Automatická cena" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" +msgstr "Automaticky vypočítat nákupní cenu na základě údajů o dílech dodavatele" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" -msgstr "" +msgstr "Měna nákupní ceny" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" -msgstr "" +msgstr "Sloučit položky" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" +msgstr "Sloučit položky se stejným dílem, místem určení a cílovým datem do jedné řádkové položky" + +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "Interní číslo dílu" + +#: order/serializers.py:563 +msgid "Internal Part Name" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:579 msgid "Supplier part must be specified" -msgstr "" +msgstr "Musí být uveden díl dodavatele" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" -msgstr "" +msgstr "Objednávka musí být zadána" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" -msgstr "" +msgstr "Dodavatel musí odpovídat objednávce" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" -msgstr "" +msgstr "Objednávka musí odpovídat dodavateli" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" -msgstr "" +msgstr "Řádková položka" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" -msgstr "" +msgstr "Řádková položka neodpovídá nákupní objednávce" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" -msgstr "" +msgstr "Vyberte cílové umístění pro přijaté položky" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" -msgstr "" +msgstr "Zadat kód dávky pro příchozí položky skladu" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" +msgstr "Zadat sériová čísla pro příchozí skladové položky" + +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" -msgstr "" +msgstr "Čárový kód" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" -msgstr "" - -#: order/serializers.py:619 -msgid "Barcode is already in use" -msgstr "" - -#: order/serializers.py:643 -msgid "An integer quantity must be provided for trackable parts" -msgstr "" - -#: order/serializers.py:691 order/serializers.py:1697 -msgid "Line items must be provided" -msgstr "" - -#: order/serializers.py:707 -msgid "Destination location must be specified" -msgstr "" +msgstr "Naskenovaný čárový kód" #: order/serializers.py:718 -msgid "Supplied barcode values must be unique" -msgstr "" +msgid "Barcode is already in use" +msgstr "Tento čárový kód se již používá" -#: order/serializers.py:1075 +#: order/serializers.py:742 +msgid "An integer quantity must be provided for trackable parts" +msgstr "U sledovatelných dílů musí být uvedeno celočíselné množství" + +#: order/serializers.py:790 order/serializers.py:1793 +msgid "Line items must be provided" +msgstr "Musí být uvedeny řádkové položky" + +#: order/serializers.py:806 +msgid "Destination location must be specified" +msgstr "Místo určení musí být specifikováno" + +#: order/serializers.py:817 +msgid "Supplied barcode values must be unique" +msgstr "Hodnoty dodaných čárových kódů musí být unikátní" + +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Ztraceno" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Vráceno" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Zpracovává se" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Vrátit zpět" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Oprava" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Náhrada" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Vrácení peněz" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Odmítnout" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5596,7 +6163,7 @@ msgstr "" #: order/templates/order/order_wizard/po_upload.html:14 msgid "Order is already processed. Files cannot be uploaded." -msgstr "" +msgstr "Objednávka je již zpracována. Soubory nelze nahrát." #: order/templates/order/order_wizard/po_upload.html:27 #: part/templates/part/import_wizard/ajax_part_upload.html:10 @@ -5604,15 +6171,15 @@ msgstr "" #: templates/patterns/wizard/upload.html:13 #, python-format msgid "Step %(step)s of %(count)s" -msgstr "" +msgstr "Krok %(step)s z %(count)s" #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "" +msgstr "Přijaté skladové zásoby" #: order/templates/order/purchase_order_detail.html:18 msgid "Purchase Order Items" -msgstr "" +msgstr "Položky nákupní objednávky" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/return_order_detail.html:24 @@ -5621,41 +6188,41 @@ msgstr "" #: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" -msgstr "" +msgstr "Přidat řádkovou položku" #: 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 "Přijmout řádkové položky" #: 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 "Extra řádky" #: 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 "Přidání dalšího řádku" #: order/templates/order/purchase_order_detail.html:74 msgid "Received Items" -msgstr "" +msgstr "Přijaté položky" #: 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 "" +msgstr "Poznámky k objednávce" #: order/templates/order/return_order_base.html:18 #: order/templates/order/sales_order_base.html:18 msgid "Customer logo thumbnail" -msgstr "" +msgstr "Náhled loga zákazníka" #: order/templates/order/return_order_base.html:60 msgid "Print return order report" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "ID dílu" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Název dílu" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Popis dílu" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Díly" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "IPN dílu" +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Kategorie dílu" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: 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:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Výchozí umístění dílů v této kategorii" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 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:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "Výchozí klíčová slova pro díly v této kategorii" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Název dílu" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "Interní číslo dílu" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "ID dílu nebo název dílu" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "Jedinečná hodnota ID dílu" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "Hodnota IPN dílu" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "Aktualizovat díly" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Kusovník" -#: part/templates/part/detail.html:260 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Činnost nebyla specifikována" msgid "No matching action found" msgstr "Nebyla nalezena odpovídající činnost" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Pro data čárového kódu nebyla nalezena shoda" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Pro data čárového kódu byla nalezena shoda" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "V karanténě" 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 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Položka zásob vytvořena" @@ -9431,7 +10173,7 @@ msgstr "Rozdělit od nadřazené položky" msgid "Split child item" msgstr "Rozdělit podřazený předmět" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Sloučené položky zásob" @@ -9451,7 +10193,7 @@ msgstr "Výstup objednávky sestavení dokončen" 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 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Spotřebováno podle objednávky" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Sestavení" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Odstranit" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "Domovská stránka" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Potvrdit" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Ano" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Nastavení oprávnění" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Skupina" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Zobrazit" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Oprávnění k zobrazení položek" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Oprávnění přidat položky" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Změnit" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Oprávnění k úpravě položek" -#: users/models.py:413 +#: users/models.py:408 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 5861e6dd4f..ef017179a0 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:03\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint ikke fundet" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Bruger har ikke tilladelse til at se denne model" @@ -52,30 +52,34 @@ msgstr "Ugyldigt antal angivet ({exc})" msgid "Error details can be found in the admin panel" msgstr "Fejloplysninger kan findes i admin panelet" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Angiv dato" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Bemærkninger" @@ -88,258 +92,270 @@ msgstr "Værdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Den angivne værdi matcher ikke det påkrævede mønster: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Indtast adgangskode" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Indtast ny adgangskode" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Bekræft adgangskode" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Bekræft ny adgangskode" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Gammel adgangskode" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-mail (igen)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Bekræftelse af e-mailadresse" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Du skal indtaste den samme e-mail hver gang." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Den indtastede email adresse er ikke gyldig." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Det angivne e-mail domæne er ikke godkendt." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Registrering er deaktiveret." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Serienummer streng er tom" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Duplikeret serienummer" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Ugyldig gruppesekvens: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Ingen serienumre fundet" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tags fra denne værdi" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Forbindelsesfejl" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Serveren svarede med ugyldig statuskode" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Der opstod en fejl" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarede med ugyldig Content-Length værdi" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Billedstørrelsen er for stor" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Billeddownload overskred maksimumstørrelsen" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Fjernserver returnerede tomt svar" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Angivet URL er ikke en gyldig billedfil" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgarsk" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Tjekkisk" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Dansk" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Tysk" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Græsk" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Engelsk" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spansk" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spansk (Mexikansk)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Persisk" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finsk" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Fransk" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Ungarsk" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italiensk" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japansk" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Koreansk" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Hollandsk" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polsk" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugisisk" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugisisk (Brasilien)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Russisk" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slovensk" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Serbisk" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Svensk" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Kinesisk (forenklet)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Kinesisk (traditionelt)" @@ -348,257 +364,165 @@ msgstr "Kinesisk (traditionelt)" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-mail" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metadata skal være et python dict objekt" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadata felt, til brug af eksterne plugins" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Forkert formateret mønster" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Ukendt formatnøgle angivet" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Mangler nødvendig formatnøgle" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Referencefelt må ikke være tomt" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Reference skal matche det påkrævede mønster" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Referencenummer er for stort" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Manglende fil" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Manglende eksternt link" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Vedhæftning" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Vælg fil, der skal vedhæftes" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Link til ekstern URL" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Kommentar" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Fil kommentar" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "dato for upload" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Filnavn må ikke være tomt" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Ugyldig vedhæftningsmappe" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Filnavn indeholder ugyldigt tegn '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Filnavn mangler filtype" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Vedhæftning med dette filnavn findes allerede" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Fejl ved omdøbning af fil" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Ugyldigt valg" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "overordnet" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Markdown noter (valgfri)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Stregkode Data" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Tredjeparts stregkode data" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Stregkode Hash" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Unik hash af stregkode data" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Eksisterende stregkode fundet" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Serverfejl" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "En fejl blev logget af serveren." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Valuta" msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Du har ikke tilladelse til at ændre denne brugerrolle." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Kun superbrugere kan oprette nye brugere" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Filnavn" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Ugyldig værdi" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Datafil" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Vælg datafilen til upload" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Filtype ikke understøttet" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Filen er for stor" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Ingen kolonner fundet i fil" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Ingen datarækker fundet i fil" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Ingen data-rækker angivet" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Ingen data-kolonner angivet" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Mangler påkrævet kolonne: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplikeret kolonne: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Eksternt billede" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL til ekstern billedfil" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Kontrol af baggrundstjeneste mislykkedes" @@ -702,27 +679,27 @@ msgstr "E-mail backend ej konfigureret" msgid "InvenTree system health checks failed" msgstr "Helbredstjek af InvenTree system mislykkedes" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Ukendt database" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Ugyldig fysisk enhed" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Overskud må ikke være negativ" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Overskuddet må ikke overstige 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Ugyldig værdi for overskud" @@ -750,62 +727,63 @@ msgstr "Systemoplysninger" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Valgfri" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Sporet" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Tilgængelig" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Produktionsordre" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Produktionsordre" msgid "Build Orders" msgstr "Produktionsordrer" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Ugyldigt valg for overordnet produktion" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Byggeordre enhed kan ikke ændres" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Overordnet produktion" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Produktionsordre som er tildelt denne produktion" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Produktionsordre som er tildelt denne produktion" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Del" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Vælg dele til produktion" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Salgsordrereference" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Salgsordre, som er tildelt denne produktion" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Kilde Lokation" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Destinations Placering" -#: build/models.py:270 +#: build/models.py:302 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:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Produktions antal" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Antal lagervarer som skal produceres" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Afsluttede elementer" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Antal lagervarer som er færdiggjort" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Produktions Status" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Batch Kode" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Oprettelsesdato" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Projekteret afslutningsdato" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Dato for afslutning" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "udført af" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Udstedt af" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Link til ekstern URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "Bygge Prioritet" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Prioritet af denne byggeordre" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bygningsordre {build} er fuldført" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Afventende" @@ -1540,15 +1677,21 @@ msgstr "Afventende" msgid "Production" msgstr "Produktion" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Fuldført" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Vis QR-kode" @@ -1599,9 +1742,9 @@ msgstr "Vis QR-kode" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Bruger" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Vedhæftning" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Manglende fil" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Manglende eksternt link" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Vælg fil, der skal vedhæftes" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Kommentar" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Filnavn" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "Placeret" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Mistet" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Returneret" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Igangværende" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Retur" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Reparér" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Erstat" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Refusion" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Afvis" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "I karantæne" msgid "Legacy stock tracking entry" msgstr "Forældet lager sporings post" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Lager-element oprettet" @@ -9431,7 +10173,7 @@ msgstr "Opdel fra overordnet element" msgid "Split child item" msgstr "Opdel underordnet element" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Flettede lagervarer" @@ -9451,7 +10193,7 @@ msgstr "Byggeorder output fuldført" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Brugt efter byggeordre" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 741548a2af..3b986dd005 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API-Endpunkt nicht gefunden" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" @@ -52,30 +52,34 @@ msgstr "Ungültige Menge ({exc})" msgid "Error details can be found in the admin panel" msgstr "Fehlerdetails finden Sie im Admin-Panel" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Datum eingeben" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Notizen" @@ -88,258 +92,270 @@ msgstr "Wert '{name}' hält das Musterformat nicht ein" msgid "Provided value does not match required pattern: " msgstr "Angegebener Wert entspricht nicht dem benötigten Muster: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Passwort eingeben" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Neues Passwort eingeben" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Passwort wiederholen" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Neues Passwort bestätigen" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Altes Passwort" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-Mail (nochmal)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Bestätigung der E-Mail Adresse" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "E-Mail Adressen müssen übereinstimmen." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Die angegebene primäre E-Mail-Adresse ist ungültig." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Die angegebene E-Mail-Domain ist nicht freigegeben." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Registrierung ist deaktiviert." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Duplizierter Seriennummer" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Ungültiger Gruppenbereich: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppenbereich {group} überschreitet die zulässige Menge ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Ungültige Gruppensequenz: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Anzahl der eindeutigen Seriennummern ({len(serials)}) muss mit der Menge übereinstimmen ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Entferne HTML-Tags von diesem Wert" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Verbindungsfehler" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Server antwortete mit ungültigem Statuscode" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Ausnahme aufgetreten" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Server antwortete mit ungültigem Wert für die Inhaltslänge" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Bild ist zu groß" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Bilddownload überschreitet maximale Größe" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Remote-Server gab leere Antwort zurück" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgarisch" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Tschechisch" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Dänisch" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Deutsch" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Griechisch" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Englisch" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spanisch" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spanisch (Mexikanisch)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Persisch" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Beenden" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Französisch" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebräisch" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hinduistisch" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Ungarisch" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italienisch" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japanisch" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Koreanisch" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "Lettisch" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Niederländisch" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norwegisch" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polnisch" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugiesisch" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugiesisch (Brasilien)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Rumänisch" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Russisch" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Slowakisch" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slowenisch" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Serbisch" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Schwedisch" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Thailändisch" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Türkisch" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "Ukrainisch" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamesisch" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Chinesisch (Vereinfacht)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Chinesisch (Traditionell)" @@ -348,257 +364,165 @@ msgstr "Chinesisch (Traditionell)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] In App einloggen" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Email" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Fehler beim Ausführen der Plugin Validierung" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metadaten müssen ein Python-Dict Objekt sein" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Plugin Metadaten" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "JSON-Metadatenfeld, für die Verwendung durch externe Plugins" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Falsch formatiertes Muster" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Unbekannter Formatschlüssel angegeben" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Erforderlicher Formatschlüssel fehlt" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Referenz-Feld darf nicht leer sein" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Referenz muss erforderlichem Muster entsprechen" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Referenznummer ist zu groß" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Fehlende Datei" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Fehlender externer Link" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Anhang" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Datei zum Anhängen auswählen" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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 "Link" - -#: InvenTree/models.py:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Link zu einer externen URL" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Kommentar" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Datei-Kommentar" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "Hochladedatum" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Dateiname darf nicht leer sein" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Ungültiges Verzeichnis für Anhang" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Dateiname enthält ungültiges Zeichen '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Dateiendung fehlt" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Anhang mit diesem Dateinamen bereits vorhanden" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Fehler beim Umbenennen" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Doppelte Namen können nicht unter dem selben Elternteil existieren" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Name" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Beschreibung" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "Eltern" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Pfad" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Markdown Notizen (optional)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Barcode-Daten" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Drittanbieter-Barcode-Daten" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Barcode-Hash" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Eindeutiger Hash der Barcode-Daten" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Bestehender Barcode gefunden" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Serverfehler" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Währung" msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Benutzername" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Vorname" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "Vorname des Benutzers" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Nachname" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "Nachname des Benutzers" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "E-Mailadresse des Benutzers" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "Mitarbeiter" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "Hat der Benutzer die Mitarbeiter Berechtigung" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "Administrator" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "Ist dieser Benutzer ein Adminstrator" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Aktiv" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "Ist dieses Benutzerkonto aktiv" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Sie haben keine Berechtigung, diese Benutzerrolle zu ändern." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Nur Superuser können neue Benutzer erstellen" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Ihr Konto wurde erstellt." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Bitte benutzen Sie die Passwort-zurücksetzen-Funktion, um sich anzumelden" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Willkommen bei InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Dateiname" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Ungültiger Wert" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Datendatei" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Neue Datei zum Hochladen auswählen" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Nicht unterstütztes Dateiformat" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Datei ist zu groß" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Keine Spalten in der Datei gefunden" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Keine Datensätze in der Datei gefunden" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Keine Zeilen ausgewählt" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Keine Spalten angegeben" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Erforderliche Spalte '{name}' fehlt" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Doppelte Spalte: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Grafiken aus externen Quellen" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL der Remote-Bilddatei" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen" @@ -702,27 +679,27 @@ msgstr "E-Mail-Backend nicht konfiguriert" msgid "InvenTree system health checks failed" msgstr "InvenTree Status-Überprüfung fehlgeschlagen" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Unbekannte Datenbank" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Ungültige physikalische Einheit" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Überschuss-Wert darf nicht negativ sein" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Überschuss darf 100% nicht überschreiten" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Ungültiger Wert für Ausschuss" @@ -750,62 +727,63 @@ msgstr "Systeminformationen" msgid "About InvenTree" msgstr "Über InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Optional" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Verfügbar" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Bauauftrag" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Bauauftrag" msgid "Build Orders" msgstr "Bauaufträge" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Ungültige Wahl für übergeordneten Bauauftrag" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "Verantwortlicher Benutzer oder Gruppe muss angegeben werden" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Teil in Bauauftrag kann nicht geändert werden" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referenz" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Kurze Beschreibung des Baus (optional)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Teil" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Teil für den Bauauftrag wählen" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Auftrag Referenz" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Quell-Lagerort" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Ziel-Lagerort" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Anzahl der zu bauenden Lagerartikel" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Fertiggestellte Teile" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen Lagerartikel" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Bauauftrags-Status" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:312 +#: build/models.py:344 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Fertigstellungsdatum" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Aufgegeben von" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Verantwortlicher Benutzer" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externer Link" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Link zu einer externen URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "Bauauftrags-Priorität" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Priorität dieses Bauauftrags" msgid "Project Code" msgstr "Projektcode" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Projektcode für diesen Auftrag" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 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 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bauauftrag {build} wurde fertiggestellt" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, 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:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Objekt bauen" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Objekt bauen" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Installiere in" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Name des Teils" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:279 +#: build/serializers.py:289 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:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Lagerort" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "Lagerort für Bauprodukt" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:331 +#: build/serializers.py:341 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 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Status" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "Zugewiesen Bestand verbrauchen" -#: build/serializers.py:613 +#: build/serializers.py:650 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:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:681 +#: build/serializers.py:718 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:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:713 +#: build/serializers.py:750 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:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:838 +#: build/serializers.py:878 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:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:907 +#: build/serializers.py:947 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:914 +#: build/serializers.py:954 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:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "Fehler beim Starten der automatischen Zuweisung" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Hersteller-Teilenummer" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "Ortsname" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Verpackungen" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "Teil-ID" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "Teil IPN" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Beschreibung des Teils" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Seriennummer" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "Zugewiesene Menge" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Verfügbare Menge" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Nachverfolgbar" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "Vererbt" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "Varianten zulassen" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Zugewiesener Bestand" -#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Bestellt" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Verfügbarer Bestand" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "Verfügbares Ersatzmaterial" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External Stock" +msgstr "Externes Lager" + #: 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Ausstehend" @@ -1540,15 +1677,21 @@ msgstr "Ausstehend" 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 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Fertig" @@ -1576,8 +1719,8 @@ msgstr "Miniaturansicht" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Barcode Aktionen" @@ -1588,7 +1731,7 @@ msgstr "Barcode Aktionen" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR-Code anzeigen" @@ -1599,9 +1742,9 @@ msgstr "QR-Code anzeigen" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Barcode abhängen" @@ -1612,7 +1755,7 @@ msgstr "Barcode abhängen" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Barcode anhängen" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Bauauftrag bearbeiten" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Bauauftrag abbrechen" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "Bauauftrag duplizieren" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Bauauftrag abbrechen" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Bauauftrag löschen" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Bauauftrag fertigstellen" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Baubeschreibung" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Es wurden keine Endprodukte für diesen Bauauftrag erstellt" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Bauauftrag ist bereit abgeschlossen zu werden" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Bauauftrag kann nicht abgeschlossen werden, da es noch ausstehende Endprodukte gibt" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 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/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Zieldatum" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Bauauftrag war fällig am %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Überfällig" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Fertiggestellte Endprodukte" -#: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Fertiggestellte Endprodukte" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Auftrag" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Aufgegeben von" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Priorität" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "Bauauftrag löschen" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "Bauftrags-QR-Code" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "Barcode mit Bauauftrag verknüpfen" @@ -1766,8 +1930,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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Ziel-Lager" @@ -1779,23 +1943,23 @@ msgstr "Ziel-Lagerort nicht angegeben" msgid "Allocated Parts" msgstr "Zugewiesene Teile" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" 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:190 -#: templates/js/translated/build.js:2199 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Erstellt" @@ -1804,8 +1968,8 @@ msgid "No target date set" msgstr "Kein Ziel-Datum gesetzt" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Fertig" @@ -1813,13 +1977,13 @@ msgstr "Fertig" msgid "Build not complete" msgstr "Bauauftrag ist nicht vollständig" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Unter-Bauaufträge" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Bestand Bauauftrag zuweisen" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Automatisch zuweisen" msgid "Manually allocate stock to build" msgstr "Lagerartikel manuell dem Bauauftrag zuweisen" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Bestand zuweisen" @@ -1870,15 +2034,19 @@ msgstr "Neues Endprodukt anlegen" msgid "New Build Output" msgstr "Neues Endprodukt" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "Verbrauchte Bestände" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Fertiggestellte Endprodukte" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Fertiggestellte Endprodukte" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Anhänge" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Bauauftrags-Notizen" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "Zuordnung abgeschlossen" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "Alle Zeilen wurden vollständig zugewiesen" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Neuer Bauauftrag" @@ -1914,23 +2082,50 @@ msgstr "Neuer Bauauftrag" msgid "Build Order Details" msgstr "Bauauftragdetails" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Unfertige Endprodukte" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "Link" + +#: common/api.py:700 +msgid "Is File" +msgstr "Datei" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" + #: common/currency.py:132 msgid "Invalid currency code" -msgstr "" +msgstr "Ungültiges Währungskürzel" #: common/currency.py:134 msgid "Duplicate currency code" -msgstr "" +msgstr "Doppeltes Währungskürzel" #: common/currency.py:139 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Kein Plugin" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Datei" msgid "Select {name} file to upload" msgstr "{name} Datei zum Hochladen auswählen" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Aktualisiert" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Zeitstempel der letzten Aktualisierung" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "Seiten-URL ist durch die Konfiguration gesperrt" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Eindeutiger Projektcode" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Projektbeschreibung" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "Benutzer oder Gruppe verantwortlich für dieses Projekt" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "Wert ist keine gültige Option" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Keine Gruppe" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Neustart erforderlich" -#: common/models.py:1214 +#: common/models.py:1233 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:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Ausstehende Migrationen" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "Anzahl der ausstehenden Datenbankmigrationen" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Name der Serverinstanz" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Name der Instanz verwenden" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "Den Namen der Instanz in der Titelleiste verwenden" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Anzeige von `Über` einschränken" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "Zeige das `Über` Fenster nur Administratoren" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Firmenname" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "interner Firmenname" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Standardwährung" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "Wählen Sie die Basiswährung für Preisberechnungen aus" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" -msgstr "" +msgstr "Verfügbare Währungen" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" -msgstr "" +msgstr "Liste der unterstützten Währungskürzel" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "Währungsaktualisierungsintervall" -#: common/models.py:1273 +#: common/models.py:1292 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:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "Tage" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "Währungs-Aktualisierungs-Plugin" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "Zu verwendendes Währungs-Aktualisierungs-Plugin" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Download-Größenlimit" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "Maximal zulässige Größe für heruntergeladene Bilder" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "Benutzer-Agent zum Herunterladen von Daten" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "Strenge URL-Prüfung" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "Erfordert die Schema-Spezifikation bei der Validierung von URLs" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Bestätigung verpflichtend" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Eine ausdrückliche Benutzerbestätigung für bestimmte Aktionen erfordern." -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Baumtiefe" -#: common/models.py:1322 +#: common/models.py:1341 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:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Prüfungsintervall aktualisieren" -#: common/models.py:1329 +#: common/models.py:1348 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:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Automatische Sicherung" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Intervall für automatische Sicherung" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "Anzahl der Tage zwischen automatischen Sicherungen" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "Aufgabenlöschinterval" -#: common/models.py:1350 +#: common/models.py:1369 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:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "Löschintervall für Fehlerprotokolle" -#: common/models.py:1359 +#: common/models.py:1378 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:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "Löschintervall für Benachrichtigungen" -#: common/models.py:1368 +#: common/models.py:1387 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:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "Barcode-Scanner Unterstützung im Webinterface aktivieren" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "Barcode-Eingabeverzögerung" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "Verzögerungszeit bei Barcode-Eingabe" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "Barcode Webcam-Unterstützung" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode-Scannen über Webcam im Browser erlauben" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "Artikelrevisionen" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "Revisions-Feld für Artikel aktivieren" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" -msgstr "" +msgstr "Löschen aus Baugruppe erlauben" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" -msgstr "" +msgstr "Erlaube das Löschen von Teilen, die in einer Baugruppe verwendet werden" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "IPN Regex" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/models.py:1429 +#: common/models.py:1466 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:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/models.py:1435 +#: common/models.py:1472 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:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Vorlage" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Baugruppe" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Komponente" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Kaufbar" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Verkäuflich" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Import in Ansichten anzeigen" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "Importassistent in einigen Teil-Ansichten anzeigen" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Initialer Lagerbestand" -#: common/models.py:1501 +#: common/models.py:1538 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:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Initiale Lieferantendaten" -#: common/models.py:1508 +#: common/models.py:1545 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:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "Standardsymbol der Teilkategorie" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "Parameter Einheiten durchsetzen" -#: common/models.py:1528 +#: common/models.py:1566 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:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "Dezimalstellen für minimalen Preis" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mindestanzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "Dezimalstellen für maximalen Preis" -#: common/models.py:1549 +#: common/models.py:1587 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:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Zulieferer-Preise verwenden" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Kaufverlauf überschreiben" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Lagerartikel-Preis verwenden" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Preise aus manuell eingegebenen Lagerdaten für Preisberechnungen verwenden" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Lagerartikelpreis Alter" -#: common/models.py:1586 +#: common/models.py:1624 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:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Variantenpreise verwenden" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Nur aktive Varianten" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "Intervall für Neuberechnung von Preisen" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "Anzahl der Tage bis die Teile-Preisberechnungen automatisch aktualisiert werden" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Interne Preise" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Interne Preisüberschreibung" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "Falls verfügbar, überschreiben interne Preise Preispannenberechnungen" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/models.py:1638 +#: common/models.py:1676 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:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "Berichtsfehler protokollieren" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "Fehler, die beim Erstellen von Berichten auftreten, protokollieren" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Seitengröße" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Testberichte aktivieren" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Erstellung von Test-Berichten aktivieren" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Testberichte anhängen" -#: common/models.py:1676 +#: common/models.py:1714 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:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "Global einzigartige Seriennummern" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "Seriennummern für Lagerartikel müssen global eindeutig sein" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Seriennummern automatisch ausfüllen" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "Seriennummern in Formularen automatisch ausfüllen" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "Erschöpften Lagerartikel löschen" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel aufgebraucht ist" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/models.py:1704 +#: common/models.py:1742 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:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/models.py:1723 +#: common/models.py:1761 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:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "Standardsymbol für Lagerort" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "Standardsymbol für Lagerstandort (leer bedeutet kein Symbol)" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "Zeige installierte Lagerartikel" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "Anzeige der installierten Lagerartikel in Bestandstabellen" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "Prüfe BOM bei der Installation von Elementen" -#: common/models.py:1755 +#: common/models.py:1794 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:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "Erlaube Verschieben von \"nicht auf Lager\" Bestand" -#: common/models.py:1763 +#: common/models.py:1802 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:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Bauauftragsreferenz-Muster" -#: common/models.py:1771 +#: common/models.py:1810 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:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "Verantwortlicher Besitzer erforderlich" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "Jeder Bestellung muss ein verantwortlicher Besitzer zugewiesen werden" -#: common/models.py:1783 +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "Blockieren bis Test bestanden" -#: common/models.py:1785 +#: common/models.py:1844 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:1791 +#: common/models.py:1850 msgid "Enable Return Orders" msgstr "Rücksendungen aktivieren" -#: common/models.py:1792 +#: common/models.py:1851 msgid "Enable return order functionality in the user interface" msgstr "Aktivieren der Rücksendung-Funktion in der Benutzeroberfläche" -#: common/models.py:1797 +#: common/models.py:1856 msgid "Return Order Reference Pattern" msgstr "Referenz Muster für Rücksendungen" -#: common/models.py:1799 +#: common/models.py:1858 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:1811 +#: common/models.py:1870 msgid "Edit Completed Return Orders" msgstr "Abgeschlossene Rücksendungen bearbeiten" -#: common/models.py:1813 +#: common/models.py:1872 msgid "Allow editing of return orders after they have been completed" msgstr "Bearbeitung von Rücksendungen nach Abschluss erlauben" -#: common/models.py:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "Auftragsreferenz-Muster" -#: common/models.py:1821 +#: common/models.py:1880 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:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "Auftrag Standardsendung" -#: common/models.py:1834 +#: common/models.py:1893 msgid "Enable creation of default shipment with sales orders" msgstr "Erstelle eine Standardsendung für Aufträge" -#: common/models.py:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "Abgeschlossene Aufträge bearbeiten" -#: common/models.py:1841 +#: common/models.py:1900 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:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" -msgstr "" +msgstr "Versendete Bestellungen als abgeschlossen markieren" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" +msgstr "Als versendet markierte Aufträge werden automatisch abgeschlossen und überspringen den Status \"Versandt\"" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "Bestellungsreferenz-Muster" -#: common/models.py:1857 +#: common/models.py:1916 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:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "Abgeschlossene Einkaufsaufträge bearbeiten" -#: common/models.py:1871 +#: common/models.py:1930 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:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "Bestellungen automatisch abschließen" -#: common/models.py:1879 +#: common/models.py:1938 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:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/models.py:1887 +#: common/models.py:1946 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/models.py:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Registrierung erlauben" -#: common/models.py:1893 +#: common/models.py:1952 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "SSO Selbstregistrierung aktivieren" -#: common/models.py:1906 +#: common/models.py:1965 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:1912 +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "SSO Gruppensynchronisation aktivieren" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "SSO Gruppenschlüssel" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/models.py:1913 +#: common/models.py:2004 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/models.py:1918 +#: common/models.py:2009 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/models.py:1920 +#: common/models.py:2011 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/models.py:1926 +#: common/models.py:2017 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/models.py:1927 +#: common/models.py:2018 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:1932 +#: common/models.py:2023 msgid "Password twice" msgstr "Passwort zweimal" -#: common/models.py:1933 +#: common/models.py:2024 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/models.py:1938 +#: common/models.py:2029 msgid "Allowed domains" msgstr "Erlaubte Domains" -#: common/models.py:1940 +#: common/models.py:2031 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Anmeldung auf bestimmte Domänen beschränken (kommagetrennt, beginnend mit @)" -#: common/models.py:1946 +#: common/models.py:2037 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" -msgstr "Gruppe der neue Benutzer bei der Registrierung zugewiesen werden" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" -#: common/models.py:1952 +#: common/models.py:2045 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/models.py:1953 +#: common/models.py:2046 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/models.py:1958 +#: common/models.py:2051 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/models.py:1960 +#: common/models.py:2053 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:1968 +#: common/models.py:2061 msgid "Check for plugin updates" msgstr "Nach Plugin-Aktualisierungen suchen" -#: common/models.py:1969 +#: common/models.py:2062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Periodische Überprüfungen auf Updates für installierte Plugins aktivieren" -#: common/models.py:1975 +#: common/models.py:2068 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/models.py:1976 +#: common/models.py:2069 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/models.py:1982 +#: common/models.py:2075 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/models.py:1983 +#: common/models.py:2076 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/models.py:1989 +#: common/models.py:2082 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/models.py:1990 +#: common/models.py:2083 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/models.py:1996 +#: common/models.py:2089 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/models.py:1997 +#: common/models.py:2090 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/models.py:2003 +#: common/models.py:2096 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/models.py:2004 +#: common/models.py:2097 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/models.py:2010 +#: common/models.py:2103 msgid "Enable project codes" msgstr "Projektcodes aktivieren" -#: common/models.py:2011 +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "Aktiviere Projektcodes für die Verfolgung von Projekten" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "Inventurfunktionen" -#: common/models.py:2018 +#: common/models.py:2111 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:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "Externe Standorte ausschließen" -#: common/models.py:2026 +#: common/models.py:2119 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:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "Automatische Inventur-Periode" -#: common/models.py:2034 +#: common/models.py:2127 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:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "Löschintervall für Berichte" -#: common/models.py:2042 +#: common/models.py:2135 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:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "Vollständige Namen von Benutzern anzeigen" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" msgstr "Vollständigen Namen von Benutzern anstatt Benutzername anzeigen" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "Teststation-Daten aktivieren" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "Teststation-Datenerfassung für Testergebnisse aktivieren" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 msgid "Settings key (must be unique - case insensitive" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Ausblenden inaktiver Teile in den auf der Startseite angezeigten Ergebnissen" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Abonnierte Teile anzeigen" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Zeige abonnierte Teile auf der Startseite" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Abonnierte Kategorien anzeigen" -#: common/models.py:2126 +#: common/models.py:2219 msgid "Show subscribed part categories on the homepage" msgstr "Zeige abonnierte Teilkategorien auf der Startseite" -#: common/models.py:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Neueste Teile anzeigen" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "Zeige neueste Teile auf der Startseite" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "Zeige ungültige Stücklisten" -#: common/models.py:2138 +#: common/models.py:2231 msgid "Show BOMs that await validation on the homepage" msgstr "Zeige Stücklisten, die noch nicht validiert sind, auf der Startseite" -#: common/models.py:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "Neueste Bestandänderungen anzeigen" -#: common/models.py:2144 +#: common/models.py:2237 msgid "Show recently changed stock items on the homepage" msgstr "Zeige zuletzt geänderte Lagerbestände auf der Startseite" -#: common/models.py:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Niedrigen Bestand anzeigen" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "Zeige geringen Bestand auf der Startseite" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "Lerren Bestand anzeigen" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "Zeige aufgebrauchte Lagerartikel auf der Startseite" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Benötigten Bestand anzeigen" -#: common/models.py:2162 +#: common/models.py:2255 msgid "Show stock items needed for builds on the homepage" msgstr "Zeige Bestand für Bauaufträge auf der Startseite" -#: common/models.py:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "Abgelaufenen Bestand anzeigen" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "Zeige abgelaufene Lagerbestände auf der Startseite" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Alten Bestand anzeigen" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "Zeige überfällige Lagerartikel auf der Startseite" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Ausstehende Bauaufträge anzeigen" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Zeige ausstehende Bauaufträge auf der Startseite" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Zeige überfällige Bauaufträge" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "Zeige überfällige Bauaufträge auf der Startseite" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "Ausstehende POs anzeigen" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "Zeige ausstehende POs auf der Startseite" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Überfällige POs anzeigen" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "Zeige überfällige POs auf der Startseite" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "Ausstehende SOs anzeigen" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "Zeige ausstehende SOs auf der Startseite" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Überfällige SOs anzeigen" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "Zeige überfällige SOs auf der Startseite" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "Ausstehende Versandaufträge anzeigen" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "Ausstehende Versandaufträge auf der Startseite anzeigen" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Zeige Neuigkeiten" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Neuigkeiten auf der Startseite anzeigen" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "Label inline anzeigen" -#: common/models.py:2229 +#: common/models.py:2322 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:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "Standard-Etikettendrucker" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" msgstr "Einen standardmäßig ausgewählten Etikettendrucker konfigurieren" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "Berichte inline anzeigen" -#: common/models.py:2245 +#: common/models.py:2338 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:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Teile suchen" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "Teile in der Suchvorschau anzeigen" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "Zulieferteile durchsuchen" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" msgstr "Zuliefererteile in der Suchvorschau anzeigen" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "Herstellerteile durchsuchen" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" msgstr "Herstellerteile in der Suchvorschau anzeigen" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" msgstr "Inaktive Teile in der Suchvorschau ausblenden" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "Kategorien durchsuchen" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" msgstr "Teilekategorien in der Suchvorschau anzeigen" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Bestand durchsuchen" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "Lagerartikel in Suchvorschau anzeigen" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Nicht verfügbare Artikel ausblenden" -#: common/models.py:2289 +#: common/models.py:2382 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:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Lagerorte durchsuchen" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "Lagerorte in Suchvorschau anzeigen" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Firmen durchsuchen" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "Firmen in der Suchvorschau anzeigen" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Bauaufträge durchsuchen" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "Bauaufträge in der Suchvorschau anzeigen" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Bestellungen durchsuchen" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "Bestellungen in der Suchvorschau anzeigen" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktive Bestellungen ausblenden" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktive Bestellungen in der Suchvorschau ausblenden" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Aufträge durchsuchen" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "Aufträge in der Suchvorschau anzeigen" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "Inaktive Aufträge ausblenden" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktive Aufträge in der Suchvorschau ausblenden" -#: common/models.py:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "Suche nach Rücksendungen" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "Rücksendungen in der Suchvorschau anzeigen" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "Inaktive Rücksendungen ausblenden" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "Inaktive Rücksendungen in der Suchvorschau ausblenden" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "Anzahl Suchergebnisse" -#: common/models.py:2357 +#: common/models.py:2450 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:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "Regex Suche" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "Reguläre Ausdrücke in Suchabfragen aktivieren" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "Ganzes Wort suchen" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "Suchabfragen liefern Ergebnisse für ganze Wortkombinationen" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "zeige Bestand in Eingabemasken" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "Esc-Taste schließt Formulare" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "Benutze die Esc-Taste, um Formulare zu schließen" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Fixierter Navigationsleiste" -#: common/models.py:2388 +#: common/models.py:2481 msgid "The navbar position is fixed to the top of the screen" msgstr "Position der Navigationsleiste am oberen Bildschirmrand fixieren" -#: common/models.py:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Datumsformat" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "Bevorzugtes Format für die Anzeige von Daten" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Teilzeitplanung" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "Zeige Zeitplanung für Teile" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventur" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Zeigt Inventur-Informationen an (falls die Inventurfunktion aktiviert ist)" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "Zeichenkettenlänge in Tabellen" -#: common/models.py:2423 +#: common/models.py:2516 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:2429 -msgid "Default part label template" -msgstr "Standardvorlage für Teilebeschriftung" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "Die Teil-Etikettenvorlage, die automatisch ausgewählt werden soll" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "Lagerartikel-Standardvorlage" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "Die Lagerartikel-Etikettenvorlage soll automatisch ausgewählt werden" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "Standardetikettenvorlage für Lagerstandort" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "Die Lagerstandort-Etikettenvorlage, die automatisch ausgewählt werden soll" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "Standardetikettenvorlage für Bauauftragspositionen" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "Die Bauauftragspositionsetikettenvorlage welche automatisch ausgewählt werden soll" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "Fehlerberichte empfangen" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "Benachrichtigungen bei Systemfehlern erhalten" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "Zuletzt verwendete Druckmaschinen" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "Die zuletzt benutzten Druckmaschinen für einen Benutzer speichern" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Benutzer" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Preis" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Aktiv" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "Token" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "Host" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Body" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "ID" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titel" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Link" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Veröffentlicht" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "Gelesen" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "Wurde diese Nachricht gelesen?" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "Wurde diese Nachricht gelesen?" msgid "Image" msgstr "Bild" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "Bilddatei" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "Einheitsname muss eine gültige Kennung sein" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "Einheitsname" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Symbol" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "Optionales Einheitssymbol" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definition" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "Einheitsdefinition" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Anhang" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Fehlende Datei" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Fehlender externer Link" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Datei zum Anhängen auswählen" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Kommentar" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "Upload Datum" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "Datum der hochgeladenen Datei" + +#: common/models.py:3293 +msgid "File size" +msgstr "Dateigröße" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "Dateigröße in Bytes" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "Ungültiger Modelltyp für Anhang angegeben" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,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:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "Artikel erhalten" @@ -3651,79 +3957,99 @@ msgstr "Artikel wurden aus einer Rücksendung erhalten" msgid "Error raised by plugin" msgstr "Fehler in Plugin aufgetreten" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "Wird ausgeführt" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "Anstehende Aufgaben" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "Geplante Aufgaben" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "Fehlgeschlagene Aufgaben" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "Aufgabe-ID" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "Eindeutige Aufgaben-ID" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "Sperren" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "Sperrzeit" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "Aufgabenname" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "Funktion" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "Funktionsname" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "Parameter" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "Aufgaben-Parameter" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "Schlüsselwort Parameter" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "Schlüsselwort Parameter für Aufgaben" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Dateiname" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "Modelltyp" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "Benutzer hat keine Berechtigung, Anhänge für dieses Modell zu erstellen oder zu bearbeiten" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Eine leere Domain ist nicht erlaubt." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Ungültiger Domainname: {domain}" @@ -3766,402 +4092,432 @@ msgstr "Teile importiert" msgid "Previous Step" msgstr "Vorheriger Schritt" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "Teil ist aktiv" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "Hersteller ist aktiv" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "Lieferantenteil ist aktiv" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "Internes Teil ist aktiv" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "Lieferant ist aktiv" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Firma" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Firmen" + +#: company/models.py:117 msgid "Company description" msgstr "Firmenbeschreibung" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "Firmenbeschreibung" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Webseite" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "Firmenwebsite Adresse/URL" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Kontakt-Tel." -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Kontakt-Telefon" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Kontakt-Email" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Kontakt" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Anlaufstelle" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "Ist dieses Unternehmen aktiv?" -#: company/models.py:165 -msgid "is customer" -msgstr "ist Kunde" +#: company/models.py:168 +msgid "Is customer" +msgstr "Ist Kunde" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Verkaufen Sie Teile an diese Firma?" -#: company/models.py:171 -msgid "is supplier" -msgstr "ist Zulieferer" +#: company/models.py:174 +msgid "Is supplier" +msgstr "Ist Zulieferer" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Kaufen Sie Teile von dieser Firma?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "ist Hersteller" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "Ist Hersteller" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" 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:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Firma" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Adresse" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adressen" + +#: company/models.py:372 msgid "Select company" msgstr "Firma auswählen" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "Adresstitel" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "Titel zur Beschreibung des Adresseintrages" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "Primäre Adresse" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "Als primäre Adresse festlegen" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Linie 1" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "Adresszeile 1" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Linie 2" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "Adresszeile 2" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Postleitzahl" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "Stadt/Region" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "Postleitzahl Stadt/Region" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "Staat/Provinz" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "Bundesland" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "Land" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "Adresse Land" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "Versandnotizen" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "Notizen für Versandkurier" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "Interne Versandnotizen" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "Versandnotizen für interne Verwendung" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Hersteller" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2053 -msgid "MPN" -msgstr "MPN" - -#: company/models.py:508 -msgid "Manufacturer Part Number" -msgstr "Hersteller-Teilenummer" - -#: company/models.py:515 -msgid "URL for external manufacturer part link" -msgstr "Externe URL für das Herstellerteil" - -#: company/models.py:524 -msgid "Manufacturer part description" -msgstr "Teilbeschreibung des Herstellers" - -#: company/models.py:581 company/models.py:608 company/models.py:824 +#: company/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Basisteil" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Teil auswählen" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Hersteller" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Hersteller auswählen" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "MPN" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "Externe URL für das Herstellerteil" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "Teilbeschreibung des Herstellers" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "Teilenummer des Herstellers" + +#: company/models.py:594 msgid "Parameter name" msgstr "Parametername" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Wert" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Parameterwert" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Einheiten" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Parametereinheit" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Zuliefererteil" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "Packeinheiten müssen mit den Basisteileinheiten kompatibel sein" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "Packeinheiten müssen größer als Null sein" -#: company/models.py:753 +#: company/models.py:740 msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" -#: 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Zulieferer" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "Ist dieser Lieferantenteil aktiv?" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Herstellerteil auswählen" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "Teil-URL des Zulieferers" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Notiz" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2424 -msgid "Packaging" -msgstr "Verpackungen" - -#: company/models.py:866 +#: company/models.py:853 msgid "Part packaging" msgstr "Teile-Verpackungen" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "Packmenge" -#: company/models.py:873 +#: company/models.py:860 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:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "Vielfache" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "Mehrere bestellen" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "Verfügbare Menge von Lieferanten" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "Verfügbarkeit aktualisiert" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "Standard-Währung für diesen Zulieferer" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "Firmenname" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "Inaktiv" @@ -4212,7 +4568,7 @@ msgstr "Firma löschen" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "Artikelbild" @@ -4231,17 +4587,17 @@ msgstr "Bild von URL herunterladen" msgid "Delete image" msgstr "Bild löschen" -#: 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Kunde" @@ -4249,19 +4605,12 @@ msgstr "Kunde" msgid "Uses default currency" msgstr "verwendet Standard-Währung" -#: 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 "Adresse" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "Bild entfernen" @@ -4270,19 +4619,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:530 +#: part/templates/part/part_base.html:539 #: 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:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "Bild hochladen" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "Bild herunterladen" @@ -4298,7 +4647,7 @@ msgstr "Neues Zuliefererteil anlegen" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Neues Zuliefererteil" @@ -4311,7 +4660,7 @@ msgstr "Herstellerteile" msgid "Create new manufacturer part" msgstr "Neues Herstellerteil anlegen" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Neues Herstellerteil" @@ -4325,7 +4674,7 @@ msgstr "Zulieferer-Bestand" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Neue Bestellung" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ msgstr "Hersteller" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Teil bestellen" @@ -4435,7 +4784,8 @@ 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:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Internes Teil" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ msgstr "Zulieferer" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parameter" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Neuer Parameter" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "Parameter hinzufügen" @@ -4490,19 +4844,6 @@ msgstr "Zugewiesene Lagerartikel" msgid "Contacts" msgstr "Kontakte" -#: company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adressen" - -#: 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 "Zuliefererteil" - #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4511,7 +4852,7 @@ msgstr "Zulieferer-Teil Aktionen" #: 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Teil bestellen" @@ -4544,12 +4885,12 @@ msgstr "Zuliefererteil entfernen" 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:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "Lieferanten-Teilenummer" @@ -4558,13 +4899,13 @@ 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:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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:207 -#: templates/js/translated/stock.js:537 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Neuer Lagerartikel" @@ -4582,29 +4923,33 @@ msgstr "Preisinformationen ansehen" msgid "Add Price Break" msgstr "Preisstaffel hinzufügen" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "Zulieferteil QR-Code" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "Barcode mit Zulieferteil verknüpfen" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "Verfügbarkeit der Teile aktualisieren" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Lagerartikel" @@ -4630,10 +4975,6 @@ msgstr "Kunden" msgid "New Customer" msgstr "Neuer Kunde" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Firmen" - #: company/views.py:52 msgid "New Company" msgstr "Neue Firma" @@ -4642,48 +4983,228 @@ msgstr "Neue Firma" msgid "Placed" msgstr "Platziert" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "Ungültiges Exportformat" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "Zeitstempel" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "Zu importierende Datei" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "Spalten" + +#: importer/models.py:84 +msgid "Import status" +msgstr "Importstatus" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "Standardwerte" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "Wert" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "Fehler" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "Gültig" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "Dateiformat nicht unterstützt" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "Fehler beim Öffnen der Datei" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "Ungültige Dateigröße" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "Zeilen" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "Liste der zu akzeptierenden Zeilen IDs" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "Keine Zeilen ausgewählt" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "Kopien" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 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:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "Verbunden" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Unbekannt" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "Drucken" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "Keine Medien" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "Verbindung getrennt" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "Etikettendrucker" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "Drucken Sie Etiketten direkt für verschiedene Artikel." -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "Druckerstandort" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "Den Drucker an einen bestimmten Ort aufstellen" @@ -4723,10 +5244,6 @@ msgstr "Keine Fehler" msgid "Initialized" msgstr "Initialisiert" -#: machine/models.py:110 -msgid "Errors" -msgstr "Fehler" - #: machine/models.py:117 msgid "Machine status" msgstr "Status der Maschine" @@ -4743,78 +5260,78 @@ msgstr "Maschinenkonfiguration" msgid "Config type" msgstr "Konfigurationstyp" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Gesamtpreis" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Bestellstatus" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "Hat Preise" -#: order/api.py:240 +#: order/api.py:228 msgid "No matching purchase order found" msgstr "Keine passende Bestellung gefunden" -#: 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Bestellung" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "Bestellung abgeschlossen" -#: order/api.py:462 +#: order/api.py:450 msgid "Order Pending" msgstr "Bestellung ausstehend" -#: order/api.py:1509 order/models.py:380 order/models.py:1432 -#: order/models.py:1541 order/templates/order/order_base.html:9 +#: order/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 msgid "Purchase Order" msgstr "Bestellung" -#: 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "Rücksendeauftrag" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "Gesamtpreis für diese Bestellung" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "Auftragswährung" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwenden)" @@ -4830,7 +5347,7 @@ msgstr "Auftragsbeschreibung (optional)" msgid "Select project code for this order" msgstr "Projektcode für diesen Auftrag auswählen" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Link auf externe Seite" @@ -4854,534 +5371,578 @@ msgstr "Ansprechpartner für diesen Auftrag" msgid "Company address for this order" msgstr "Firmenadresse für diesen Auftrag" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:487 +#: order/models.py:493 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:498 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1702 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "Zulieferer-Referenz" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "Empfangen von" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Aufgabedatum" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "Datum an dem die Bestellung aufgegeben wurde" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "Versand von" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" -msgstr "" +msgstr "Bestellung ist bereits abgeschlossen" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" -msgstr "" +msgstr "Bestellung ist bereits storniert" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "Nur ein offener Auftrag kann als abgeschlossen markiert werden" -#: order/models.py:1038 +#: order/models.py:1089 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:1043 +#: order/models.py:1094 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:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:1345 +#: order/models.py:1393 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:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "Positionsbeschreibung (optional)" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "Kontext" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "Zusätzlicher Kontext für diese Zeile" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "Stückpreis" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "Lieferantenteil muss mit Lieferant übereinstimmen" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "gelöscht" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Empfangen" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:1483 +#: order/models.py:1536 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:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "Ein virtuelles Teil kann nicht einem Auftrag zugeordnet werden" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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:1606 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:1708 +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Lieferdatum" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "Versanddatum" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "Sendung" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "Rechnungsnummer" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "Referenznummer für zugehörige Rechnung" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:1772 +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:1899 +#: order/models.py:1973 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:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "Position" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Position" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "Rücksendungsreferenz" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "Firma von der die Artikel zurückgeschickt werden" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "Status der Rücksendung" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 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:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "Artikel zur Rücksendung auswählen" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "Empfangsdatum" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "Das Datum des Empfangs dieses Rücksendeartikels" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Ergebnis" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "Ergebnis für dieses Zeilenelement" -#: order/models.py:2302 +#: order/models.py:2418 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:81 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/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "Abgeschlossene Positionen" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:482 +#: order/serializers.py:542 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:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "Interne Teilenummer" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "Position" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "Folgende Seriennummern sind bereits zugewiesen" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:1689 +#: order/serializers.py:1785 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:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "Verkaufspreis-Währung" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Verloren" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Zurückgegeben" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "In Bearbeitung" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Zurück" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Reparatur" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Ersetzen" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Rückerstattung" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Ablehnen" @@ -5426,87 +5987,93 @@ msgid "Edit order" msgstr "Auftrag bearbeiten" #: 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 "Bestellung stornieren" - -#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Bestellung duplizieren" -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Bestellung stornieren" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "Bestellung aufgeben" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Auftrag fertigstellen" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 msgid "Supplier part thumbnail" 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:110 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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:115 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Bestellungsbeschreibung" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "Keine Lieferanteninformationen verfügbar" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 msgid "Completed Line Items" msgstr "Abgeschlossene Positionen" -#: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:167 -#: order/templates/order/sales_order_base.html:177 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Unvollständig" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Aufgegeben" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 msgid "Total cost" msgstr "Gesamtsumme" -#: order/templates/order/order_base.html:228 -#: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:243 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "Gesamtkosten konnten nicht berechnet werden" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "Bestellung QR-Code" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "Barcode mit Bestellung verknüpfen" @@ -5559,13 +6126,13 @@ msgstr "Auswahl duplizieren" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Zeile entfernen" @@ -5666,31 +6233,31 @@ msgstr "Rücksendebericht drucken" msgid "Print packing list" msgstr "Paketliste drucken" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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:239 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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:259 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "QR-Code Bestellung zurückgeben" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "Barcode mit Rücksendung verknüpfen" @@ -5702,36 +6269,36 @@ msgstr "Bestelldetails" msgid "Print sales order report" msgstr "Auftragsbericht drucken" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "Versandartikel" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "Als verschickt markieren" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Auftrag abschließen" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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:321 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "Auftrag QR-Code" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "Barcode mit Verkaufsauftrag verknüpfen" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "Ausstehende Sendungen" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Aktionen" @@ -5775,35 +6343,21 @@ 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:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "Teil-ID" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Name des Teils" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Beschreibung des Teils" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Version" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Schlüsselwörter" @@ -5815,7 +6369,8 @@ msgstr "Artikelbild" msgid "Category ID" msgstr "Kategorie-ID" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "Kategoriename" @@ -5827,11 +6382,11 @@ msgstr "Standard-Standortnummer" msgid "Default Supplier ID" msgstr "Standard-Lieferantennummer" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variante von" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimaler Bestand" @@ -5839,169 +6394,183 @@ msgstr "Minimaler Bestand" msgid "Used In" msgstr "Benutzt in" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "Im Bau" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "Eltern ID" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "Name des übergeordneten Teils" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "Pfad zur Kategorie" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Teile" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "Stücklistenebene" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "Stücklisten-Position ID" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "Übergeordnete IPN" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "Teil IPN" +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "Markiert" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "Nach markierten Kategorien filtern" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "Ebenen" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "Filter nach Kategorietiefe" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "Oberste Ebene" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "Mehrstufig" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "Unterkategorien in gefilterte Ergebnisse einbeziehen" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "Übergeordnetes" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "Nach übergeordneter Kategorie filtern" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "Baum ausschließen" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "Unterkategorien in der angegebenen Kategorie ausschließen" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "Ergebnisse" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "Eingehende Bestellung" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "Ausgehender Auftrag" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "Lagerartikel produziert von Bauauftrag" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "Lagerartikel für Bauauftrag benötigt" -#: part/api.py:887 -msgid "Valid" -msgstr "Gültig" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "Diese Option muss ausgewählt werden" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Kategorie" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "Verwendet" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Standard-Lagerort" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Gesamtbestand" @@ -6010,1042 +6579,1144 @@ msgstr "Gesamtbestand" msgid "Input quantity for price calculation" msgstr "Menge für die Preisberechnung" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Teil-Kategorie" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Standard-Lagerort für Teile dieser Kategorie" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strukturell" -#: part/models.py:111 +#: part/models.py:115 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:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Standard Stichwörter" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "Standard-Stichworte für Teile dieser Kategorie" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "Symbol" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "Symbol (optional)" -#: part/models.py:150 +#: part/models.py:178 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:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" -msgstr "" +msgstr "Dieses Teil kann nicht gelöscht werden, da es noch aktiv ist" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" -msgstr "" +msgstr "Dieses Teil kann nicht gelöscht werden, da es in einem Bauauftrag verwendet wird" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "Ungültige Auswahl für übergeordnetes Teil" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, 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:595 +#: part/models.py:631 #, 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:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN muss mit Regex-Muster {pattern} übereinstimmen" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "Teil mit diesem Namen, IPN und Revision existiert bereits." -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "Strukturellen Teilekategorien können keine Teile zugewiesen werden!" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "Artikelbeschreibung (optional)" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "Interne Teilenummer" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "Standard Zulieferer" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "Standard Zuliefererteil" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "Maßeinheit für diesen Teil" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 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:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "Letzte Inventur" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Datum" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "Zusätzliche Notizen" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "Benutzer, der diese Inventur durchgeführt hat" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "Bericht" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "Inventur-Berichtsdatei (intern generiert)" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "Anzahl der Teile" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "Anzahl der Teile, die von der Inventur abgedeckt werden" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "Benutzer, der diesen Inventurbericht angefordert hat" -#: part/models.py:3469 +#: part/models.py:3398 +msgid "Part Sale Price Break" +msgstr "" + +#: part/models.py:3510 +msgid "Part Test Template" +msgstr "" + +#: part/models.py:3536 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:3490 part/models.py:3654 +#: part/models.py:3557 part/models.py:3726 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" -#: part/models.py:3501 +#: part/models.py:3568 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:3512 +#: part/models.py:3579 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:3529 templates/js/translated/part.js:2880 +#: part/models.py:3596 templates/js/translated/part.js:2895 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3530 +#: part/models.py:3597 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3536 +#: part/models.py:3603 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3537 +#: part/models.py:3604 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3544 +#: part/models.py:3611 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3545 +#: part/models.py:3612 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 msgid "Enabled" msgstr "Aktiviert" -#: part/models.py:3549 +#: part/models.py:3616 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 msgid "Required" msgstr "Benötigt" -#: part/models.py:3555 +#: part/models.py:3622 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3560 templates/js/translated/part.js:2917 +#: part/models.py:3627 templates/js/translated/part.js:2932 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3561 +#: part/models.py:3628 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:3566 templates/js/translated/part.js:2924 +#: part/models.py:3633 templates/js/translated/part.js:2939 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3568 +#: part/models.py:3635 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:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "Auswahlmöglichkeiten" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" +msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)" + +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" -#: part/models.py:3629 +#: part/models.py:3701 msgid "Checkbox parameters cannot have units" msgstr "Checkbox-Parameter können keine Einheiten haben" -#: part/models.py:3634 +#: part/models.py:3706 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: part/models.py:3671 +#: part/models.py:3743 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:3686 +#: part/models.py:3758 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:3693 +#: part/models.py:3765 msgid "Physical units for this parameter" msgstr "Physikalische Einheiten für diesen Parameter" -#: part/models.py:3701 +#: part/models.py:3773 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "Checkbox" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "Ausgangsteil" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:3847 -msgid "Data" -msgstr "Wert" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Standard-Wert" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "Teilnummer oder Teilname" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "Eindeutige Teil-ID" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "IPN-Wert des Teils" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "Stufe" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "Stücklistenebene" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4117 +#: part/models.py:4259 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:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Überschuss" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "überprüft" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 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:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "Varianten zulassen" - -#: part/models.py:4165 +#: part/models.py:4307 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:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4488 +#: part/models.py:4628 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:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "Übergeordnete Kategorie" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "Übergeordnete Teilkategorie" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "Ergebnisse" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "Anzahl der Teile, die diese Vorlage verwenden" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "Keine Teile ausgewählt" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "Kategorie auswählen" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:492 +#: part/serializers.py:513 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:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "Externes Lager" +#: part/serializers.py:901 +msgid "Revisions" +msgstr "" -#: part/serializers.py:843 +#: part/serializers.py:906 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:846 +#: part/serializers.py:909 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:877 +#: part/serializers.py:940 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:883 templates/js/translated/part.js:102 +#: part/serializers.py:946 templates/js/translated/part.js:103 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:884 +#: part/serializers.py:947 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:890 +#: part/serializers.py:953 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:891 +#: part/serializers.py:954 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:899 +#: part/serializers.py:962 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:900 +#: part/serializers.py:963 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:905 +#: part/serializers.py:968 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:906 +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1129 +#: part/serializers.py:1192 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:1139 +#: part/serializers.py:1202 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:1149 +#: part/serializers.py:1212 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:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "Externen Bestand ausschließen" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "Lagerartikel an externen Orten ausschließen" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "Bericht generieren" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "Erstelle Berichtsdatei mit berechneten Inventurdaten" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "Teile aktualisieren" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "Angegebene Teile mit berechneten Inventurdaten aktualisieren" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "Inventur-Funktionalität ist nicht aktiviert" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, 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:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Herstellbar" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "Bestehende Stückliste löschen" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "Bestehende Stücklisten-Positionen vor dem Importieren entfernen" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "Keine Teilspalte angegeben" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "Mehrere übereinstimmende Teile gefunden" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "Keine passenden Teile gefunden" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "Teil ist nicht als Komponente angelegt" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "Menge nicht angegeben" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "Ungültige Menge" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "Mindestens eine Stückliste-Position ist erforderlich" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "Gesamtstückzahl" @@ -7065,11 +7736,11 @@ msgstr "Inventurbericht verfügbar" msgid "A new stocktake report is available for download" msgstr "Ein neuer Inventurbericht steht zum Download zur Verfügung" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "Benachrichtigungen über geringen Bestand" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Der verfügbare Bestand für {part.name} ist unter das konfigurierte Mindestniveau gefallen" @@ -7091,65 +7762,65 @@ msgstr "Die Stückliste wurde zuletzt von %(checker)s am %(check_date)s kontroll msgid "This BOM has not been validated." msgstr "Die Stückliste wurde noch nicht kontrolliert." -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "Inventur für diese Teilekategorie durchführen" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "Sie haben Benachrichtigungen für diese Kategorie abonniert" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "Benachrichtigungen für diese Kategorie abonnieren" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "Kategorieaktionen" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Kategorie bearbeiten" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Kategorie bearbeiten" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Kategorie löschen" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Kategorie löschen" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "Oberste Teil-Kategorie" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Teile (inklusive Unter-Kategorien)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "Neues Teil anlegen" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Neues Teil" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Teilparameter" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "Teil-Kategorie anlegen" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Neue Kategorie" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "Inventurinformationen hinzufügen" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "Inventur" @@ -7209,101 +7880,105 @@ msgstr "Teil Test-Vorlagen" msgid "Add Test Template" msgstr "Test Vorlage hinzufügen" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Verkaufsauftragszuweisungen" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "Teile-Notizen" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "Teil Varianten" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "Neue Variante anlegen" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "neue Variante anlegen" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "Parameter hinzufügen" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "Verknüpfte Teile" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "Verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Stückliste" -#: part/templates/part/detail.html:260 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "Export-Aktionen" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Stückliste exportieren" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "Stücklisten-Bericht drucken" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "Stücklisten-Aktionen" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "Stückliste hochladen" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "Stückliste überprüfen" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Stücklisten-Position hinzufügen" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "Baugruppen" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "Gefertigte Teile" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Bauauftragszuweisungen" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "Zulieferer" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "Teil-Hersteller" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "Verknüpftes Teil" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "Verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "Testergebnis-Vorlage hinzufügen" @@ -7338,13 +8013,13 @@ msgstr "Teile-Importvorlage herunterladen" #: 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 +#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 msgid "Format" msgstr "Format" #: 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Dateiformat auswählen" @@ -7362,7 +8037,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 templates/js/translated/label.js:143 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Label drucken" @@ -7372,7 +8047,7 @@ msgstr "Kosteninformationen ansehen" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Bestands-Aktionen" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "Teile Aktionen" @@ -7433,7 +8108,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:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "Teildetails anzeigen" @@ -7447,51 +8122,47 @@ msgstr "Zu Bauaufträgen zugeordnet" msgid "Allocated to Sales Orders" msgstr "Zur Bestellung zugeordnet" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Herstellbar" - -#: part/templates/part/part_base.html:291 +#: part/templates/part/part_base.html:300 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:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Preisspanne" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "letzte Seriennummer" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Nach Seriennummer suchen" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "QR-Code Teil" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "Barcode mit Teil verknüpfen" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "Berechnen" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "Verknüpftes Bild von diesem Teil entfernen" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "Keine passenden Bilder gefunden" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "Teildetails ausblenden" @@ -7545,13 +8216,13 @@ msgid "Variants" msgstr "Varianten" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Bestand" @@ -7587,17 +8258,17 @@ msgstr "Artikelpreise überschreiben" #: 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/helpers.js:103 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Bearbeiten" -#: part/templates/part/prices.html:28 stock/admin.py:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "Zuletzt aktualisiert" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "Preise aktualisieren" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Kein Bestand" @@ -7749,7 +8420,7 @@ msgstr "Teilbild nicht gefunden" msgid "Part Pricing" msgstr "Teilbepreisung" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "Das Plugin kann nicht gelöscht werden, da es derzeit aktiv ist" @@ -7761,100 +8432,108 @@ msgstr "Keine Aktion angegeben" msgid "No matching action found" msgstr "Keine passende Aktion gefunden" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Keine Treffer für Barcode" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Treffer für Barcode gefunden" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "Barcode entspricht einem bereits vorhandenen Artikel" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "Keine passenden Teiledaten gefunden" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "Keine passenden Zulieferteile gefunden" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "Mehrere passende Zulieferteile gefunden" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "Zulieferteil zugeordnet" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "Artikel wurde bereits erhalten" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "Keine Übereinstimmung für Zulieferbarcode" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "Mehrere passende Elemente gefunden" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "Kein passendes Element gefunden" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "Barcode stimmt nicht mit einem vorhandenen Lagerartikel überein" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 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:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Unzureichender Bestand verfügbar" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "Lagerartikel der Bestellung zugeordnet" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "Nicht genügend Informationen" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "Mehrere passende Lieferantenteile für Barcode gefunden" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "Mehrere Einkaufsaufträge gefunden mit '{order}'" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "Keine passende Bestellung für '{order}'" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "Bestellung entspricht nicht dem Lieferanten" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "Ausstehender Artikel für Lieferantenteil konnte nicht gefunden werden" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "Weitere Informationen zum Empfang des Zeilenelements erforderlich" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "Erhaltene Bestellartikel" @@ -7862,55 +8541,63 @@ msgstr "Erhaltene Bestellartikel" msgid "Scanned barcode data" msgstr "Gescannte Barcode Daten" -#: plugin/base/barcodes/serializers.py:81 +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 msgid "Purchase Order to allocate items against" msgstr "Ordne Artikel Bestellung zu" -#: plugin/base/barcodes/serializers.py:87 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order is not pending" msgstr "Bestellung ist nicht ausstehend" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:129 msgid "PurchaseOrder to receive items against" msgstr "Ordne erhaltene Artikel Bestellung zu" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "Bestellung wurde nicht aufgegeben" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "Ort für den Empfang von Artikeln" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "Kann keinen strukturellen Standort auswählen" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "Kundenauftrag zum Zuordnen von Artikeln zu" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "Bestellung ist nicht ausstehend" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "Artikel der Verkaufsbestellung zuweisen" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "Sendung des Verkaufsauftrags zur Zuweisung von Artikeln gegen" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "Sendung wurde bereits geliefert" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "Zugewiesene Menge" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "Labeldruck fehlgeschlagen" @@ -7924,27 +8611,51 @@ msgstr "Fehler beim Rendern des Etikett als HTML" #: plugin/base/label/mixins.py:151 msgid "No items provided to print" -msgstr "" +msgstr "Keine Elemente zum Drucken übergeben" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "InvenTree Barcodes" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "Bietet native Unterstützung für Barcodes" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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 "InvenTree Mitwirkende" +#: plugin/builtin/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "InvenTree Benachrichtigungen" @@ -8000,10 +8711,12 @@ 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:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "Debug-Modus" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Debug-Modus aktivieren - gibt Roh-HTML statt PDF zurück" @@ -8015,55 +8728,55 @@ 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:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "Zuletzt benutzt" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "Optionen" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "Seitengröße für das Etikett" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "Etiketten überspringen" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "Diese Anzahl der Etiketten beim Drucken von Etiketten überspringen" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "Rand" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "Einen Rahmen um jedes Label drucken" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "Querformat" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "Labelblatt im Querformat drucken" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "InvenTree Etikettendrucker" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "Anordnen mehrerer Etiketten auf einem einzigen Blatt" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "Label ist zu groß für Seitengröße" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "Es wurden keine Etiketten generiert" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "Ist das Plugin aktiv" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "Installiert" @@ -8205,7 +8918,7 @@ msgstr "Integriertes Plugin" msgid "Package Plugin" msgstr "Paket-Plugin" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "Methode" msgid "No author found" msgstr "Kein Autor gefunden" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, 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:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin benötigt mindestens Version {v}" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin benötigt maximal Version {v}" @@ -8356,12 +9069,8 @@ msgstr "Plugin-Konfiguration aus der Datenbank löschen" msgid "No valid objects provided to template" msgstr "Keine korrekten Objekte für Vorlage gegeben" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8370,11 +9079,11 @@ msgstr "Teile" #: report/api.py:180 msgid "Plugin not found" -msgstr "" +msgstr "Plugin nicht gefunden" #: report/api.py:182 msgid "Plugin is not active" -msgstr "" +msgstr "Plugin ist nicht aktiv" #: report/api.py:184 msgid "Plugin does not support label printing" @@ -8397,147 +9106,147 @@ msgstr "Fehler beim Drucken des Labels" msgid "Template file '{template}' is missing or does not exist" msgstr "Vorlagendatei '{template}' fehlt oder existiert nicht" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "A4" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "A3" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "US-Legal" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "US-Letter" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Vorlagen Name" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Dateinamen-Muster" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Filter" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "Seitengröße für PDF-Berichte" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "Bericht in Querformat anzeigen" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Breite [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "Label-Breite in mm" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Höhe [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "Label-Höhe in mm" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "Fortschritt" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 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 "Output File" +msgstr "Ausgabedatei" + +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "Schnipsel" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "Berichts-Snippet" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "Snippet-Beschreibung" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "Ressource" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "Berichts-Ressource" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "Ressource-Beschreibung" @@ -8588,10 +9297,10 @@ msgstr "Lieferant gelöscht" #: 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Stück-Preis" @@ -8604,26 +9313,13 @@ msgstr "Zusätzliche Positionen" #: 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 msgid "Total" msgstr "Summe" -#: 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 "Seriennummer" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "Lagerstandorte" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "Testergebnisse" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "Test" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "Ergebnis" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "bestanden" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "fehlgeschlagen" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "Kein Ergebnis (erforderlich)" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "Kein Ergebnis" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Verbaute Objekte" -#: 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Seriennummer" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "Die Bestandsdatei ist nicht vorhanden" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "Bilddatei nicht gefunden" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "part_image tag benötigt eine Bauteilinstanz" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "company_image tag erfordert eine Firmeninstanz" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 msgid "Location ID" msgstr "Standort-ID" -#: stock/admin.py:54 stock/admin.py:176 -msgid "Location Name" -msgstr "Ortsname" - -#: stock/admin.py:64 stock/templates/stock/location.html:131 -#: stock/templates/stock/location.html:137 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "Lagerortpfad" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "Lagerartikel ID" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "Statuscode" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "Zuliefererteil-ID" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "Zulieferer ID" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "Lieferant" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "Kunden ID" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "verbaut in" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "Bauauftrag-ID" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "Auftrags-ID" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "Bestellungs-ID" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "Überprüfung erforderlich" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "Löschen wenn leer" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "Ablaufdatum" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "Filtern nach Standorttiefe" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "Unterorte in gefilterte Ergebnisse einbeziehen" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "Übergeordneter Ort" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "Filtern nach übergeordnetem Ort" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Externer Standort" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "Teile-Baum" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "Gültigkeitsdauer vor" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "Gültigkeitsdauer nach" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "überfällig" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "Gültiges Teil muss angegeben werden" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "Der angegebene Lieferantenartikel existiert nicht" -#: stock/api.py:974 +#: stock/api.py:976 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:1005 +#: stock/api.py:1007 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:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "Lagerstandort Typ" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "Lagerstandorte Typen" -#: stock/models.py:86 +#: stock/models.py:91 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:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:124 stock/templates/stock/location.html:186 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Bestand-Lagerorte" -#: stock/models.py:166 stock/models.py:949 +#: stock/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "Besitzer auswählen" -#: stock/models.py:175 +#: stock/models.py:189 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:182 templates/js/translated/stock.js:2781 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Extern" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "Dies ist ein externer Lagerort" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Standorttyp" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "Standortart dieses Standortes" -#: stock/models.py:262 +#: stock/models.py:279 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:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" -#: stock/models.py:687 +#: stock/models.py:708 #, 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:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:700 +#: stock/models.py:721 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:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:729 +#: stock/models.py:748 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:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Verbraucht von" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "Bauauftrag der diesen Lagerartikel verbrauchte" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:902 +#: stock/models.py:921 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:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "In Teil umgewandelt" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1504 +#: stock/models.py:1525 #, 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:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "Testvorlage existiert nicht" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" -#: stock/models.py:1905 +#: stock/models.py:1960 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:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:2394 +#: stock/models.py:2414 +msgid "Stock Item Test Result" +msgstr "" + +#: stock/models.py:2447 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:2399 +#: stock/models.py:2452 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:2404 +#: stock/models.py:2457 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2428 +#: stock/models.py:2542 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:2435 +#: stock/models.py:2549 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:2443 +#: stock/models.py:2557 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:2447 +#: stock/models.py:2561 msgid "Test notes" msgstr "Test Notizen" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "Teststation" -#: stock/models.py:2456 +#: stock/models.py:2570 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:2462 +#: stock/models.py:2576 msgid "Started" msgstr "Gestartet" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "Der Zeitstempel des Teststarts" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "Fertiggestellt" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "Der Zeitstempel der Test-Beendigung" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "Testvorlage für dieses Ergebnis" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "Vorlagen-ID oder Testname muss angegeben werden" -#: stock/serializers.py:280 +#: stock/serializers.py:286 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:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "Seriennummer ist zu lang" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Elternposition" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 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:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "abgelaufen" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Untergeordnete Objekte" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "Einkaufspreis dieses Lagerartikels, pro Einheit oder Verpackungseinheit" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, 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:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "Zu installierende Menge" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "Anzahl der zu verwendenden Artikel eingeben" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "Die zu verwendende Menge muss mindestens 1 sein" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 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:835 +#: stock/serializers.py:930 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:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "Ziel Lagerort für zurückgegebene Artikel" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "Lagerartikel auswählen, um den Status zu ändern" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "Keine Lagerartikel ausgewählt" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "Übergeordneter Lagerort" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "Keine Änderung" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "Lagerartikel Status-Code" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" @@ -9375,7 +10117,7 @@ msgstr "In Quarantäne" msgid "Legacy stock tracking entry" msgstr "Alter Bestand-Verfolgungs-Eintrag" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Lagerartikel erstellt" @@ -9431,7 +10173,7 @@ msgstr "Vom übergeordneten Element geteilt" msgid "Split child item" msgstr "Unterobjekt geteilt" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Lagerartikel zusammengeführt" @@ -9451,7 +10193,7 @@ msgstr "Endprodukt fertiggestellt" msgid "Build order output rejected" msgstr "Endprodukt abgelehnt" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Durch Bauauftrag verbraucht" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "Testdaten löschen" @@ -9512,15 +10254,15 @@ msgstr "Lagerartikel-Notizen" msgid "Installed Stock Items" msgstr "Installierte Lagerartikel" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "Lagerartikel installieren" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 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:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "Testergebnis hinzufügen" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "zu Lagerort einscannen" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "Druck Aktionen" @@ -9543,17 +10285,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:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "Bestand zählen" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "Bestand hinzufügen" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "Bestand entfernen" @@ -9562,12 +10304,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:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "Bestand verschieben" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "Kunden zuweisen" @@ -9608,14 +10350,10 @@ 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:2123 templates/navbar.html:38 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Bauauftrag" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Elternposition" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Kein Hersteller ausgewählt" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Sie gehören nicht zu den Eigentümern dieses Objekts und können es nicht ändern." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "Nur Leserechte" @@ -9669,12 +10407,8 @@ msgstr "nächste Seite" msgid "Navigate to next serial number" msgstr "Zur nächsten Seriennummer wechseln" -#: stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Verfügbare Menge" - #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2380 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Kein Lagerort gesetzt" @@ -9691,11 +10425,6 @@ msgstr "Dieser Lagerartikel hat nicht alle Tests bestanden" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Dieser Lagerartikel lief am %(item.expiry_date)s ab" -#: stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:435 users/models.py:174 -msgid "Expired" -msgstr "abgelaufen" - #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "Keine Inventur ausgeführt" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "Lagerartikel" @@ -9738,7 +10467,7 @@ msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" msgid "Convert Stock Item" msgstr "Lagerartikel umwandeln" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "Zurück ins Lager" @@ -9750,84 +10479,84 @@ msgstr "Teile mit Seriennummern mit diesem BestandObjekt anlegen." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Zu serialisierende Anzahl und eindeutige Seriennummern angeben." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "Inventur für diesen Lagerort durchführen" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "Lagerort lokalisieren" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "Lagerartikel per Barcode-Scan zu diesem Lagerort hinzufügen" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "Lagerartikel einscannen" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "Lagerort hierher einscannen" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "Lagerort scannen" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "Standortbericht drucken" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "Lagerort-Aktionen" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Lagerort bearbeiten" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Lagerort löschen" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "Oberster Lagerstandort" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "Standortbesitzer" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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:176 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "Lagerort Typ" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "Neuen Lagerort anlegen" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Neuer Lagerort" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "Lagerort" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "Lagerbehälter an diesen Ort eingescannt" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "Lagerort QR-Code" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "Barcode mit Lagerort verknüpfen" @@ -9843,10 +10572,6 @@ msgstr "Lagerartikel-Verfolgung" msgid "Allocations" msgstr "Zuweisungen" -#: stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Untergeordnete Objekte" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Zugriff verweigert" @@ -10097,11 +10822,11 @@ msgstr "Slug" msgid "Part Settings" msgstr "Teil-Einstellungen" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "Teileimport" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "Teil importieren" @@ -10207,7 +10932,7 @@ msgstr "Installationspfad" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "Integriert" @@ -10217,7 +10942,7 @@ msgstr "Dies ist ein integriertes Plugin, das nicht deaktiviert werden kann" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "Beispiel" @@ -10320,9 +11045,9 @@ msgid "Rate" msgstr "Bewerten" #: 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Löschen" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "Keine Projektcodes gefunden" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "gruppieren" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "Keine Kategorieparameter Vorlage gefunden" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "Vorlage bearbeiten" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "Vorlage löschen" @@ -10375,40 +11100,40 @@ msgstr "Vorlage löschen" msgid "Edit Category Parameter Template" msgstr "Kategorieparameter Vorlage bearbeiten" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "Kategorieparameter Vorlage löschen" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "Kategorieparameter Vorlage erstellen" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "Teilparametervorlage erstellen" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "Keine Lagerstandorttypen gefunden" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "Anzahl der Standorte" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "Standorttyp bearbeiten" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "Standorttyp löschen" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "Standorttyp löschen" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "Neuer Standorttyp" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "Startseite" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "Kontoeinstellungen" msgid "Change Password" msgstr "Passwort ändern" -#: templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Benutzername" - -#: templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Vorname" - -#: templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Nachname" - #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Die folgenden E-Mail-Adressen sind mit deinem Konto verknüpft:" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "Fehlerbericht senden" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "In die Zwischenablage kopieren" @@ -10779,7 +11492,7 @@ msgstr "E-Mail-Adresse bestätigen" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Bitte bestätigen Sie, dass %(email)s eine E-Mail-Adresse für den Benutzer %(user_display)s ist." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Bestätigen" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Benötigte Menge" @@ -11026,15 +11739,15 @@ 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:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "Mindestmenge" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "Keine Antwort" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "Keine Antwort vom InvenTree Server" @@ -11046,27 +11759,27 @@ msgstr "Fehler 400: Ungültige Anforderung" msgid "API request returned error code 400" msgstr "API Anfrage hat Fehler 400 zurückgegeben" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "Fehler 401: Nicht authentifiziert" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "Anmeldeinformationen nicht angegeben" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "Fehler 403: Zugriff verweigert" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 msgid "You do not have the required permissions to access this function" msgstr "Sie haben nicht die erforderliche Berechtigung auf diesen Inhalt zuzugreifen" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "Fehler 404: Ressource nicht gefunden" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "Die angefragte Ressource konnte auf dem Server nicht gefunden werden" @@ -11078,11 +11791,11 @@ msgstr "Fehler 405: Methode nicht erlaubt" msgid "HTTP method not allowed at URL" msgstr "HTTP Methode für diese URL nicht erlaubt" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "Fehler 408: Zeitüberschreitung" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "Zeitüberschreitung beim Abfragen der Daten vom Server" @@ -11114,27 +11827,27 @@ msgstr "Anhang löschen" msgid "Delete attachments" msgstr "Anhänge löschen" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "Anhang-Aktionen" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "Keine Anhänge gefunden" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "Anhänge bearbeiten" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "Datum hochgeladen" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "Anhang bearbeiten" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "Anhang löschen" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "Unbekannte Serverantwort" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "Ungültige Serverantwort" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "Barcode Daten scannen" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Barcode scannen" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "Keine URL in der Antwort" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "Dadurch wird der Link zu dem zugehörigen Barcode entfernt" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "Verknüpfung aufheben" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "Lagerartikel entfernen" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "Artikel per Barcode-Scan zu Lagerort hinzufügen" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "Barcode des Lagerartikels scannen um ihn an diesen Ort hinzuzufügen" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "Einbuchen" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "Kein Barcode vorhanden" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "Lagerartikel bereits gescannt" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "Lagerartikel bereits an diesem Standort vorhanden" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "Lagerartikel hinzugefügt" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "Barcode entspricht keinem Lagerartikel" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "Lagerbehälter an diesen Ort einscannen" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "Barcode des Lagerbehälters scannen um ihn an diesen Ort hinzuzufügen" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "Barcode entspricht keinem gültigen Lagerort" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "Zu Lagerort hinzufügen" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "Barcode entspricht keinem Lagerort" @@ -11262,8 +11975,8 @@ msgid "Row Data" msgstr "Zeilendaten" #: 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,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:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "Alternatives Lager erlaubt" @@ -11401,30 +12114,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:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "Externes Lager" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: 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:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "Alternatives Lager und Ersatzteillager einschließen" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: 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:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "Ersatzteillager einschließen" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "Verbrauchsartikel" @@ -11456,7 +12169,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:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "Benötigtes Teil" @@ -11464,120 +12177,120 @@ msgstr "Benötigtes Teil" msgid "Inherited from parent BOM" msgstr "Von übergeordneter Stückliste geerbt" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "Bauauftrag bearbeiten" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "Bauauftrag erstellen" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "Bauauftrag abbrechen" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "Sind Sie sicher, dass sie diesen Bauauftrag abbrechen möchten?" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "Lagerartikel wurden zu diesem Bauauftrag hinzugefügt" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "Es sind noch unvollständige Artikel für diesen Bauauftrag vorhanden" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "Bauauftrag ist bereit abgeschlossen zu werden" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "Dieser Bauauftrag kann nicht abgeschlossen werden, da es unfertige Endprodukte gibt" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "Bauauftrag ist unvollständig" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "Bauauftrag fertigstellen" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "Nächste verfügbare Seriennummer" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "Letzte Seriennummer" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "Die Stückliste enthält verfolgbare Teile" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "Endprodukte müssen individuell angelegt werden" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "Nachverfolgbare Teile können Seriennummern haben" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "Seriennummern für mehrere einzelne Endprodukte angeben" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "Endprodukt anlegen" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "Lagerartikel zu diesem Endprodukt zuweisen" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "Bestand von Endprodukt entfernen" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "Endprodukt fertigstellen" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "Ausschuss Endprodukt" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "Endprodukt entfernen" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "Sind Sie sicher, dass sie alle Lagerartikel von diesem Bauauftrag entfernen möchten?" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "Lagerartikel entfernen" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "Endprodukte auswählen" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "Mindestens ein Endprodukt muss ausgewählt werden" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 msgid "Selected build outputs will be marked as complete" msgstr "Ausgewählte Endprodukte werden als vollständig markiert" -#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:860 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "Endprodukt" @@ -11601,231 +12314,263 @@ msgstr "Zugewiesene Lagerbestände werden nicht mehr verfügbar sein" msgid "The completion status of the build order will not be adjusted" msgstr "Der Fertigstellungsstatus des Bauauftrags wird nicht angepasst" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "Ausschuss Endprodukte" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "Ausgewählte Endprodukte werden gelöscht" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "Endprodukte werden dauerhaft gelöscht" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "Zugewiesene Lagerartikel werden in den Bestand zurückgeführt" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "Endprodukte entfernen" -#: templates/js/translated/build.js:960 +#: templates/js/translated/build.js:959 +msgid "Delete allocations" +msgstr "" + +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" +msgstr "" + +#: templates/js/translated/build.js:989 +msgid "No allocated stock" +msgstr "" + +#: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 msgid "No build order allocations found" msgstr "Keine Allokationen für Bauauftrag gefunden" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" -msgstr "Zugewiesene Menge" - -#: templates/js/translated/build.js:1005 +#: templates/js/translated/build.js:1178 msgid "Location not specified" msgstr "Standort nicht angegeben" -#: templates/js/translated/build.js:1027 +#: templates/js/translated/build.js:1200 msgid "Complete outputs" msgstr "Endprodukte fertigstellen" -#: templates/js/translated/build.js:1045 +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "Ausschuss" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "Endprodukte löschen" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "Endprodukt" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "Endprodukte" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "Endprodukt-Aktionen" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "Keine aktiven Endprodukte gefunden" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "Zugewiesene Positionen" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "Erforderliche Prüfungen" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: templates/js/translated/purchase_order.js:611 #: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "Teile auswählen" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1750 #: 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:1640 +#: templates/js/translated/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "Alle Teile zugeordnet" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "Alle ausgewählten Teile wurden vollständig zugeordnet" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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:1760 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "Lagerartikel für Bauauftrag zuweisen" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "Keine passenden Lagerstandorte" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "Keine passenden Lagerartikel" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "Automatische Lagerzuordnung" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 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:1944 +#: templates/js/translated/build.js:2117 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:1945 +#: templates/js/translated/build.js:2118 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:1946 +#: templates/js/translated/build.js:2119 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:1977 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "Lagerartikel zuordnen" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 msgid "No builds matching query" msgstr "Keine Bauaufträge zur Suchanfrage" -#: 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "Auswählen" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "Bauauftrag ist überfällig" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "Keine Benutzerinformation" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "Bestands-Zuordnung bearbeiten" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "Zuordnung bearbeiten" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "Zuordnung entfernen" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "Bauauftragsposition" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "Bauauftragspositionen" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "Keine Bauauftragspositionen gefunden" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "Nachverfolgbares Teil" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "Menge" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "Ausreichender Bestand vorhanden" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "Verbrauchsartikel" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "Verfolgtes Objekt" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 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/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "Bestand bauen" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "Bestand bestellen" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "Bestand zuweisen" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "Bestands-Zuordnung löschen" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "Parameter löschen" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "Teile bestellen" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "Keine Herstellerteile gefunden" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "Vorlagenteil" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "Baugruppe" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "Keine Parameter gefunden" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "Parameter bearbeiten" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "Parameter löschen" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "Parameter bearbeiten" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "Parameter löschen" @@ -12070,119 +12815,119 @@ msgstr "Staffelpreis bearbeiten" msgid "Delete price break" msgstr "Staffelpreis löschen" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "wahr" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "falsch" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "Filter auswählen" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "Etiketten drucken" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "Berichte drucken" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "Tabelle herunterladen" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "Tabelle neu laden" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "Neuen Filter hinzufügen" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "Alle Filter entfernen" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 msgid "Create filter" msgstr "Filter erstellen" -#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 -#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "Aktion nicht erlaubt" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "Erstellen ist nicht erlaubt" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "Aktualisieren ist nicht erlaubt" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "Löschvorgang nicht erlaubt" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "Anzeigevorgang nicht erlaubt" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "Dieses Formular offen lassen" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "Gib eine gültige Nummer ein" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Fehler in Formular" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "Keine Ergebnisse gefunden" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "Suche" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "Eingabe löschen" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "Dateispalte" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "Feldname" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "Spalten auswählen" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "JA" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "NEIN" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "Wahr" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "Falsch" @@ -12190,74 +12935,74 @@ msgstr "Falsch" msgid "No parts required for builds" msgstr "Keine Ersatzteile für Montage erforderlich" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "Elemente auswählen" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "Keine Elemente zum Drucken ausgewählt" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "Etiketten an den Drucker senden" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 msgid "Cancel" msgstr "Abbrechen" -#: 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Abschicken" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "Formulartitel" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "Warte auf Server..." -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "Fehler-Informationen anzeigen" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "Akzeptieren" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "Lade Daten" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "Ungültige Antwort vom Server" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "Formulardaten fehlen bei Serverantwort" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "Formulardaten fehlerhaft" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "JSON Antwort enthält keine Formulardaten" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "Fehler 400: Ungültige Anfrage" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "Fehler 400 von Server erhalten" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "Fehler bei Formulardaten-Anfrage" @@ -12267,7 +13012,7 @@ msgstr "Keine Nachrichten gefunden" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "ID" @@ -12295,400 +13040,404 @@ msgstr "Keine ungelesenen Benachrichtigungen" msgid "Notifications will load here" msgstr "Benachrichtigungen erscheinen hier" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "Zusätzliche Position hinzufügen" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "Bestellung exportieren" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "Position duplizieren" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "Postion bearbeiten" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "Position löschen" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "Keine Postionen gefunden" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "Postionen duplizieren" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "Position bearbeiten" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "Position löschen" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "Teileigenschaften" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "Erstellungsoptionen für Teile" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "Duplizierungsoptionen für Teile" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "Teil-Kategorie hinzufügen" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "Übergeordnete Teilkategorie" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "Icon (optional) - alle verfügbaren Icons einsehbar auf" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "Teil-Kategorie hinzufügen" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "Neue Kategorie nach dieser Kategorie erstellen" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "Artikelkategorie erstellt" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "Teilekategorie bearbeiten" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "Möchten Sie diese Artikel-Kategorie wirklich löschen?" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "In übergeordnete Kategorie verschieben" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "Teil-Kategorie löschen" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "Aktion für Teile in dieser Kategorie" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "Aktion für Unterkategorien" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "Teil erstellen" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "Weiteres Teil nach diesem erstellen" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "Teil erfolgreich angelegt" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "Teil bearbeiten" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "Teil bearbeitet" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "Teil-Variante anlegen" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "Aktives Teil" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "Teil kann nicht gelöscht werden, da es derzeit aktiv ist" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "Das Löschen dieses Teils kann nicht rückgängig gemacht werden" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "Alle Lagerartikel für dieses Teil werden gelöscht" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "Dieses Teil wird von allen Stücklisten entfernt" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "Alle Hersteller- und Lieferanteninformationen für dieses Teil werden gelöscht" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "Teil löschen" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "Du hast Benachrichtigungen zu diesem Artikel abonniert" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "Du hast Benachrichtigungen zu diesem Artikel abonniert" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "Benachrichtigungen zu diesem Artikel abonnieren" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "Du erhältst keine Benachrichtigungen zu diesem Artikel mehr" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "Die Stückliste zu validieren markiert jede Position als gültig" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "Stückliste prüfen" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "Überprüfte Stückliste" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "Stückliste kopieren" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "Bestand niedrig" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "Kein Lagerbestand verfügbar" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "Bedarf" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "Einheit" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "Virtuelles Teil" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "Abonniertes Teil" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "Verkäufliches Teil" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "Erstellung eines neuen Inventurberichts planen." -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "Nach Fertigstellung steht der Inventurbericht zum Download zur Verfügung." -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "Inventurbericht erstellen" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "Inventurbericht geplant" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "Keine Inventurinformationen verfügbar" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "Inventureintrag bearbeiten" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "Inventureintrag löschen" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "Keine Varianten gefunden" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "Keine Teileparametervorlagen gefunden" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "Teileparametervorlage bearbeiten" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "Alle Parameter mit Verweis auf diese Vorlage werden ebenfalls gelöscht" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "Teileparametervorlage löschen" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "Keine Bestellungen gefunden" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "Diese Position ist überfällig" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "Position empfangen" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "Teilebeziehung löschen" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "Teilebeziehung löschen" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "Keine Teile gefunden" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "Wähle die Kategorie für die ausgewählten Teile" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "Teilekategorie auswählen" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "Kategorie wählen" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "Teil" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "Teile" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "Keine Kategorien" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "Als Liste anzeigen" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "Als Raster anzeigen" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 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:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "Als Baum anzeigen" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "Unterkategorien laden" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "Abonnierte Kategorie" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "Keine passenden Testvorlagen gefunden" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "Ergebnisse" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" -msgstr "Testergebnis bearbeiten" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" +msgstr "" -#: templates/js/translated/part.js:2938 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:2953 +msgid "Delete test template" +msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "Dieser Test ist für ein übergeordnetes Teil definiert" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "Vorlage für Testergebnis bearbeiten" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "Vorlage für Testergebnis löschen" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "Kein Datum angegeben" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "Das angegebene Datum liegt in der Vergangenheit" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "Spekulativ" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "Keine Zeitplanung für dieses Teil vorhanden" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "Fehler beim Abrufen der Zeitplanungsinformationen für dieses Teil" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "Geplante Lagermengen" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "Maximale Menge" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "Minimaler Lagerbestand" @@ -12901,109 +13650,122 @@ msgstr "Erhaltene Menge" msgid "Quantity to receive" msgstr "Zu erhaltende Menge" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "Bestandsstatus" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "Barcode hinzufügen" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "Barcode entfernen" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "Lagerort angeben" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "Losnummer hinzufügen" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "Seriennummern hinzufügen" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "Seriennummern" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "Bestellnummer" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "Zu erhaltende Menge" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "Empfang der Artikel bestätigen" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "Bestellartikel erhalten" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "Artikel-Barcode scannen" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "Scanne den Barcode am erhaltenen Artikel (darf nicht mit einem existierenden Lagerartikel übereinstimmen)" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "Ungültige Barcode-Daten" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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:1843 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "Alle ausgewählten Positionen werden gelöscht" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "Ausgewählte Positionen löschen?" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "Position duplizieren" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "Position bearbeiten" -#: templates/js/translated/purchase_order.js:1942 -#: templates/js/translated/return_order.js:681 +#: templates/js/translated/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "Position löschen" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "Position duplizieren" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/return_order.js:800 +#: templates/js/translated/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "Position bearbeiten" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:804 +#: templates/js/translated/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "Position löschen" @@ -13058,16 +13820,16 @@ msgstr "Kein Rücksendeauftrag gefunden" msgid "Invalid Customer" msgstr "Ungültiger Kunde" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "Rücksendeauftragspositionen erhalten" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "Keine passenden Positionen gefunden" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "Artikel als empfangen markieren" @@ -13226,7 +13988,7 @@ msgstr "Bestandszuordnung löschen" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "An den Kunden versandt" @@ -13284,505 +14046,521 @@ msgstr "Ergebnisse minimieren" msgid "Remove results" msgstr "Ergebnisse entfernen" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "Lagerartikel serialisieren" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 msgid "Confirm Stock Serialization" 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 "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 "Übergeordneter Lagerort" - -#: templates/js/translated/stock.js:166 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "Lagerorttyp hinzufügen" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "Lagerort bearbeiten" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "Lagerort hinzufügen" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "Weiteren Lagerort nach diesem erstellen" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "Lagerort erstellt" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "Soll dieser Lagerort gelöscht werden?" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "Zum übergeordneten Lagerort verschieben" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "Lagerort löschen" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "Aktion für Lagerartikel in diesem Lagerort" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "Aktion für Unter-Lagerorte" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "Dieser Teil kann nicht serialisiert werden" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "Angegebene Menge als Packungen anstatt einzelner Artikel hinzufügen" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "Ausgangsmenge für diesen Lagerartikel eingeben" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Seriennummern für neue Lagerartikel eingeben (oder leer lassen)" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "Lagerartikel dupliziert" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "Lagerartikel duplizieren" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "Soll dieser Lagerartikel gelöscht werden?" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "Lagerartikel löschen" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "Lagerartikel bearbeiten" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "Weiteres Teil nach diesem erstellen" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "Neuen Lagerartikel erstellen" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "Mehrere Lagerartikel wurden erstellt" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "Seriennummer finden" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "Seriennummer eingeben" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "Eine Seriennummer eingeben" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "Keine passende Seriennummer" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "Mehr als ein übereinstimmendes Ergebnis gefunden" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "Bestand Zuweisung bestätigen" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "Lagerbestand einem Kunden zuweisen" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "Achtung: Das Zusammenführen kann nicht rückgängig gemacht werden" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "Einige Informationen gehen verloren, wenn Artikel zusammengeführt werden" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "Lagerartikelverlauf wird für zusammengeführte Lagerartikel gelöscht" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "Lieferantenteil-Informationen werden für zusammengeführte Artikel gelöscht" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "Bestandszusammenführung bestätigen" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "Lagerartikel zusammenführen" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "Bestand verschieben" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "Verschieben" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "Bestand zählen" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "Zählen" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "Bestand entfernen" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "Entnehmen" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "Bestand hinzufügen" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Hinzufügen" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "Bestand löschen" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "Menge von serialisiertem Bestand kann nicht bearbeitet werden" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "Bestandsanzahl angeben" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "Lagerartikel auswählen" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "Wähle mindestens einen verfügbaren Lagerartikel aus" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "Bestandsanpassung bestätigen" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "ERFOLGREICH" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "FEHLGESCHLAGEN" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "KEIN ERGEBNIS" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "Test bestanden" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "Testergebnis hinzufügen" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "Testergebnis bearbeiten" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "Testergebnis löschen" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "Keine Testergebnisse gefunden" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "Testdatum" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "Test gestartet" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "Test beendet" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "Testergebnis bearbeiten" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "Testergebnis löschen" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "In Produktion" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "In Lagerartikel installiert" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "Auftrag zugewiesen" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "Kein Lagerort gesetzt" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "Bestandsstatus ändern" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "Bestand zusammenführen" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "Bestand löschen" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "Lagerartikel" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "Zu Lagerort einscannen" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "Lager-Aktionen" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "Installierte Artikel laden" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "Lagerartikel wird produziert" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "Lagerartikel wurde Auftrag zugewiesen" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "Lagerartikel wurde Kunden zugewiesen" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "Serialisierter Lagerartikel wurde zugewiesen" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "Lagerartikel wurde vollständig zugewiesen" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "Lagerartikel wurde teilweise zugewiesen" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "Lagerartikel in anderem Artikel verbaut" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "Lagerbestand wurde durch einen Bauauftrag verbraucht" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "Lagerartikel ist abgelaufen" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "Lagerartikel läuft demnächst ab" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "Lagerartikel wurde zurückgewiesen" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "Lagerartikel ist verloren" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "Lagerartikel ist zerstört" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "Aufgebraucht" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "Zuliefererteil nicht angegeben" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "Bestandswert" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "Keine zur Anfrage passenden Lagerartikel gefunden" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "Lagerorte" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "Untergeordnete Lagerorte laden" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "Details" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "Keine Änderungen" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "Teileinformationen nicht verfügbar" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "Lagerort existiert nicht mehr" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "Bauauftrag existiert nicht mehr" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "Bestellung existiert nicht mehr" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "Auftrag existiert nicht mehr" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "Rücksendebestellung existiert nicht mehr" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "Kunde existiert nicht mehr" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "Lagerartikel existiert nicht mehr" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "Hinzugefügt" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "Entfernt" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "Keine installierten Artikel" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "Lagerartikel deinstallieren" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "Zu deinstallierende Lagerartikel auswählen" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "Einen anderen Lagerartikel in dieses Teil installieren" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "Lagerartikel können nur installiert werden wenn folgende Kriterien erfüllt werden" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" 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 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "Dieser Lagerartikel ist aktuell vorhanden" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "Der Lagerbestand ist nicht bereits in einem anderen Bestand installiert" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "Der Lagerbestand wird entweder mit einem Batch-Code oder mit Seriennummer verfolgt" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "Teil zur Installation auswählen" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "Wählen Sie einen oder mehrere Bestandteile aus" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "Lagerartikel auswählen" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "Bestandsstatus ändern" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +msgstr "" + #: templates/js/translated/table_filters.js:74 msgid "Has project code" 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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 msgid "Order status" 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 msgid "Outstanding" 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "Mir zugewiesen" @@ -13817,12 +14595,12 @@ msgstr "Hat Lagerorttyp" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "Unterkategorien einschließen" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "Abonniert" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "Losnummer" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "Aktive Teile" @@ -13965,52 +14743,64 @@ msgstr "Test bestanden" msgid "Include Installed Items" msgstr "Installierte Teile einschließen" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "Bauauftrags Status" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "Teile in Unterkategorien einschließen" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "Aktive Teile anzeigen" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "Verfügbarer Lagerbestand" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "Hat Einheiten" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "Teil hat definierte Einheiten" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "Hat IPN" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "Teil hat Interne Teilenummer" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "Auf Lager" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "Kaufbar" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "Hat Inventureinträge" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "Hat Auswahlen" @@ -14082,10 +14872,6 @@ msgstr "Seitennavigation verstecken/anzeigen" msgid "Toggle" msgstr "Umschalten" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Spalten" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "Alle" @@ -14287,6 +15073,14 @@ msgstr "E-Mail-Einstellungen" msgid "Email settings not configured" msgstr "E-Mail-Einstellungen nicht konfiguriert" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Ja" @@ -14359,35 +15153,34 @@ msgstr "Das letzte Mal, wo das Token verwendet wurde" msgid "Revoked" msgstr "Widerrufen" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Gruppe" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Ansicht" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Ändern" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:413 +#: users/models.py:408 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 1f11af3521..e5bf591e8e 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "Το API endpoint δε βρέθηκε" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό" @@ -52,30 +52,34 @@ msgstr "Δόθηκε μη έγκυρη ποσότητα ({exc})" msgid "Error details can be found in the admin panel" msgstr "Μπορείτε να βρείτε λεπτομέρειες σφάλματος στον πίνακα διαχείρισης" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Εισάγετε ημερομηνία" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Σημειώσεις" @@ -88,258 +92,270 @@ msgstr "Η τιμή '{name}' δεν εμφανίζεται σε μορφή μο msgid "Provided value does not match required pattern: " msgstr "Η παρεχόμενη τιμή δεν ταιριάζει με το απαιτούμενο απαραραίητη μοτίβο: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Εισάγετε κωδικό" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Εισάγετε νέο κωδικό πρόσβασης" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Επιβεβαιώστε τον κωδικό πρόσβασης" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Επιβεβαιώστε τον νέο κωδικό πρόσβασης" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Παλιός κωδικός πρόσβασης" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-mail (ξανά)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Επιβεβαίωση διεύθυνσης email" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Πρέπει να πληκτρολογήσετε το ίδιο email κάθε φορά." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Η παρεχόμενη κύρια διεύθυνση ηλεκτρονικού ταχυδρομείου δεν είναι έγκυρη." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Ο παρεχόμενος τομέας ηλεκτρονικού ταχυδρομείου δεν έχει εγκριθεί." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Η εγγραφή είναι απενεργοποιημένη." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Κενό σειριακό αριθμό συμβολοσειράς" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Διπλότυπο serial number" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Μη έγκυρο εύρος ομάδας: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Το εύρος της ομάδας {group} υπερβαίνει την επιτρεπόμενη ποσότητα ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Μη έγκυρη ακολουθία ομάδας: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Δεν βρέθηκαν σειριακοί αριθμοί" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Ο αριθμός μοναδικών σειριακών αριθμών ({len(serials)}) πρέπει να αντιστοιχεί στην ποσότητα ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Αφαιρέστε τα HTML tags από την τιμή που εισάγατε" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Σφάλμα σύνδεσης" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Ο διακομιστής απάντησε με μη έγκυρο κωδικό κατάστασης" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Προέκυψε σφάλμα" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Ο διακομιστής ανταποκρίθηκε με \"Invalid Content-Length value\"" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Η εικόνα είναι πολύ μεγάλη σε μέγεθος" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Η λήψη εικόνας ξεπέρασε το μέγιστο μέγεθος" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Ο διακομιστής επέστρεψε σφάλμα %1$d %2$s" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Βουλγάρικα" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Τσέχικα" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Δανέζικα" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Γερμανικά" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Ελληνικά" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Αγγλικά" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Ισπανικά" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Ισπανικά (Μεξικό)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Φαρσί / Περσικά" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Φινλανδικά" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Γαλλικά" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Εβραϊκά" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Ινδικά" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Ούγγρικα" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Ιταλικά" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Ιαπωνικά" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Κορεάτικα" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Νορβηγικά" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Πολωνικά" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Πορτογαλικά" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Πορτογαλικά (Βραζιλίας)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Ρωσικά" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Σλοβάκικα" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Σλοβενικά" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Σερβικά" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Σουηδικά" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Ταϊλανδέζικα" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Τούρκικα" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Βιετναμέζικα" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Κινέζικα (απλοποιημένα)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Κινέζικα (Παραδοσιακά)" @@ -348,257 +364,165 @@ msgstr "Κινέζικα (Παραδοσιακά)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Σύνδεση στην εφαρμογή" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Σφάλμα κατά την εκτέλεση επικύρωσης προσθέτου" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Τα μεταδεδομένα πρέπει να είναι ένα αντικείμενο dict python" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Μεταδεδομένα Πρόσθετου" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "JSON πεδίο μεταδεδομένων, για χρήση από εξωτερικά πρόσθετα" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Λανθασμένο μοτίβο" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Δώσατε λάθος μορφή κλειδιού" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Λείπει το απαραίτητο κλειδί" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Το πεδίο δεν μπορεί να είναι άδειο" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Η αναφορά πρέπει να ταιριάζει με το απαιτούμενο μοτίβο" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" - -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 "Το όνομα αρχείου περιέχει μη έγκυρους χαρακτήρες '{c}'" - -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Διπλότυπα ονόματα δεν μπορούν να υπάρχουν στον ίδιο γονέα" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Όνομα" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Περιγραφή" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "γονέας" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Μονοπάτι" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Σημειώσεις Markdown (προαιρετικό)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Στοιχεία Barcode" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Δεδομένα barcode τρίτων" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Μοναδικό hash δεδομένων barcode" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Βρέθηκε υπάρχων barcode" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Σφάλμα διακομιστή" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Νόμισμα" msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Δεν έχετε άδεια να αλλάξετε αυτόν τον ρόλο χρήστη." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Μόνο υπερχρήστες (superusers) μπορούν να δημιουργήσουν νέους χρήστες" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Ο λογαριασμός σας δημιουργήθηκε." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Καλώς ήρθατε στο InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Όνομα αρχείου" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Αρχείο Δεδομένων" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Επιλέξτε ένα αρχείο για ανέβασμα" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Μη υποστηριζόμενος τύπος αρχείου" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Το αρχείο είναι πολύ μεγάλο" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Δεν βρέθηκαν στήλες στο αρχείο" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Δεν βρέθηκαν γραμμές δεδομένων στο αρχείο" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Δεν παρασχέθηκαν σειρές δεδομένων" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Δεν δόθηκαν στήλες δεδομένων" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Λείπει απαιτούμενη στήλη: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Διπλή στήλη: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Απομακρυσμένες Εικόνες" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Ο έλεγχος εργασίας στο παρασκήνιο απέτυχε" @@ -702,27 +679,27 @@ msgstr "Δεν έχει ρυθμιστεί διεύθυνση ηλεκτρονι msgid "InvenTree system health checks failed" msgstr "Ο έλεγχος συστήματος για το Inventree απέτυχε" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Άγνωστη βάση δεδομένων" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Μη έγκυρη φυσική μονάδα" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Η μέση τιμή δεν πρέπει να είναι αρνητική" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Η μέση τιμή δεν πρέπει να υπερβαίνει το 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Μη έγκυρη τιμή για υπέρβαση" @@ -750,62 +727,63 @@ msgstr "Πληροφορίες συστήματος" msgid "About InvenTree" msgstr "Σχετικά με το InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Διαθέσιμο" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Σειρά Κατασκευής" msgid "Build Orders" msgstr "Δημιουργία Παραγγελιών" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Μη έγκυρη επιλογή για γονική κατασκευή" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Αναφορά" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατασκευή" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατα #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Εξάρτημα" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Επιλέξτε τμήμα για κατασκευή" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Κωδικός Παραγγελίας Πωλήσεων" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "SalesOrder στην οποία έχει διατεθεί αυτό το build" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Τοποθεσία Προορισμού" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Ποσότητα Κατασκευής" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Αριθμός αντικειμένων για κατασκευή" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Ολοκληρωμένα αντικείμενα" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Κατάσταση Κατασκευής" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Ημερομηνία ολοκλήρωσης στόχου" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "ολοκληρώθηκε από" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Εκδόθηκε από" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Υπεύθυνος" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "Προτεραιότητα Κατασκευής" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Προτεραιότητα αυτής της εντολής κατασκ msgid "Project Code" msgstr "Κωδικός Έργου" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Αντικείμενο κατασκευής" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Τοποθεσία" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Κατάσταση" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Σε εκκρεμότητα" @@ -1540,15 +1677,21 @@ msgstr "Σε εκκρεμότητα" msgid "Production" msgstr "Παραγωγή" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Ολοκληρώθηκε" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Αποσύνδεση Barcode" @@ -1612,7 +1755,7 @@ msgstr "Αποσύνδεση Barcode" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Σύνδεση Barcode" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Ακύρωση κατασκευής" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Διαγραφή Κατασκευής" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Ολοκλήρωση Κατασκευής" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Περιγραφή Κατασκευής" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Δεν έχουν δημιουργηθεί προϊόντα για αυτήν την εντολή κατασκευής" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Η εντολή Κατασκευής είναι έτοιμη για να επισημανθεί ως ολοκληρωμένη" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Η Εντολή Κατασκευής δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν εκκρεμή προϊόντα" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ακόμα ολοκληρωθεί" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "Το Απόθεμα δεν έχει κατανεμηθεί πλήρως σε αυτή την Εντολή Κατασκευής" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Αυτή η κατασκευή είχε προθεσμία %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Εκπρόθεσμη" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Ολοκληρωμένα Προϊόντα" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Εντολές Πώλησης" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Προτεραιότητα" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "Διαγραφή Εντολής Κατασκευής" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "Κωδικός QR Εντολής Κατασκευής" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "Σύνδεση Barcode με την Εντολή Κατασκευής" @@ -1766,8 +1930,8 @@ msgstr "Προέλευση Αποθέματος" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Προορισμός" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Χρήστης" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Σύνδεσμος" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Συνημμένο" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Το αρχείο λείπει" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Λείπει ο εξωτερικός σύνδεσμος" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Επιλέξτε αρχείο για επισύναψη" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Σχόλιο" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Όνομα αρχείου" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "Τοποθετήθηκε" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Χάθηκε" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Επιστράφηκε" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Σε Εξέλιξη" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Επιστροφή" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Επισκευή" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Αντικατάσταση" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Επιστροφή χρημάτων" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Απόρριψη" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "Σε Καραντίνα" msgid "Legacy stock tracking entry" msgstr "Καταχώρηση παλαιού αποθέματος" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Το αντικείμενο αποθεμάτων δημιουργήθηκε" @@ -9431,7 +10173,7 @@ msgstr "Έγινε διαχωρισμός από το γονεϊκό αρχεί msgid "Split child item" msgstr "Διαχωρίστηκε θυγατρικό στοιχείο" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Έγινε συγχώνευση αποθεμάτων" @@ -9451,7 +10193,7 @@ msgstr "Η έξοδος της σειράς κατασκευής ολοκληρ msgid "Build order output rejected" msgstr "Η εντολή κατασκευής απορρίφθηκε" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Κατανάλωση με εντολή κατασκευής" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 a6fd5f31f2..51ef15a5c8 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-06-11 14:05+0000\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -22,7 +22,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -53,30 +53,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -89,258 +93,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -349,257 +365,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -609,89 +533,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -703,27 +680,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -751,62 +728,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -817,59 +795,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -880,178 +871,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1059,65 +1057,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1126,414 +1125,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1541,15 +1678,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1577,8 +1720,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1589,7 +1732,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1600,9 +1743,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1613,7 +1756,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1637,87 +1780,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1727,31 +1883,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1767,8 +1931,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1780,23 +1944,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1805,8 +1969,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1814,12 +1978,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1842,7 +2006,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1871,15 +2035,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1889,25 +2057,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1915,10 +2083,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1931,7 +2126,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1973,1606 +2168,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3582,42 +3833,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3636,7 +3942,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3652,79 +3958,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3767,402 +4093,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4173,8 +4529,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4213,7 +4569,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4232,17 +4588,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4250,19 +4606,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4271,19 +4620,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4299,7 +4648,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4312,7 +4661,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4326,7 +4675,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4349,7 +4698,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4421,7 +4770,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4436,7 +4785,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4446,7 +4796,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4455,19 +4805,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4491,19 +4845,6 @@ msgstr "" 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" @@ -4512,7 +4853,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4545,12 +4886,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4559,13 +4900,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4583,29 +4924,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4631,10 +4976,6 @@ msgstr "" 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 "" @@ -4643,48 +4984,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4724,10 +5245,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4744,78 +5261,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4831,7 +5348,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4855,534 +5372,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5427,87 +5988,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5560,13 +6127,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5667,31 +6234,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5703,36 +6270,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5746,7 +6313,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5776,35 +6344,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5816,7 +6370,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5828,11 +6383,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5840,169 +6395,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6011,1042 +6580,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7066,11 +7737,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7092,65 +7763,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7196,9 +7867,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7210,101 +7881,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7339,13 +8014,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7363,7 +8038,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7373,7 +8048,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7385,7 +8060,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:2296 msgid "Part actions" msgstr "" @@ -7434,7 +8109,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7448,51 +8123,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7546,13 +8217,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7588,17 +8259,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7670,9 +8341,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7750,7 +8421,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7762,100 +8433,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7863,55 +8542,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7927,25 +8614,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8001,10 +8712,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8016,55 +8729,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8190,7 +8903,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8206,7 +8919,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8220,17 +8933,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8357,12 +9070,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8398,147 +9107,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8589,10 +9298,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8605,26 +9314,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8638,713 +9334,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9376,7 +10118,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9432,7 +10174,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9452,7 +10194,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9497,7 +10239,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:276 msgid "Delete Test Data" msgstr "" @@ -9513,15 +10255,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9534,8 +10276,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9544,17 +10286,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9563,12 +10305,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9609,14 +10351,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9626,7 +10364,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9670,12 +10408,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9692,11 +10426,6 @@ msgstr "" 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" @@ -9707,7 +10436,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9739,7 +10468,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9751,84 +10480,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9844,10 +10573,6 @@ msgstr "" 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 "" @@ -10098,11 +10823,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10208,7 +10933,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10218,7 +10943,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10321,9 +11046,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10344,7 +11069,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10363,12 +11088,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10376,40 +11101,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10432,7 +11157,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10481,18 +11206,6 @@ msgstr "" 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 "" @@ -10758,7 +11471,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10780,7 +11493,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11013,7 +11726,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11027,15 +11740,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11047,27 +11760,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11079,11 +11792,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11115,27 +11828,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11168,85 +11881,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11263,8 +11976,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11382,7 +12095,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11402,30 +12115,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11457,7 +12170,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11465,120 +12178,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11602,231 +12315,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11973,7 +12718,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11990,34 +12735,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12071,119 +12816,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12191,74 +12936,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12268,7 +13013,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12296,400 +13041,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12902,109 +13651,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13059,16 +13821,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13227,7 +13989,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13285,505 +14047,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13818,12 +14596,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13865,7 +14643,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13966,52 +14744,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14083,10 +14873,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14288,6 +15074,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14360,34 +15154,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 b08c3feea7..d9dee7edad 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-09 22:04\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "Endpoint de API no encontrado" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" @@ -52,294 +52,310 @@ msgstr "La cantidad suministrada es inválida ({exc})" msgid "Error details can be found in the admin panel" msgstr "Detalles del error pueden encontrarse en el panel de administración" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Ingrese la fecha" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Notas" #: InvenTree/format.py:164 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" -msgstr "" +msgstr "El valor '{name}' no aparece en formato de patrón" #: InvenTree/format.py:175 msgid "Provided value does not match required pattern: " msgstr "El valor proporcionado no coincide con el patrón requerido: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Ingresa tu contraseña" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Ingrese su nueva contraseña" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Confirma la contraseña" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Confirma la nueva contraseña" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Contraseña anterior" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (de nuevo)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Confirmación de correo electrónico" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "El correo electrónico debe coincidir." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "El registro ha sido desactivado." + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "La dirección de correo electrónico principal proporcionada no es válida." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "El dominio de correo electrónico proporcionado no está aprobado." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "El registro ha sido desactivado." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "No se ha proporcionado un número de serie" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Número de serie duplicado" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Rango de grupo inválido: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "El rango del grupo {group} supera la cantidad permitida ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Secuencia de grupo inválida: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "No se encontraron números de serie" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Los números de serie únicos ({len(serials)}) deben coincidir con la cantidad ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Elimine etiquetas HTML de este valor" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "El servidor respondió con un código de estado no válido" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "El servidor respondió con un valor de longitud de contenido inválido" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "La imagen descargada exedió el tamaño máximo" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "Árabe" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Búlgaro" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Checo" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Danés" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Alemán" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Griego" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Inglés" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Español" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Español (México)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "Estonia" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Persa" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finlandés" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Francés" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebreo" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hindi" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Húngaro" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italiano" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japonés" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Coreano" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "Letón" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Holandés" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Noruego" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polaco" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugués" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugués (Brasileño)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Rumano" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Ruso" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Eslovaco" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Esloveno" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Serbio" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Sueco" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Tailandés" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turco" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "Ucraniano" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Chino (Simplificado)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" @@ -348,349 +364,310 @@ msgstr "Chino (Tradicional)" msgid "[{site_name}] Log in to the app" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Correo electrónico" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Error al ejecutar la validación del plugin" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" -msgstr "" +msgstr "Los metadatos deben ser un objeto diccionario de python" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" -msgstr "" +msgstr "Metadatos del complemento" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" -msgstr "" +msgstr "Campo de metadatos JSON, para uso por complementos externos" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" -msgstr "" +msgstr "Patrón con formato incorrecto" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" -msgstr "" +msgstr "Clave de formato especificado desconocida" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" -msgstr "" +msgstr "Falta la clave de formato necesaria" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" -msgstr "" +msgstr "El campo de servidor no puede estar vacío" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" -msgstr "" +msgstr "La referencia debe coincidir con el patrón requerido" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" -msgstr "" +msgstr "El número de referencia es demasiado grande" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 "Error al cambiar el nombre del archivo" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Los nombres duplicados no pueden existir bajo el mismo padre" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Descripción" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "padre" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Ruta" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Notas (opcional)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Datos de código de barras" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Datos de código de barras de terceros" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Hash del Código de barras" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Hash único de datos de código de barras" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Error de servidor" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." -msgstr "" +msgstr "Se ha registrado un error por el servidor." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" -msgstr "" +msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" -msgstr "" +msgstr "Moneda" #: InvenTree/serializers.py:103 msgid "Select currency from available options" -msgstr "" +msgstr "Seleccionar moneda de las opciones disponibles" + +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Nombre de usuario" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Nombre" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "Nombre de usuario" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Apellido" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "Apellido del usuario" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "Dirección de email del usuario" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "Personal" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "Tiene permisos de personal este usuario" #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "Superusuario" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "Este usuario es un superusuario" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Activo" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "Esta cuenta de usuario está activa" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." -msgstr "" - -#: InvenTree/serializers.py:454 -msgid "Only superusers can create new users" -msgstr "" - -#: InvenTree/serializers.py:473 -msgid "Your account has been created." -msgstr "" +msgstr "No tiene permiso para cambiar este cargo de usuario." #: InvenTree/serializers.py:475 +msgid "Only superusers can create new users" +msgstr "Solo los superusuarios pueden crear nuevos usuarios" + +#: InvenTree/serializers.py:494 +msgid "Your account has been created." +msgstr "Su cuenta ha sido creada." + +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" -msgstr "" +msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" -msgstr "" +msgstr "Bienvenido a InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" -msgstr "" +msgstr "Valor inválido" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" -msgstr "" +msgstr "Archivo de datos" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" -msgstr "" +msgstr "Seleccione el archivo para subir" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" -msgstr "" +msgstr "Tipo de archivo no soportado" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" -msgstr "" +msgstr "El archivo es demasiado grande" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" -msgstr "" +msgstr "No hay columnas en el archivo" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" -msgstr "" +msgstr "No hay filas de datos en el archivo" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" -msgstr "" +msgstr "No se proporcionaron filas de datos" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" -msgstr "" +msgstr "No hay columnas de datos para suministrar" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" -msgstr "" +msgstr "Falta la columna requerida: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" -msgstr "" +msgstr "Columna duplicada: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" -msgstr "" +msgstr "Imagen remota" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" -msgstr "" +msgstr "URL de imagen remota" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" -msgstr "" +msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 a6fd5f31f2..51ef15a5c8 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-06-11 14:05+0000\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -22,7 +22,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -53,30 +53,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -89,258 +93,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -349,257 +365,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -609,89 +533,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -703,27 +680,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -751,62 +728,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -817,59 +795,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -880,178 +871,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1059,65 +1057,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1126,414 +1125,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1541,15 +1678,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1577,8 +1720,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1589,7 +1732,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1600,9 +1743,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1613,7 +1756,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1637,87 +1780,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1727,31 +1883,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1767,8 +1931,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1780,23 +1944,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1805,8 +1969,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1814,12 +1978,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1842,7 +2006,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1871,15 +2035,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1889,25 +2057,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1915,10 +2083,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1931,7 +2126,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1973,1606 +2168,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3582,42 +3833,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3636,7 +3942,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3652,79 +3958,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3767,402 +4093,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4173,8 +4529,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4213,7 +4569,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4232,17 +4588,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4250,19 +4606,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4271,19 +4620,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4299,7 +4648,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4312,7 +4661,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4326,7 +4675,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4349,7 +4698,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4421,7 +4770,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4436,7 +4785,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4446,7 +4796,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4455,19 +4805,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4491,19 +4845,6 @@ msgstr "" 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" @@ -4512,7 +4853,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4545,12 +4886,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4559,13 +4900,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4583,29 +4924,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4631,10 +4976,6 @@ msgstr "" 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 "" @@ -4643,48 +4984,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4724,10 +5245,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4744,78 +5261,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4831,7 +5348,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4855,534 +5372,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5427,87 +5988,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5560,13 +6127,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5667,31 +6234,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5703,36 +6270,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5746,7 +6313,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5776,35 +6344,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5816,7 +6370,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5828,11 +6383,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5840,169 +6395,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6011,1042 +6580,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7066,11 +7737,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7092,65 +7763,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7196,9 +7867,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7210,101 +7881,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7339,13 +8014,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7363,7 +8038,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7373,7 +8048,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7385,7 +8060,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:2296 msgid "Part actions" msgstr "" @@ -7434,7 +8109,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7448,51 +8123,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7546,13 +8217,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7588,17 +8259,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7670,9 +8341,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7750,7 +8421,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7762,100 +8433,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7863,55 +8542,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7927,25 +8614,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8001,10 +8712,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8016,55 +8729,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8190,7 +8903,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8206,7 +8919,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8220,17 +8933,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8357,12 +9070,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8398,147 +9107,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8589,10 +9298,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8605,26 +9314,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8638,713 +9334,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9376,7 +10118,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9432,7 +10174,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9452,7 +10194,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9497,7 +10239,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:276 msgid "Delete Test Data" msgstr "" @@ -9513,15 +10255,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9534,8 +10276,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9544,17 +10286,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9563,12 +10305,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9609,14 +10351,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9626,7 +10364,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9670,12 +10408,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9692,11 +10426,6 @@ msgstr "" 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" @@ -9707,7 +10436,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9739,7 +10468,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9751,84 +10480,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9844,10 +10573,6 @@ msgstr "" 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 "" @@ -10098,11 +10823,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10208,7 +10933,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10218,7 +10943,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10321,9 +11046,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10344,7 +11069,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10363,12 +11088,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10376,40 +11101,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10432,7 +11157,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10481,18 +11206,6 @@ msgstr "" 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 "" @@ -10758,7 +11471,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10780,7 +11493,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11013,7 +11726,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11027,15 +11740,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11047,27 +11760,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11079,11 +11792,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11115,27 +11828,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11168,85 +11881,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11263,8 +11976,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11382,7 +12095,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11402,30 +12115,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11457,7 +12170,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11465,120 +12178,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11602,231 +12315,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11973,7 +12718,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11990,34 +12735,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12071,119 +12816,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12191,74 +12936,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12268,7 +13013,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12296,400 +13041,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12902,109 +13651,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13059,16 +13821,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13227,7 +13989,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13285,505 +14047,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13818,12 +14596,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13865,7 +14643,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13966,52 +14744,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14083,10 +14873,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14288,6 +15074,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14360,34 +15154,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po new file mode 100644 index 0000000000..eb2903baaa --- /dev/null +++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,15186 @@ +msgid "" +msgstr "" +"Project-Id-Version: inventree\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:48\n" +"Last-Translator: \n" +"Language-Team: Estonian\n" +"Language: et_EE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: inventree\n" +"X-Crowdin-Project-ID: 452300\n" +"X-Crowdin-Language: et\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:505 +msgid "User does not have permission to view this model" +msgstr "Teil ei ole selle lehe vaatamiseks luba" + +#: 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:136 +msgid "Enter date" +msgstr "" + +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3290 part/templates/part/part_sidebar.html:65 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +msgid "Notes" +msgstr "Märkmed" + +#: 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:129 +msgid "Enter password" +msgstr "Salasõna" + +#: InvenTree/forms.py:130 +msgid "Enter new password" +msgstr "Sisesta uus parool" + +#: InvenTree/forms.py:139 +msgid "Confirm password" +msgstr "Kinnitage parool" + +#: InvenTree/forms.py:140 +msgid "Confirm new password" +msgstr "Kinnita uut parooli" + +#: InvenTree/forms.py:144 +msgid "Old password" +msgstr "Vana parool" + +#: InvenTree/forms.py:183 +msgid "Email (again)" +msgstr "Meili (uuesti)" + +#: InvenTree/forms.py:187 +msgid "Email address confirmation" +msgstr "E-posti aadressi kinnitus" + +#: InvenTree/forms.py:210 +msgid "You must type the same email each time." +msgstr "" + +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 +msgid "The provided primary email address is not valid." +msgstr "" + +#: InvenTree/forms.py:274 +msgid "The provided email domain is not approved." +msgstr "" + +#: InvenTree/forms.py:403 +msgid "Registration is disabled." +msgstr "Registreerimine on ajutiselt väljalülitatud." + +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:501 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:530 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 +#, python-brace-format +msgid "Invalid group range: {group}" +msgstr "" + +#: InvenTree/helpers.py:593 +#, python-brace-format +msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" +msgstr "" + +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 +#, python-brace-format +msgid "Invalid group sequence: {group}" +msgstr "" + +#: InvenTree/helpers.py:659 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:664 +msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" +msgstr "" + +#: InvenTree/helpers.py:782 +msgid "Remove HTML tags from this value" +msgstr "" + +#: InvenTree/helpers_model.py:137 +msgid "Connection error" +msgstr "Ühenduse viga" + +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 +msgid "Server responded with invalid status code" +msgstr "" + +#: InvenTree/helpers_model.py:145 +msgid "Exception occurred" +msgstr "Esines tõrge" + +#: InvenTree/helpers_model.py:155 +msgid "Server responded with invalid Content-Length value" +msgstr "" + +#: InvenTree/helpers_model.py:158 +msgid "Image size is too large" +msgstr "" + +#: InvenTree/helpers_model.py:170 +msgid "Image download exceeded maximum size" +msgstr "" + +#: InvenTree/helpers_model.py:175 +msgid "Remote server returned empty response" +msgstr "" + +#: InvenTree/helpers_model.py:183 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "Araabia" + +#: InvenTree/locales.py:19 +msgid "Bulgarian" +msgstr "Bulgaaria keel" + +#: InvenTree/locales.py:20 +msgid "Czech" +msgstr "Tšehhi" + +#: InvenTree/locales.py:21 +msgid "Danish" +msgstr "Taani" + +#: InvenTree/locales.py:22 +msgid "German" +msgstr "Saksa keel" + +#: InvenTree/locales.py:23 +msgid "Greek" +msgstr "Kreeka keel" + +#: InvenTree/locales.py:24 +msgid "English" +msgstr "Inglise keel" + +#: InvenTree/locales.py:25 +msgid "Spanish" +msgstr "Hispaania keel" + +#: InvenTree/locales.py:26 +msgid "Spanish (Mexican)" +msgstr "" + +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "Eesti" + +#: InvenTree/locales.py:28 +msgid "Farsi / Persian" +msgstr "" + +#: InvenTree/locales.py:29 +msgid "Finnish" +msgstr "" + +#: InvenTree/locales.py:30 +msgid "French" +msgstr "" + +#: InvenTree/locales.py:31 +msgid "Hebrew" +msgstr "" + +#: InvenTree/locales.py:32 +msgid "Hindi" +msgstr "" + +#: InvenTree/locales.py:33 +msgid "Hungarian" +msgstr "" + +#: InvenTree/locales.py:34 +msgid "Italian" +msgstr "" + +#: InvenTree/locales.py:35 +msgid "Japanese" +msgstr "" + +#: InvenTree/locales.py:36 +msgid "Korean" +msgstr "" + +#: InvenTree/locales.py:37 +msgid "Latvian" +msgstr "" + +#: InvenTree/locales.py:38 +msgid "Dutch" +msgstr "" + +#: InvenTree/locales.py:39 +msgid "Norwegian" +msgstr "" + +#: InvenTree/locales.py:40 +msgid "Polish" +msgstr "" + +#: InvenTree/locales.py:41 +msgid "Portuguese" +msgstr "" + +#: InvenTree/locales.py:42 +msgid "Portuguese (Brazilian)" +msgstr "" + +#: InvenTree/locales.py:43 +msgid "Romanian" +msgstr "" + +#: InvenTree/locales.py:44 +msgid "Russian" +msgstr "" + +#: InvenTree/locales.py:45 +msgid "Slovak" +msgstr "" + +#: InvenTree/locales.py:46 +msgid "Slovenian" +msgstr "" + +#: InvenTree/locales.py:47 +msgid "Serbian" +msgstr "" + +#: InvenTree/locales.py:48 +msgid "Swedish" +msgstr "" + +#: InvenTree/locales.py:49 +msgid "Thai" +msgstr "Tai keel" + +#: InvenTree/locales.py:50 +msgid "Turkish" +msgstr "Türgi keel" + +#: InvenTree/locales.py:51 +msgid "Ukrainian" +msgstr "Ukraina keel" + +#: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 +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 InvenTree/serializers.py:415 +#: company/models.py:136 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:103 +msgid "Error running plugin validation" +msgstr "" + +#: InvenTree/models.py:172 +msgid "Metadata must be a python dict object" +msgstr "" + +#: InvenTree/models.py:178 +msgid "Plugin Metadata" +msgstr "" + +#: InvenTree/models.py:179 +msgid "JSON metadata field, for use by external plugins" +msgstr "" + +#: InvenTree/models.py:409 +msgid "Improperly formatted pattern" +msgstr "" + +#: InvenTree/models.py:416 +msgid "Unknown format key specified" +msgstr "" + +#: InvenTree/models.py:422 +msgid "Missing required format key" +msgstr "" + +#: InvenTree/models.py:433 +msgid "Reference field cannot be empty" +msgstr "" + +#: InvenTree/models.py:441 +msgid "Reference must match required pattern" +msgstr "" + +#: InvenTree/models.py:472 +msgid "Reference number is too large" +msgstr "" + +#: InvenTree/models.py:723 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:740 +msgid "Invalid choice" +msgstr "" + +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 +#: 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:454 +#: 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:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 +#: 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:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 +#: part/templates/part/part_base.html:170 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: 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:459 +#: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 +#: templates/js/translated/build.js:2311 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:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 +#: templates/js/translated/plugin.js:80 +#: templates/js/translated/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 +#: 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:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:777 stock/models.py:84 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 +msgid "Path" +msgstr "" + +#: InvenTree/models.py:929 +msgid "Markdown notes (optional)" +msgstr "" + +#: InvenTree/models.py:960 +msgid "Barcode Data" +msgstr "" + +#: InvenTree/models.py:961 +msgid "Third party barcode data" +msgstr "" + +#: InvenTree/models.py:967 +msgid "Barcode Hash" +msgstr "" + +#: InvenTree/models.py:968 +msgid "Unique hash of barcode data" +msgstr "" + +#: InvenTree/models.py:1035 +msgid "Existing barcode found" +msgstr "" + +#: InvenTree/models.py:1078 +msgid "Server Error" +msgstr "" + +#: InvenTree/models.py:1079 +msgid "An error has been logged by the server." +msgstr "" + +#: InvenTree/serializers.py:63 part/models.py:4380 +msgid "Must be a valid number" +msgstr "" + +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 +#: templates/InvenTree/settings/settings_staff_js.html:44 +#: templates/currency_data.html:5 +msgid "Currency" +msgstr "Valuuta" + +#: InvenTree/serializers.py:103 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Eesnimi" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Perekonnanimi" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 +msgid "You do not have permission to change this user role." +msgstr "" + +#: InvenTree/serializers.py:475 +msgid "Only superusers can create new users" +msgstr "" + +#: InvenTree/serializers.py:494 +msgid "Your account has been created." +msgstr "" + +#: InvenTree/serializers.py:496 +msgid "Please use the password reset function to login" +msgstr "" + +#: InvenTree/serializers.py:503 +msgid "Welcome to InvenTree" +msgstr "" + +#: InvenTree/serializers.py:561 +msgid "Invalid value" +msgstr "" + +#: InvenTree/serializers.py:581 importer/models.py:63 +msgid "Data File" +msgstr "" + +#: InvenTree/serializers.py:582 +msgid "Select data file for upload" +msgstr "" + +#: InvenTree/serializers.py:599 +msgid "Unsupported file type" +msgstr "" + +#: InvenTree/serializers.py:605 +msgid "File is too large" +msgstr "" + +#: InvenTree/serializers.py:626 +msgid "No columns found in file" +msgstr "" + +#: InvenTree/serializers.py:629 +msgid "No data rows found in file" +msgstr "" + +#: InvenTree/serializers.py:742 +msgid "No data rows provided" +msgstr "" + +#: InvenTree/serializers.py:745 +msgid "No data columns supplied" +msgstr "" + +#: InvenTree/serializers.py:812 +#, python-brace-format +msgid "Missing required column: '{name}'" +msgstr "" + +#: InvenTree/serializers.py:821 +#, python-brace-format +msgid "Duplicate column: '{col}'" +msgstr "" + +#: InvenTree/serializers.py:861 +msgid "Remote Image" +msgstr "" + +#: InvenTree/serializers.py:862 +msgid "URL of remote image file" +msgstr "" + +#: InvenTree/serializers.py:880 +msgid "Downloading images from remote URL is not enabled" +msgstr "" + +#: InvenTree/status.py:66 part/serializers.py:1244 +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:184 +msgid "Unknown database" +msgstr "Tundmatu andmebaas" + +#: InvenTree/validators.py:32 InvenTree/validators.py:34 +msgid "Invalid physical unit" +msgstr "" + +#: InvenTree/validators.py:40 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:118 InvenTree/validators.py:134 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:136 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:142 +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 "Määra parool" + +#: InvenTree/views.py:434 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:442 +msgid "Wrong password provided" +msgstr "Esitatud vale parool" + +#: 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:247 +msgid "Build must be cancelled before it can be deleted" +msgstr "" + +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:597 +msgid "Consumable" +msgstr "" + +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:601 +msgid "Optional" +msgstr "" + +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 +msgid "Tracked" +msgstr "" + +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 +#: templates/js/translated/sales_order.js:1965 +#: templates/js/translated/table_filters.js:585 +msgid "Allocated" +msgstr "" + +#: build/api.py:303 company/models.py:891 company/serializers.py:395 +#: 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:2752 +#: templates/js/translated/index.js:123 +#: templates/js/translated/model_renderers.js:235 +#: 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:589 +msgid "Available" +msgstr "" + +#: build/models.py:86 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:84 templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +msgid "Build Order" +msgstr "" + +#: build/models.py:87 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:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:174 order/models.py:240 +msgid "Responsible user or group must be specified" +msgstr "" + +#: build/models.py:180 +msgid "Build order part cannot be changed" +msgstr "" + +#: build/models.py:241 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 +#: templates/js/translated/sales_order.js:1854 +msgid "Reference" +msgstr "Tootekood" + +#: build/models.py:253 +msgid "Brief description of the build (optional)" +msgstr "" + +#: build/models.py:261 build/templates/build/build_base.html:191 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:262 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 +#: 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:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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:577 templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 +#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 templates/js/translated/pricing.js:369 +#: templates/js/translated/purchase_order.js:751 +#: templates/js/translated/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:708 +#: 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:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 +msgid "Part" +msgstr "" + +#: build/models.py:275 +msgid "Select part to build" +msgstr "" + +#: build/models.py:280 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:284 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 +#: templates/js/translated/sales_order.js:1221 +msgid "Source Location" +msgstr "" + +#: build/models.py:293 +msgid "Select location to take stock from for this build (leave blank to take from any stock location)" +msgstr "" + +#: build/models.py:298 +msgid "Destination Location" +msgstr "" + +#: build/models.py:302 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:306 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:309 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:313 +msgid "Completed items" +msgstr "" + +#: build/models.py:315 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:319 +msgid "Build Status" +msgstr "" + +#: build/models.py:323 +msgid "Build status code" +msgstr "" + +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 +msgid "Batch Code" +msgstr "" + +#: build/models.py:336 build/serializers.py:298 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 +msgid "Creation Date" +msgstr "" + +#: build/models.py:343 +msgid "Target completion date" +msgstr "" + +#: build/models.py:344 +msgid "Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 +msgid "Completion Date" +msgstr "" + +#: build/models.py:353 +msgid "completed by" +msgstr "" + +#: build/models.py:361 templates/js/translated/build.js:2379 +msgid "Issued by" +msgstr "" + +#: build/models.py:362 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 +#: report/templates/report/inventree_build_order_report.html:158 +#: templates/InvenTree/settings/settings_staff_js.html:150 +#: templates/js/translated/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 +#: templates/js/translated/return_order.js:358 +#: templates/js/translated/table_filters.js:545 +msgid "Responsible" +msgstr "" + +#: build/models.py:371 +msgid "User or group responsible for this build order" +msgstr "" + +#: build/models.py:376 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:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 +#: stock/templates/stock/item_base.html:200 +#: templates/js/translated/company.js:1019 +msgid "External Link" +msgstr "" + +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 +msgid "Build Priority" +msgstr "" + +#: build/models.py:384 +msgid "Priority of this build order" +msgstr "" + +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 +#: 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:392 +msgid "Project code for this build order" +msgstr "" + +#: build/models.py:639 build/models.py:766 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:661 +#, python-brace-format +msgid "Build order {build} has been completed" +msgstr "" + +#: build/models.py:667 +msgid "A build order has been completed" +msgstr "" + +#: build/models.py:955 build/models.py:1040 +msgid "No build output specified" +msgstr "" + +#: build/models.py:958 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:961 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +msgid "Quantity must be greater than zero" +msgstr "" + +#: build/models.py:1049 build/serializers.py:235 +msgid "Quantity cannot be greater than the output quantity" +msgstr "" + +#: build/models.py:1109 build/serializers.py:558 +#, python-brace-format +msgid "Build output {serial} has not passed all required tests" +msgstr "" + +#: build/models.py:1450 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1475 +msgid "Build object" +msgstr "" + +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 +#: 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:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: 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:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/company.js:1818 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 +#: 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:1922 +#: templates/js/translated/purchase_order.js:2141 +#: 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:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 +msgid "Quantity" +msgstr "" + +#: build/models.py:1490 +msgid "Required quantity for build order" +msgstr "" + +#: build/models.py:1570 +msgid "Build item must specify a build output, as master part is marked as trackable" +msgstr "" + +#: build/models.py:1579 +#, python-brace-format +msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" +msgstr "" + +#: build/models.py:1589 order/models.py:1992 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/models.py:1595 order/models.py:1995 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1601 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1660 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 +#: 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:1918 +#: 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:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1733 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1746 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1754 +msgid "Install into" +msgstr "" + +#: build/models.py:1755 +msgid "Destination stock item" +msgstr "" + +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +msgid "Build Output" +msgstr "" + +#: build/serializers.py:179 +msgid "Build output does not match the parent build" +msgstr "" + +#: build/serializers.py:183 +msgid "Output part does not match BuildOrder part" +msgstr "" + +#: build/serializers.py:187 +msgid "This build output has already been completed" +msgstr "" + +#: build/serializers.py:198 +msgid "This build output is not fully allocated" +msgstr "" + +#: build/serializers.py:218 build/serializers.py:265 +msgid "Enter quantity for build output" +msgstr "" + +#: build/serializers.py:286 +msgid "Integer quantity required for trackable parts" +msgstr "" + +#: build/serializers.py:289 +msgid "Integer quantity required, as the bill of materials contains trackable parts" +msgstr "" + +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +msgid "Serial Numbers" +msgstr "" + +#: build/serializers.py:305 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 +#: 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:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 +msgid "Location" +msgstr "" + +#: build/serializers.py:311 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:325 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:326 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:341 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:366 stock/api.py:1033 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:452 +msgid "Stock location for scrapped outputs" +msgstr "" + +#: build/serializers.py:458 +msgid "Discard Allocations" +msgstr "" + +#: build/serializers.py:459 +msgid "Discard any stock allocations for scrapped outputs" +msgstr "" + +#: build/serializers.py:464 +msgid "Reason for scrapping build output(s)" +msgstr "" + +#: build/serializers.py:524 +msgid "Location for completed build outputs" +msgstr "" + +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 +msgid "Status" +msgstr "" + +#: build/serializers.py:536 +msgid "Accept Incomplete Allocation" +msgstr "" + +#: build/serializers.py:537 +msgid "Complete outputs if stock has not been fully allocated" +msgstr "" + +#: build/serializers.py:649 +msgid "Consume Allocated Stock" +msgstr "" + +#: build/serializers.py:650 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" + +#: build/serializers.py:656 +msgid "Remove Incomplete Outputs" +msgstr "" + +#: build/serializers.py:657 +msgid "Delete any build outputs which have not been completed" +msgstr "" + +#: build/serializers.py:684 +msgid "Not permitted" +msgstr "" + +#: build/serializers.py:685 +msgid "Accept as consumed by this build order" +msgstr "" + +#: build/serializers.py:686 +msgid "Deallocate before completing this build order" +msgstr "" + +#: build/serializers.py:716 +msgid "Overallocated Stock" +msgstr "" + +#: build/serializers.py:718 +msgid "How do you want to handle extra stock items assigned to the build order" +msgstr "" + +#: build/serializers.py:728 +msgid "Some stock items have been overallocated" +msgstr "" + +#: build/serializers.py:733 +msgid "Accept Unallocated" +msgstr "" + +#: build/serializers.py:734 +msgid "Accept that stock items have not been fully allocated to this build order" +msgstr "" + +#: build/serializers.py:744 templates/js/translated/build.js:316 +msgid "Required stock has not been fully allocated" +msgstr "" + +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 +msgid "Accept Incomplete" +msgstr "" + +#: build/serializers.py:750 +msgid "Accept that the required number of build outputs have not been completed" +msgstr "" + +#: build/serializers.py:760 templates/js/translated/build.js:320 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 +msgid "Build order has incomplete outputs" +msgstr "" + +#: build/serializers.py:810 +msgid "Build Line" +msgstr "" + +#: build/serializers.py:820 +msgid "Build output" +msgstr "" + +#: build/serializers.py:828 +msgid "Build output must point to the same build" +msgstr "" + +#: build/serializers.py:864 +msgid "Build Line Item" +msgstr "" + +#: build/serializers.py:878 +msgid "bom_item.part must point to the same part as the build order" +msgstr "" + +#: build/serializers.py:893 stock/serializers.py:1294 +msgid "Item must be in stock" +msgstr "" + +#: build/serializers.py:941 order/serializers.py:1346 +#, python-brace-format +msgid "Available quantity ({q}) exceeded" +msgstr "" + +#: build/serializers.py:947 +msgid "Build output must be specified for allocation of tracked parts" +msgstr "" + +#: build/serializers.py:954 +msgid "Build output cannot be specified for allocation of untracked parts" +msgstr "" + +#: build/serializers.py:978 order/serializers.py:1605 +msgid "Allocation items must be provided" +msgstr "" + +#: build/serializers.py:1041 +msgid "Stock location where parts are to be sourced (leave blank to take from any location)" +msgstr "" + +#: build/serializers.py:1049 +msgid "Exclude Location" +msgstr "" + +#: build/serializers.py:1050 +msgid "Exclude stock items from this selected location" +msgstr "" + +#: build/serializers.py:1055 +msgid "Interchangeable Stock" +msgstr "" + +#: build/serializers.py:1056 +msgid "Stock items in multiple locations can be used interchangeably" +msgstr "" + +#: build/serializers.py:1061 +msgid "Substitute Stock" +msgstr "" + +#: build/serializers.py:1062 +msgid "Allow allocation of substitute parts" +msgstr "" + +#: build/serializers.py:1067 +msgid "Optional Items" +msgstr "" + +#: build/serializers.py:1068 +msgid "Allocate optional BOM items to build order" +msgstr "" + +#: build/serializers.py:1090 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "Tarnija osa number" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "Osa ID" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Seerianumber" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 +msgid "BOM Item" +msgstr "" + +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +msgid "Allocated Stock" +msgstr "" + +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 +#: templates/js/translated/table_filters.js:170 +msgid "On Order" +msgstr "" + +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 +#: templates/js/translated/table_filters.js:360 +msgid "In Production" +msgstr "" + +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 +#: part/templates/part/part_base.html:192 +#: templates/js/translated/sales_order.js:1929 +msgid "Available Stock" +msgstr "" + +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External Stock" +msgstr "" + +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 +msgid "Pending" +msgstr "Ootel" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 +msgid "Cancelled" +msgstr "Katkestatud" + +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 +msgid "Complete" +msgstr "Valmis" + +#: 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:52 +#: templates/js/translated/filters.js:338 +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:54 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:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 +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:58 +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 "Duplicate Build" +msgstr "" + +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + +#: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 +msgid "Delete Build" +msgstr "" + +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:115 +msgid "Build Description" +msgstr "" + +#: build/templates/build/build_base.html:125 +msgid "No build outputs have been created for this build order" +msgstr "" + +#: build/templates/build/build_base.html:132 +msgid "Build Order is ready to mark as completed" +msgstr "" + +#: build/templates/build/build_base.html:137 +msgid "Build Order cannot be completed as outstanding outputs remain" +msgstr "" + +#: build/templates/build/build_base.html:142 +msgid "Required build quantity has not yet been completed" +msgstr "" + +#: build/templates/build/build_base.html:147 +msgid "Stock has not been fully allocated to this Build Order" +msgstr "" + +#: build/templates/build/build_base.html:168 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:749 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 +msgid "Target Date" +msgstr "" + +#: build/templates/build/build_base.html:173 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 +msgid "Completed Outputs" +msgstr "" + +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: 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:3008 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:205 +#: 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:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +msgid "Priority" +msgstr "" + +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Delete Build Order" +msgstr "" + +#: build/templates/build/build_base.html:312 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:324 +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:1532 +#: templates/js/translated/purchase_order.js:2259 +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:162 +#: stock/templates/stock/item_base.html:162 +#: templates/js/translated/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 +#: 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:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 +msgid "Created" +msgstr "Loodud" + +#: 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:209 +#: templates/js/translated/table_filters.js:703 +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:21 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/detail.html:177 +msgid "Build Order Line Items" +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 +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:249 build/templates/build/sidebar.html:19 +msgid "Consumed Stock" +msgstr "" + +#: build/templates/build/detail.html:261 +msgid "Completed Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: 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:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" +msgstr "" + +#: build/templates/build/detail.html:303 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/detail.html:457 +msgid "Allocation Complete" +msgstr "" + +#: build/templates/build/detail.html:458 +msgid "All lines have been fully allocated" +msgstr "" + +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + +#: build/templates/build/sidebar.html:10 +msgid "Incomplete Outputs" +msgstr "" + +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + +#: common/currency.py:132 +msgid "Invalid currency code" +msgstr "" + +#: common/currency.py:134 +msgid "Duplicate currency code" +msgstr "" + +#: common/currency.py:139 +msgid "No valid currency codes provided" +msgstr "" + +#: common/currency.py:156 +msgid "No plugin" +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:86 +msgid "Updated" +msgstr "" + +#: common/models.py:87 +msgid "Timestamp of last update" +msgstr "" + +#: common/models.py:120 +msgid "Site URL is locked by configuration" +msgstr "" + +#: common/models.py:150 +msgid "Unique project code" +msgstr "" + +#: common/models.py:157 +msgid "Project description" +msgstr "" + +#: common/models.py:166 +msgid "User or group responsible for this project" +msgstr "" + +#: common/models.py:783 +msgid "Settings key (must be unique - case insensitive)" +msgstr "" + +#: common/models.py:787 +msgid "Settings value" +msgstr "" + +#: common/models.py:839 +msgid "Chosen value is not a valid option" +msgstr "" + +#: common/models.py:855 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:863 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:900 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:1132 +msgid "No group" +msgstr "Grupp puudub" + +#: common/models.py:1231 +msgid "Restart required" +msgstr "Taaskäivitamine on vajalik" + +#: common/models.py:1233 +msgid "A setting has been changed which requires a server restart" +msgstr "" + +#: common/models.py:1240 +msgid "Pending migrations" +msgstr "" + +#: common/models.py:1241 +msgid "Number of pending database migrations" +msgstr "" + +#: common/models.py:1246 +msgid "Server Instance Name" +msgstr "" + +#: common/models.py:1248 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:1252 +msgid "Use instance name" +msgstr "" + +#: common/models.py:1253 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:1258 +msgid "Restrict showing `about`" +msgstr "" + +#: common/models.py:1259 +msgid "Show the `about` modal only to superusers" +msgstr "" + +#: common/models.py:1264 company/models.py:111 company/models.py:112 +msgid "Company name" +msgstr "" + +#: common/models.py:1265 +msgid "Internal company name" +msgstr "" + +#: common/models.py:1269 +msgid "Base URL" +msgstr "" + +#: common/models.py:1270 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:1276 +msgid "Default Currency" +msgstr "" + +#: common/models.py:1277 +msgid "Select base currency for pricing calculations" +msgstr "" + +#: common/models.py:1283 +msgid "Supported Currencies" +msgstr "" + +#: common/models.py:1284 +msgid "List of supported currency codes" +msgstr "" + +#: common/models.py:1290 +msgid "Currency Update Interval" +msgstr "" + +#: common/models.py:1292 +msgid "How often to update exchange rates (set to zero to disable)" +msgstr "" + +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 +msgid "days" +msgstr "" + +#: common/models.py:1299 +msgid "Currency Update Plugin" +msgstr "" + +#: common/models.py:1300 +msgid "Currency update plugin to use" +msgstr "" + +#: common/models.py:1305 +msgid "Download from URL" +msgstr "" + +#: common/models.py:1307 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:1313 +msgid "Download Size Limit" +msgstr "" + +#: common/models.py:1314 +msgid "Maximum allowable download size for remote image" +msgstr "" + +#: common/models.py:1320 +msgid "User-agent used to download from URL" +msgstr "" + +#: common/models.py:1322 +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:1327 +msgid "Strict URL Validation" +msgstr "" + +#: common/models.py:1328 +msgid "Require schema specification when validating URLs" +msgstr "" + +#: common/models.py:1333 +msgid "Require confirm" +msgstr "" + +#: common/models.py:1334 +msgid "Require explicit user confirmation for certain action." +msgstr "" + +#: common/models.py:1339 +msgid "Tree Depth" +msgstr "" + +#: common/models.py:1341 +msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." +msgstr "" + +#: common/models.py:1347 +msgid "Update Check Interval" +msgstr "" + +#: common/models.py:1348 +msgid "How often to check for updates (set to zero to disable)" +msgstr "" + +#: common/models.py:1354 +msgid "Automatic Backup" +msgstr "Automaatne varundus" + +#: common/models.py:1355 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1360 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1361 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1367 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1369 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1376 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1378 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1385 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1387 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Vöötkoodi tugi" + +#: common/models.py:1395 +msgid "Enable barcode scanner support in the web interface" +msgstr "" + +#: common/models.py:1400 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1401 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1407 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1408 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1426 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1438 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1443 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1444 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1447 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1448 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1453 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1454 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1459 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1460 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1465 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1466 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1471 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1472 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1477 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1478 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:786 +msgid "Template" +msgstr "" + +#: common/models.py:1484 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:740 +msgid "Assembly" +msgstr "" + +#: common/models.py:1490 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 +msgid "Component" +msgstr "" + +#: common/models.py:1496 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1502 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 +msgid "Salable" +msgstr "" + +#: common/models.py:1508 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1514 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 +#: part/templates/part/part_base.html:154 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:794 +msgid "Virtual" +msgstr "" + +#: common/models.py:1520 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1525 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1526 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1531 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1532 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1537 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1538 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1543 templates/js/translated/part.js:108 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1545 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1551 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1552 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1558 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1559 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1564 +msgid "Enforce Parameter Units" +msgstr "" + +#: common/models.py:1566 +msgid "If units are provided, parameter values must match the specified units" +msgstr "" + +#: common/models.py:1572 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1574 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1585 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1587 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1598 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1600 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1606 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1608 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1614 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1616 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1622 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1624 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1631 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1632 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1637 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1639 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1645 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1647 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1654 +msgid "Internal Prices" +msgstr "" + +#: common/models.py:1655 +msgid "Enable internal prices for parts" +msgstr "" + +#: common/models.py:1660 +msgid "Internal Price Override" +msgstr "" + +#: common/models.py:1662 +msgid "If available, internal prices override price range calculations" +msgstr "" + +#: common/models.py:1668 +msgid "Enable label printing" +msgstr "" + +#: common/models.py:1669 +msgid "Enable label printing from the web interface" +msgstr "" + +#: common/models.py:1674 +msgid "Label Image DPI" +msgstr "" + +#: common/models.py:1676 +msgid "DPI resolution when generating image files to supply to label printing plugins" +msgstr "" + +#: common/models.py:1682 +msgid "Enable Reports" +msgstr "" + +#: common/models.py:1683 +msgid "Enable generation of reports" +msgstr "" + +#: common/models.py:1688 templates/stats.html:25 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:1689 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:1694 +msgid "Log Report Errors" +msgstr "" + +#: common/models.py:1695 +msgid "Log errors which occur when generating reports" +msgstr "" + +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 +msgid "Page Size" +msgstr "" + +#: common/models.py:1701 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:1706 +msgid "Enable Test Reports" +msgstr "" + +#: common/models.py:1707 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:1712 +msgid "Attach Test Reports" +msgstr "" + +#: common/models.py:1714 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +msgstr "" + +#: common/models.py:1720 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1721 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1726 +msgid "Autofill Serial Numbers" +msgstr "" + +#: common/models.py:1727 +msgid "Autofill serial numbers in forms" +msgstr "" + +#: common/models.py:1732 +msgid "Delete Depleted Stock" +msgstr "" + +#: common/models.py:1734 +msgid "Determines default behavior when a stock item is depleted" +msgstr "" + +#: common/models.py:1740 +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1742 +msgid "Template for generating default batch codes for stock items" +msgstr "" + +#: common/models.py:1747 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:1748 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:1753 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:1754 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:1759 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:1761 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:1768 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:1769 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:1774 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:1775 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:1780 +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1781 +msgid "Stock location default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1786 +msgid "Show Installed Stock Items" +msgstr "" + +#: common/models.py:1787 +msgid "Display installed stock items in stock tables" +msgstr "" + +#: common/models.py:1792 +msgid "Check BOM when installing items" +msgstr "" + +#: common/models.py:1794 +msgid "Installed stock items must exist in the BOM for the parent part" +msgstr "" + +#: common/models.py:1800 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1802 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1808 +msgid "Build Order Reference Pattern" +msgstr "" + +#: common/models.py:1810 +msgid "Required pattern for generating Build Order reference field" +msgstr "" + +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 +msgid "Require Responsible Owner" +msgstr "" + +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 +msgid "A responsible owner must be assigned to each order" +msgstr "" + +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 +msgid "Block Until Tests Pass" +msgstr "" + +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" +msgstr "" + +#: common/models.py:1850 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1856 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1870 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" +msgstr "" + +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1892 +msgid "Sales Order Default Shipment" +msgstr "" + +#: common/models.py:1893 +msgid "Enable creation of default shipment with sales orders" +msgstr "" + +#: common/models.py:1898 +msgid "Edit Completed Sales Orders" +msgstr "" + +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1906 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" +msgstr "" + +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" +msgstr "" + +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" +msgstr "" + +#: common/models.py:1938 +msgid "Automatically mark purchase orders as complete when all line items are received" +msgstr "" + +#: common/models.py:1945 +msgid "Enable password forgot" +msgstr "" + +#: common/models.py:1946 +msgid "Enable password forgot function on the login pages" +msgstr "" + +#: common/models.py:1951 +msgid "Enable registration" +msgstr "" + +#: common/models.py:1952 +msgid "Enable self-registration for users on the login pages" +msgstr "" + +#: common/models.py:1957 +msgid "Enable SSO" +msgstr "" + +#: common/models.py:1958 +msgid "Enable SSO on the login pages" +msgstr "" + +#: common/models.py:1963 +msgid "Enable SSO registration" +msgstr "" + +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" +msgstr "" + +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 +msgid "Email required" +msgstr "" + +#: common/models.py:2004 +msgid "Require user to supply mail on signup" +msgstr "" + +#: common/models.py:2009 +msgid "Auto-fill SSO users" +msgstr "" + +#: common/models.py:2011 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "" + +#: common/models.py:2017 +msgid "Mail twice" +msgstr "" + +#: common/models.py:2018 +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" +msgstr "" + +#: common/models.py:2024 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:2029 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "" + +#: common/models.py:2037 +msgid "Group on signup" +msgstr "" + +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" + +#: common/models.py:2045 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:2046 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:2051 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:2061 +msgid "Check for plugin updates" +msgstr "" + +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" +msgstr "" + +#: common/models.py:2111 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" + +#: common/models.py:2117 +msgid "Exclude External Locations" +msgstr "" + +#: common/models.py:2119 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" + +#: common/models.py:2125 +msgid "Automatic Stocktake Period" +msgstr "" + +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" + +#: common/models.py:2133 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:2142 +msgid "Display Users full names" +msgstr "" + +#: common/models.py:2143 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/models.py:2148 +msgid "Enable Test Station Data" +msgstr "" + +#: common/models.py:2149 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:2204 +msgid "Hide inactive parts" +msgstr "" + +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" +msgstr "" + +#: common/models.py:2212 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:2218 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:2224 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:2225 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:2230 +msgid "Show invalid BOMs" +msgstr "" + +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:2237 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" +msgstr "" + +#: common/models.py:2243 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:2248 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" +msgstr "" + +#: common/models.py:2254 +msgid "Show needed stock" +msgstr "" + +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" +msgstr "" + +#: common/models.py:2260 +msgid "Show expired stock" +msgstr "" + +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" +msgstr "" + +#: common/models.py:2266 +msgid "Show stale stock" +msgstr "" + +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" +msgstr "" + +#: common/models.py:2272 +msgid "Show pending builds" +msgstr "" + +#: common/models.py:2273 +msgid "Show pending builds on the homepage" +msgstr "" + +#: common/models.py:2278 +msgid "Show overdue builds" +msgstr "" + +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" +msgstr "" + +#: common/models.py:2284 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:2290 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" +msgstr "" + +#: common/models.py:2296 +msgid "Show outstanding SOs" +msgstr "" + +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" +msgstr "" + +#: common/models.py:2302 +msgid "Show overdue SOs" +msgstr "" + +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" +msgstr "" + +#: common/models.py:2308 +msgid "Show pending SO shipments" +msgstr "" + +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" +msgstr "" + +#: common/models.py:2314 +msgid "Show News" +msgstr "" + +#: common/models.py:2315 +msgid "Show news on the homepage" +msgstr "" + +#: common/models.py:2320 +msgid "Inline label display" +msgstr "" + +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" +msgstr "" + +#: common/models.py:2328 +msgid "Default label printer" +msgstr "" + +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:2336 +msgid "Inline report display" +msgstr "" + +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" +msgstr "" + +#: common/models.py:2344 +msgid "Search Parts" +msgstr "" + +#: common/models.py:2345 +msgid "Display parts in search preview window" +msgstr "" + +#: common/models.py:2350 +msgid "Search Supplier Parts" +msgstr "" + +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" +msgstr "" + +#: common/models.py:2357 +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" +msgstr "" + +#: common/models.py:2363 +msgid "Excluded inactive parts from search preview window" +msgstr "" + +#: common/models.py:2368 +msgid "Search Categories" +msgstr "" + +#: common/models.py:2369 +msgid "Display part categories in search preview window" +msgstr "" + +#: common/models.py:2374 +msgid "Search Stock" +msgstr "" + +#: common/models.py:2375 +msgid "Display stock items in search preview window" +msgstr "" + +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" +msgstr "" + +#: common/models.py:2382 +msgid "Exclude stock items which are not available from the search preview window" +msgstr "" + +#: common/models.py:2388 +msgid "Search Locations" +msgstr "" + +#: common/models.py:2389 +msgid "Display stock locations in search preview window" +msgstr "" + +#: common/models.py:2394 +msgid "Search Companies" +msgstr "" + +#: common/models.py:2395 +msgid "Display companies in search preview window" +msgstr "" + +#: common/models.py:2400 +msgid "Search Build Orders" +msgstr "" + +#: common/models.py:2401 +msgid "Display build orders in search preview window" +msgstr "" + +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" +msgstr "" + +#: common/models.py:2421 +msgid "Display sales orders in search preview window" +msgstr "" + +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" +msgstr "" + +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" +msgstr "" + +#: common/models.py:2434 +msgid "Search Return Orders" +msgstr "" + +#: common/models.py:2435 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:2448 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:2456 +msgid "Regex Search" +msgstr "" + +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 +msgid "Receive error reports" +msgstr "" + +#: common/models.py:2523 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/models.py:2528 +msgid "Last used printing machines" +msgstr "" + +#: common/models.py:2529 +msgid "Save the last used printing machines for a user" +msgstr "" + +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 +#: templates/js/translated/pricing.js:621 +#: templates/js/translated/return_order.js:739 +msgid "Price" +msgstr "" + +#: common/models.py:2580 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:2684 common/models.py:2869 +msgid "Endpoint" +msgstr "" + +#: common/models.py:2685 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:2695 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:2699 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:2715 users/models.py:159 +msgid "Token" +msgstr "" + +#: common/models.py:2716 +msgid "Token for access" +msgstr "" + +#: common/models.py:2724 +msgid "Secret" +msgstr "" + +#: common/models.py:2725 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:2833 +msgid "Message ID" +msgstr "" + +#: common/models.py:2834 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:2842 +msgid "Host" +msgstr "" + +#: common/models.py:2843 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:2851 +msgid "Header" +msgstr "" + +#: common/models.py:2852 +msgid "Header of this message" +msgstr "" + +#: common/models.py:2859 +msgid "Body" +msgstr "" + +#: common/models.py:2860 +msgid "Body of this message" +msgstr "" + +#: common/models.py:2870 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:2875 +msgid "Worked on" +msgstr "" + +#: common/models.py:2876 +msgid "Was the work on this message finished?" +msgstr "" + +#: common/models.py:3002 +msgid "Id" +msgstr "" + +#: common/models.py:3004 templates/js/translated/company.js:965 +#: templates/js/translated/news.js:44 +msgid "Title" +msgstr "" + +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 +msgid "Published" +msgstr "" + +#: common/models.py:3010 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:3012 templates/js/translated/news.js:52 +msgid "Summary" +msgstr "" + +#: common/models.py:3015 +msgid "Read" +msgstr "" + +#: common/models.py:3015 +msgid "Was this news item read?" +msgstr "" + +#: common/models.py:3032 company/models.py:159 part/models.py:1066 +#: 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:3032 +msgid "Image file" +msgstr "" + +#: common/models.py:3044 common/models.py:3248 +msgid "Target model type for this image" +msgstr "" + +#: common/models.py:3048 +msgid "Target model ID for this image" +msgstr "" + +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 +msgid "Unit name must be a valid identifier" +msgstr "" + +#: common/models.py:3125 +msgid "Unit name" +msgstr "" + +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 +msgid "Symbol" +msgstr "" + +#: common/models.py:3133 +msgid "Optional unit symbol" +msgstr "" + +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 +msgid "Definition" +msgstr "" + +#: common/models.py:3140 +msgid "Unit definition" +msgstr "" + +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +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:460 +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:375 +msgid "Is Running" +msgstr "" + +#: common/serializers.py:381 +msgid "Pending Tasks" +msgstr "" + +#: common/serializers.py:387 +msgid "Scheduled Tasks" +msgstr "" + +#: common/serializers.py:393 +msgid "Failed Tasks" +msgstr "" + +#: common/serializers.py:408 +msgid "Task ID" +msgstr "" + +#: common/serializers.py:408 +msgid "Unique task ID" +msgstr "" + +#: common/serializers.py:410 +msgid "Lock" +msgstr "" + +#: common/serializers.py:410 +msgid "Lock time" +msgstr "" + +#: common/serializers.py:412 +msgid "Task name" +msgstr "" + +#: common/serializers.py:414 +msgid "Function" +msgstr "" + +#: common/serializers.py:414 +msgid "Function name" +msgstr "" + +#: common/serializers.py:416 +msgid "Arguments" +msgstr "" + +#: common/serializers.py:416 +msgid "Task arguments" +msgstr "" + +#: common/serializers.py:419 +msgid "Keyword Arguments" +msgstr "" + +#: common/serializers.py:419 +msgid "Task keyword arguments" +msgstr "" + +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 +msgid "Minimum places cannot be greater than maximum places" +msgstr "" + +#: common/validators.py:94 +msgid "Maximum places cannot be less than minimum places" +msgstr "" + +#: common/validators.py:105 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/validators.py:107 +#, python-brace-format +msgid "Invalid domain name: {domain}" +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:141 +msgid "Part is Active" +msgstr "" + +#: company/api.py:145 +msgid "Manufacturer is Active" +msgstr "" + +#: company/api.py:278 +msgid "Supplier Part is Active" +msgstr "" + +#: company/api.py:282 +msgid "Internal Part is Active" +msgstr "" + +#: company/api.py:286 +msgid "Supplier is Active" +msgstr "" + +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 +msgid "Company description" +msgstr "" + +#: company/models.py:118 +msgid "Description of the company" +msgstr "" + +#: company/models.py:123 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:123 +msgid "Company website URL" +msgstr "" + +#: company/models.py:128 +msgid "Phone number" +msgstr "" + +#: company/models.py:130 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:137 +msgid "Contact email address" +msgstr "" + +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 +msgid "Contact" +msgstr "" + +#: company/models.py:144 +msgid "Point of contact" +msgstr "" + +#: company/models.py:150 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:163 +msgid "Is this company active?" +msgstr "" + +#: company/models.py:168 +msgid "Is customer" +msgstr "" + +#: company/models.py:169 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:174 +msgid "Is supplier" +msgstr "" + +#: company/models.py:175 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" + +#: company/models.py:181 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:189 +msgid "Default currency used for this company" +msgstr "" + +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "" + +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 +msgid "Select company" +msgstr "" + +#: company/models.py:377 +msgid "Address title" +msgstr "" + +#: company/models.py:378 +msgid "Title describing the address entry" +msgstr "" + +#: company/models.py:384 +msgid "Primary address" +msgstr "" + +#: company/models.py:385 +msgid "Set as primary address" +msgstr "" + +#: company/models.py:390 templates/js/translated/company.js:914 +#: templates/js/translated/company.js:971 +msgid "Line 1" +msgstr "" + +#: company/models.py:391 +msgid "Address line 1" +msgstr "" + +#: company/models.py:397 templates/js/translated/company.js:915 +#: templates/js/translated/company.js:977 +msgid "Line 2" +msgstr "" + +#: company/models.py:398 +msgid "Address line 2" +msgstr "" + +#: company/models.py:404 company/models.py:405 +#: templates/js/translated/company.js:983 +msgid "Postal code" +msgstr "" + +#: company/models.py:411 +msgid "City/Region" +msgstr "" + +#: company/models.py:412 +msgid "Postal code city/region" +msgstr "" + +#: company/models.py:418 +msgid "State/Province" +msgstr "" + +#: company/models.py:419 +msgid "State or province" +msgstr "" + +#: company/models.py:425 templates/js/translated/company.js:1001 +msgid "Country" +msgstr "" + +#: company/models.py:426 +msgid "Address country" +msgstr "" + +#: company/models.py:432 +msgid "Courier shipping notes" +msgstr "" + +#: company/models.py:433 +msgid "Notes for shipping courier" +msgstr "" + +#: company/models.py:439 +msgid "Internal shipping notes" +msgstr "" + +#: company/models.py:440 +msgid "Shipping notes for internal use" +msgstr "" + +#: company/models.py:447 +msgid "Link to address information (external)" +msgstr "" + +#: company/models.py:470 company/models.py:587 company/models.py:811 +#: 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:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 +msgid "Parameter name" +msgstr "" + +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 +msgid "Value" +msgstr "" + +#: company/models.py:601 +msgid "Parameter value" +msgstr "" + +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 +msgid "Units" +msgstr "" + +#: company/models.py:609 +msgid "Parameter units" +msgstr "" + +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 +msgid "Pack units must be compatible with the base part units" +msgstr "" + +#: company/models.py:726 +msgid "Pack units must be greater than zero" +msgstr "" + +#: company/models.py:740 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1772 +#: templates/js/translated/pricing.js:498 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 +msgid "Supplier" +msgstr "" + +#: company/models.py:790 +msgid "Select supplier" +msgstr "" + +#: company/models.py:796 part/serializers.py:548 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:802 +msgid "Is this supplier part active?" +msgstr "" + +#: company/models.py:812 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:819 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:828 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 +msgid "Note" +msgstr "" + +#: company/models.py:844 part/models.py:2110 +msgid "base cost" +msgstr "" + +#: company/models.py:845 part/models.py:2111 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:853 +msgid "Part packaging" +msgstr "" + +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: 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:2154 +#: templates/js/translated/purchase_order.js:2171 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:860 +msgid "Total quantity supplied in a single pack. Leave empty for single items." +msgstr "" + +#: company/models.py:879 part/models.py:2117 +msgid "multiple" +msgstr "" + +#: company/models.py:880 +msgid "Order multiple" +msgstr "" + +#: company/models.py:892 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:898 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:899 +msgid "Date of last update of availability data" +msgstr "" + +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 +msgid "Default currency used for this supplier" +msgstr "" + +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 +#: 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:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 +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:162 +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:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 +#: 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:3043 +#: templates/js/translated/table_filters.js:827 +msgid "Customer" +msgstr "" + +#: company/templates/company/company_base.html:117 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/company_base.html:131 +msgid "Phone" +msgstr "" + +#: company/templates/company/company_base.html:211 +#: part/templates/part/part_base.html:536 +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:539 +#: 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:568 +msgid "Upload Image" +msgstr "" + +#: company/templates/company/company_base.html:258 +#: part/templates/part/part_base.html:622 +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:372 +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:392 +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:122 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:143 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:125 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:446 +#: order/serializers.py:559 +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:902 +#: 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:211 part/templates/part/part_sidebar.html:8 +msgid "Parameters" +msgstr "" + +#: company/templates/company/manufacturer_part.html:160 +#: part/templates/part/detail.html:216 +#: templates/InvenTree/settings/category.html:12 +#: templates/InvenTree/settings/part_parameters.html:24 +msgid "New Parameter" +msgstr "" + +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 +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/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:126 +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 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 +#: templates/js/translated/pricing.js:510 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 +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:204 +msgid "Create new stock item" +msgstr "" + +#: company/templates/company/supplier_part.html:210 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 +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:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:316 +msgid "Link Barcode to Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:388 +msgid "Update Part Availability" +msgstr "" + +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 +#: stock/templates/stock/location_sidebar.html:7 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: 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:52 +msgid "New Company" +msgstr "" + +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "" + +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:216 +msgid "Number of copies to print for each label" +msgstr "" + +#: machine/machine_types/label_printer.py:231 +msgid "Connected" +msgstr "" + +#: machine/machine_types/label_printer.py:232 order/api.py:1408 +#: templates/js/translated/sales_order.js:1078 +msgid "Unknown" +msgstr "" + +#: machine/machine_types/label_printer.py:233 +msgid "Printing" +msgstr "" + +#: machine/machine_types/label_printer.py:234 +msgid "No media" +msgstr "" + +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 +msgid "Disconnected" +msgstr "" + +#: machine/machine_types/label_printer.py:243 +msgid "Label Printer" +msgstr "" + +#: machine/machine_types/label_printer.py:244 +msgid "Directly print labels for various items." +msgstr "" + +#: machine/machine_types/label_printer.py:250 +msgid "Printer Location" +msgstr "" + +#: machine/machine_types/label_printer.py:251 +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: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:90 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 +#: templates/js/translated/order.js:352 +#: templates/js/translated/purchase_order.js:2195 +#: templates/js/translated/sales_order.js:1883 +msgid "Total Price" +msgstr "" + +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 +msgid "Order Status" +msgstr "" + +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 +msgid "Has Pricing" +msgstr "" + +#: order/api.py:228 +msgid "No matching purchase order found" +msgstr "" + +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 +#: templates/js/translated/sales_order.js:1524 +msgid "Order" +msgstr "" + +#: order/api.py:427 order/api.py:782 +msgid "Order Complete" +msgstr "" + +#: order/api.py:450 +msgid "Order Pending" +msgstr "" + +#: order/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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:120 stock/templates/stock/item_base.html:176 +#: templates/email/overdue_purchase_order.html:15 +#: templates/js/translated/part.js:1749 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:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +msgid "Purchase Order" +msgstr "" + +#: order/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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:3025 +msgid "Return Order" +msgstr "" + +#: order/models.py:91 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:96 order/serializers.py:71 +msgid "Order Currency" +msgstr "" + +#: order/models.py:99 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:1385 order/models.py:1817 +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:469 order/models.py:980 +msgid "Order reference" +msgstr "" + +#: order/models.py:478 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:493 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:505 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:514 +msgid "received by" +msgstr "" + +#: order/models.py:520 order/models.py:2173 +msgid "Issue Date" +msgstr "" + +#: order/models.py:521 order/models.py:2174 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:528 order/models.py:2181 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:572 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:807 +msgid "Quantity must be a positive number" +msgstr "" + +#: order/models.py:992 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:1016 order/models.py:2167 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:1020 order/models.py:1771 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:1029 +msgid "shipped by" +msgstr "" + +#: order/models.py:1078 +msgid "Order is already complete" +msgstr "" + +#: order/models.py:1081 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1085 +msgid "Only an open order can be marked as complete" +msgstr "" + +#: order/models.py:1089 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:1094 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:1357 +msgid "Item quantity" +msgstr "" + +#: order/models.py:1374 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1381 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1393 +msgid "Target date for this line item (leave blank to use the target date from the order)" +msgstr "" + +#: order/models.py:1414 +msgid "Line item description (optional)" +msgstr "" + +#: order/models.py:1420 +msgid "Context" +msgstr "" + +#: order/models.py:1421 +msgid "Additional context for this line" +msgstr "" + +#: order/models.py:1431 +msgid "Unit price" +msgstr "" + +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:1476 +msgid "deleted" +msgstr "" + +#: order/models.py:1504 +msgid "Supplier part" +msgstr "" + +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:616 +msgid "Received" +msgstr "" + +#: order/models.py:1512 +msgid "Number of items received" +msgstr "" + +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:183 +#: templates/js/translated/stock.js:2396 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:1521 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:1536 +msgid "Where does the Purchaser want this item to be stored?" +msgstr "" + +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 +msgid "Virtual part cannot be assigned to a sales order" +msgstr "" + +#: order/models.py:1642 +msgid "Only salable parts can be assigned to a sales order" +msgstr "" + +#: order/models.py:1668 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:1669 +msgid "Unit sale price" +msgstr "" + +#: order/models.py:1678 order/status_codes.py:48 +#: 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:1679 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:1973 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:1976 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:1979 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:1998 order/serializers.py:1340 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:2001 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:2002 plugin/base/barcodes/api.py:524 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:2010 +msgid "Line" +msgstr "" + +#: order/models.py:2019 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 +msgid "Item" +msgstr "" + +#: order/models.py:2033 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:2042 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/models.py:2136 +msgid "Return Order reference" +msgstr "" + +#: order/models.py:2148 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:2160 +msgid "Return order status" +msgstr "" + +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:2392 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:2398 +msgid "Received Date" +msgstr "" + +#: order/models.py:2399 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:2410 templates/js/translated/return_order.js:731 +#: templates/js/translated/table_filters.js:123 +msgid "Outcome" +msgstr "" + +#: order/models.py:2411 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:2418 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" + +#: order/serializers.py:86 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:326 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/serializers.py:341 order/serializers.py:1361 +msgid "Allow order to be closed with incomplete line items" +msgstr "" + +#: order/serializers.py:351 order/serializers.py:1371 +msgid "Order has incomplete line items" +msgstr "" + +#: order/serializers.py:501 +msgid "Order is not open" +msgstr "" + +#: order/serializers.py:522 +msgid "Auto Pricing" +msgstr "" + +#: order/serializers.py:524 +msgid "Automatically calculate purchase price based on supplier part data" +msgstr "" + +#: order/serializers.py:534 +msgid "Purchase price currency" +msgstr "" + +#: order/serializers.py:540 +msgid "Merge Items" +msgstr "" + +#: order/serializers.py:542 +msgid "Merge items with the same part, destination and target date into one line item" +msgstr "" + +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 +msgid "Supplier part must be specified" +msgstr "" + +#: order/serializers.py:582 +msgid "Purchase order must be specified" +msgstr "" + +#: order/serializers.py:590 +msgid "Supplier must match purchase order" +msgstr "" + +#: order/serializers.py:591 +msgid "Purchase order must match supplier" +msgstr "" + +#: order/serializers.py:634 order/serializers.py:1441 +msgid "Line Item" +msgstr "" + +#: order/serializers.py:640 +msgid "Line item does not match purchase order" +msgstr "" + +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 +msgid "Select destination location for received items" +msgstr "" + +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 +msgid "Enter batch code for incoming stock items" +msgstr "" + +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 +msgid "Enter serial numbers for incoming stock items" +msgstr "" + +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 +msgid "Barcode" +msgstr "" + +#: order/serializers.py:702 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:718 +msgid "Barcode is already in use" +msgstr "" + +#: order/serializers.py:742 +msgid "An integer quantity must be provided for trackable parts" +msgstr "" + +#: order/serializers.py:790 order/serializers.py:1793 +msgid "Line items must be provided" +msgstr "" + +#: order/serializers.py:806 +msgid "Destination location must be specified" +msgstr "" + +#: order/serializers.py:817 +msgid "Supplied barcode values must be unique" +msgstr "" + +#: order/serializers.py:1182 +msgid "Sale price currency" +msgstr "" + +#: order/serializers.py:1243 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:1304 order/serializers.py:1450 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:1323 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:1460 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:1482 order/serializers.py:1588 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:1485 order/serializers.py:1591 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:1532 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:1539 +msgid "The following serial numbers are already allocated" +msgstr "" + +#: order/serializers.py:1747 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1753 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1756 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1785 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1868 +msgid "Line price currency" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:45 order/status_codes.py:77 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:101 +msgid "Return" +msgstr "" + +#: order/status_codes.py:104 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:107 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:110 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:113 +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 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 +msgid "Complete Order" +msgstr "" + +#: order/templates/order/order_base.html:96 +msgid "Supplier part thumbnail" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Description" +msgstr "" + +#: order/templates/order/order_base.html:146 +msgid "No suppplier information available" +msgstr "" + +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 +#: report/templates/report/inventree_build_order_report.html:121 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_base.html:229 +msgid "Total cost" +msgstr "" + +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 +msgid "Total cost could not be calculated" +msgstr "" + +#: order/templates/order/order_base.html:335 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:347 +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:530 +#: templates/js/translated/build.js:1802 +#: templates/js/translated/purchase_order.js:696 +#: templates/js/translated/purchase_order.js:1288 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 +#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: 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:141 +#: order/templates/order/sales_order_base.html:158 +#: 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:198 +#: order/templates/order/sales_order_base.html:242 +#: 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:1076 +#: templates/js/translated/purchase_order.js:1822 +#: 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:273 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:285 +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:91 +#: order/templates/order/sales_order_base.html:92 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:99 +#: templates/js/translated/sales_order.js:536 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:138 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:176 +#: 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:339 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:351 +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/build.js:1063 +#: templates/js/translated/filters.js:299 +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:48 part/models.py:1031 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 +msgid "IPN" +msgstr "" + +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 +msgid "Revision" +msgstr "" + +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +msgid "Keywords" +msgstr "" + +#: part/admin.py:60 +msgid "Part Image" +msgstr "" + +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:222 +msgid "Category ID" +msgstr "" + +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 +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:999 part/templates/part/part_base.html:177 +msgid "Variant Of" +msgstr "" + +#: part/admin.py:84 part/models.py:1137 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/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 +msgid "Building" +msgstr "" + +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 +msgid "Minimum Cost" +msgstr "" + +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 +msgid "Maximum Cost" +msgstr "" + +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +msgid "Parent ID" +msgstr "" + +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +msgid "Parent Name" +msgstr "" + +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 +msgid "Category Path" +msgstr "" + +#: part/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: 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:2819 templates/js/translated/search.js:130 +#: templates/navbar.html:24 users/models.py:203 +msgid "Parts" +msgstr "" + +#: part/admin.py:378 +msgid "BOM Level" +msgstr "" + +#: part/admin.py:381 +msgid "BOM Item ID" +msgstr "" + +#: part/admin.py:391 +msgid "Parent IPN" +msgstr "" + +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" + +#: part/admin.py:418 part/serializers.py:1344 +#: templates/js/translated/pricing.js:358 +#: templates/js/translated/pricing.js:1024 +msgid "Minimum Price" +msgstr "" + +#: part/admin.py:423 part/serializers.py:1359 +#: templates/js/translated/pricing.js:353 +#: templates/js/translated/pricing.js:1032 +msgid "Maximum Price" +msgstr "" + +#: part/api.py:104 +msgid "Starred" +msgstr "" + +#: part/api.py:106 +msgid "Filter by starred categories" +msgstr "" + +#: part/api.py:123 stock/api.py:312 +msgid "Depth" +msgstr "" + +#: part/api.py:123 +msgid "Filter by category depth" +msgstr "" + +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 +msgid "Cascade" +msgstr "" + +#: part/api.py:158 +msgid "Include sub-categories in filtered results" +msgstr "" + +#: part/api.py:179 templates/js/translated/part.js:308 +msgid "Parent" +msgstr "" + +#: part/api.py:181 +msgid "Filter by parent category" +msgstr "" + +#: part/api.py:214 +msgid "Exclude Tree" +msgstr "" + +#: part/api.py:216 +msgid "Exclude sub-categories under the specified category" +msgstr "" + +#: part/api.py:441 +msgid "Has Results" +msgstr "" + +#: part/api.py:608 +msgid "Incoming Purchase Order" +msgstr "" + +#: part/api.py:626 +msgid "Outgoing Sales Order" +msgstr "" + +#: part/api.py:642 +msgid "Stock produced by Build Order" +msgstr "" + +#: part/api.py:726 +msgid "Stock required for Build Order" +msgstr "" + +#: part/api.py:874 +msgid "Validate entire Bill of Materials" +msgstr "" + +#: part/api.py:880 +msgid "This option must be selected" +msgstr "" + +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 +#: templates/InvenTree/settings/settings_staff_js.html:300 +#: templates/js/translated/notification.js:60 +#: templates/js/translated/part.js:2380 +msgid "Category" +msgstr "" + +#: part/api.py:1811 +msgid "Uses" +msgstr "" + +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 +msgid "Default Location" +msgstr "" + +#: part/bom.py:179 part/serializers.py:903 +#: 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:88 part/models.py:4040 part/templates/part/category.html:16 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:89 part/templates/part/category.html:133 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 +#: users/models.py:202 +msgid "Part Categories" +msgstr "" + +#: part/models.py:108 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 +msgid "Structural" +msgstr "" + +#: part/models.py:115 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:124 +msgid "Default keywords" +msgstr "" + +#: part/models.py:125 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 +msgid "Icon" +msgstr "" + +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:178 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:526 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:564 +msgid "Invalid choice for parent part" +msgstr "" + +#: part/models.py:612 part/models.py:619 +#, python-brace-format +msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" +msgstr "" + +#: part/models.py:631 +#, python-brace-format +msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" +msgstr "" + +#: part/models.py:694 +#, python-brace-format +msgid "IPN must match regex pattern {pattern}" +msgstr "" + +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 +msgid "Stock item with this serial number already exists" +msgstr "" + +#: part/models.py:916 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 +msgid "Part with this Name, IPN and Revision already exists." +msgstr "" + +#: part/models.py:950 +msgid "Parts cannot be assigned to structural part categories!" +msgstr "" + +#: part/models.py:982 part/models.py:4095 +msgid "Part name" +msgstr "" + +#: part/models.py:987 +msgid "Is Template" +msgstr "" + +#: part/models.py:988 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:998 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:1006 +msgid "Part description (optional)" +msgstr "" + +#: part/models.py:1014 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:1024 +msgid "Part category" +msgstr "" + +#: part/models.py:1039 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:1120 part/templates/part/part_base.html:385 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:1121 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:1128 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:1129 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:1138 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:1147 +msgid "Units of measure for this part" +msgstr "" + +#: part/models.py:1154 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:1160 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:1166 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:1172 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:1178 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:1182 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:1200 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1201 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:1209 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:1214 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:1230 +msgid "Creation User" +msgstr "" + +#: part/models.py:1240 +msgid "Owner responsible for this part" +msgstr "" + +#: part/models.py:1245 part/templates/part/part_base.html:348 +#: stock/templates/stock/item_base.html:451 +#: templates/js/translated/part.js:2487 +msgid "Last Stocktake" +msgstr "" + +#: part/models.py:2118 +msgid "Sell multiple" +msgstr "" + +#: part/models.py:3109 +msgid "Currency used to cache pricing calculations" +msgstr "" + +#: part/models.py:3125 +msgid "Minimum BOM Cost" +msgstr "" + +#: part/models.py:3126 +msgid "Minimum cost of component parts" +msgstr "" + +#: part/models.py:3132 +msgid "Maximum BOM Cost" +msgstr "" + +#: part/models.py:3133 +msgid "Maximum cost of component parts" +msgstr "" + +#: part/models.py:3139 +msgid "Minimum Purchase Cost" +msgstr "" + +#: part/models.py:3140 +msgid "Minimum historical purchase cost" +msgstr "" + +#: part/models.py:3146 +msgid "Maximum Purchase Cost" +msgstr "" + +#: part/models.py:3147 +msgid "Maximum historical purchase cost" +msgstr "" + +#: part/models.py:3153 +msgid "Minimum Internal Price" +msgstr "" + +#: part/models.py:3154 +msgid "Minimum cost based on internal price breaks" +msgstr "" + +#: part/models.py:3160 +msgid "Maximum Internal Price" +msgstr "" + +#: part/models.py:3161 +msgid "Maximum cost based on internal price breaks" +msgstr "" + +#: part/models.py:3167 +msgid "Minimum Supplier Price" +msgstr "" + +#: part/models.py:3168 +msgid "Minimum price of part from external suppliers" +msgstr "" + +#: part/models.py:3174 +msgid "Maximum Supplier Price" +msgstr "" + +#: part/models.py:3175 +msgid "Maximum price of part from external suppliers" +msgstr "" + +#: part/models.py:3181 +msgid "Minimum Variant Cost" +msgstr "" + +#: part/models.py:3182 +msgid "Calculated minimum cost of variant parts" +msgstr "" + +#: part/models.py:3188 +msgid "Maximum Variant Cost" +msgstr "" + +#: part/models.py:3189 +msgid "Calculated maximum cost of variant parts" +msgstr "" + +#: part/models.py:3196 +msgid "Override minimum cost" +msgstr "" + +#: part/models.py:3203 +msgid "Override maximum cost" +msgstr "" + +#: part/models.py:3210 +msgid "Calculated overall minimum cost" +msgstr "" + +#: part/models.py:3217 +msgid "Calculated overall maximum cost" +msgstr "" + +#: part/models.py:3223 +msgid "Minimum Sale Price" +msgstr "" + +#: part/models.py:3224 +msgid "Minimum sale price based on price breaks" +msgstr "" + +#: part/models.py:3230 +msgid "Maximum Sale Price" +msgstr "" + +#: part/models.py:3231 +msgid "Maximum sale price based on price breaks" +msgstr "" + +#: part/models.py:3237 +msgid "Minimum Sale Cost" +msgstr "" + +#: part/models.py:3238 +msgid "Minimum historical sale price" +msgstr "" + +#: part/models.py:3244 +msgid "Maximum Sale Cost" +msgstr "" + +#: part/models.py:3245 +msgid "Maximum historical sale price" +msgstr "" + +#: part/models.py:3264 +msgid "Part for stocktake" +msgstr "" + +#: part/models.py:3269 +msgid "Item Count" +msgstr "" + +#: part/models.py:3270 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:3278 +msgid "Total available stock at time of stocktake" +msgstr "" + +#: part/models.py:3282 part/models.py:3365 +#: 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:543 +#: templates/js/translated/part.js:1089 templates/js/translated/pricing.js:826 +#: templates/js/translated/pricing.js:950 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 +msgid "Date" +msgstr "" + +#: part/models.py:3283 +msgid "Date stocktake was performed" +msgstr "" + +#: part/models.py:3291 +msgid "Additional notes" +msgstr "" + +#: part/models.py:3301 +msgid "User who performed this stocktake" +msgstr "" + +#: part/models.py:3307 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3308 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3314 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3315 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 +msgid "Report" +msgstr "" + +#: part/models.py:3372 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 +msgid "Part Count" +msgstr "" + +#: part/models.py:3378 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3388 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3398 +msgid "Part Sale Price Break" +msgstr "" + +#: part/models.py:3510 +msgid "Part Test Template" +msgstr "" + +#: part/models.py:3536 +msgid "Invalid template name - must include at least one alphanumeric character" +msgstr "" + +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 +msgid "Choices" +msgstr "" + +#: part/models.py:3642 +msgid "Valid choices for this test (comma-separated)" +msgstr "" + +#: part/models.py:3674 +msgid "Part Parameter Template" +msgstr "" + +#: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 +msgid "Parameter description" +msgstr "" + +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 +msgid "Checkbox" +msgstr "" + +#: part/models.py:3780 +msgid "Is this parameter a checkbox?" +msgstr "" + +#: part/models.py:3786 +msgid "Valid choices for this parameter (comma-separated)" +msgstr "" + +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 +msgid "Invalid choice for parameter value" +msgstr "" + +#: part/models.py:3931 +msgid "Parent Part" +msgstr "" + +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 +#: templates/InvenTree/settings/settings_staff_js.html:295 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:3945 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 +msgid "Default Value" +msgstr "" + +#: part/models.py:4055 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:4093 +msgid "Part ID or part name" +msgstr "" + +#: part/models.py:4094 +msgid "Unique part ID value" +msgstr "" + +#: part/models.py:4096 +msgid "Part IPN value" +msgstr "" + +#: part/models.py:4097 +msgid "Level" +msgstr "" + +#: part/models.py:4097 +msgid "BOM level" +msgstr "" + +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 +msgid "Select parent part" +msgstr "" + +#: part/models.py:4235 +msgid "Sub part" +msgstr "" + +#: part/models.py:4236 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:4247 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:4253 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:4259 +msgid "This BOM item is consumable (it is not tracked in build orders)" +msgstr "" + +#: part/models.py:4266 part/templates/part/upload_bom.html:55 +msgid "Overage" +msgstr "" + +#: part/models.py:4267 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:4274 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:4282 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:4288 +msgid "Checksum" +msgstr "" + +#: part/models.py:4289 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:4294 templates/js/translated/table_filters.js:174 +msgid "Validated" +msgstr "" + +#: part/models.py:4295 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:4300 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:4301 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:4307 +msgid "Stock items for variant parts can be used for this BOM item" +msgstr "" + +#: part/models.py:4392 stock/models.py:685 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:4402 part/models.py:4404 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:4542 +msgid "BOM Item Substitute" +msgstr "" + +#: part/models.py:4563 +msgid "Substitute part cannot be the same as the master part" +msgstr "" + +#: part/models.py:4576 +msgid "Parent BOM item" +msgstr "" + +#: part/models.py:4584 +msgid "Substitute part" +msgstr "" + +#: part/models.py:4600 +msgid "Part 1" +msgstr "" + +#: part/models.py:4608 +msgid "Part 2" +msgstr "" + +#: part/models.py:4609 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:4628 +msgid "Part relationship cannot be created between a part and itself" +msgstr "" + +#: part/models.py:4633 +msgid "Duplicate relationship already exists" +msgstr "" + +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/templates/part/category_sidebar.html:7 +msgid "Subcategories" +msgstr "" + +#: part/serializers.py:197 +msgid "Results" +msgstr "" + +#: part/serializers.py:198 +msgid "Number of results recorded against this template" +msgstr "" + +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +msgid "Purchase currency of this stock item" +msgstr "" + +#: part/serializers.py:291 +msgid "Number of parts using this template" +msgstr "" + +#: part/serializers.py:420 +msgid "No parts selected" +msgstr "" + +#: part/serializers.py:430 +msgid "Select category" +msgstr "" + +#: part/serializers.py:465 +msgid "Original Part" +msgstr "" + +#: part/serializers.py:466 +msgid "Select original part to duplicate" +msgstr "" + +#: part/serializers.py:471 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:472 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:478 part/templates/part/detail.html:293 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:479 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:485 +msgid "Copy Parameters" +msgstr "" + +#: part/serializers.py:486 +msgid "Copy parameter data from original part" +msgstr "" + +#: part/serializers.py:492 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:493 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:511 +msgid "Initial Stock Quantity" +msgstr "" + +#: part/serializers.py:513 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "" + +#: part/serializers.py:520 +msgid "Initial Stock Location" +msgstr "" + +#: part/serializers.py:521 +msgid "Specify initial stock location for this Part" +msgstr "" + +#: part/serializers.py:538 +msgid "Select supplier (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:554 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:564 +msgid "Manufacturer part number" +msgstr "" + +#: part/serializers.py:571 +msgid "Selected company is not a valid supplier" +msgstr "" + +#: part/serializers.py:580 +msgid "Selected company is not a valid manufacturer" +msgstr "" + +#: part/serializers.py:591 +msgid "Manufacturer part matching this MPN already exists" +msgstr "" + +#: part/serializers.py:598 +msgid "Supplier part matching this SKU already exists" +msgstr "" + +#: part/serializers.py:901 +msgid "Revisions" +msgstr "" + +#: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 +msgid "Filename of an existing part image" +msgstr "" + +#: part/serializers.py:986 +msgid "Image file does not exist" +msgstr "" + +#: part/serializers.py:1192 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:1202 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:1212 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:1218 +msgid "Exclude External Stock" +msgstr "" + +#: part/serializers.py:1219 +msgid "Exclude stock items in external locations" +msgstr "" + +#: part/serializers.py:1224 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1225 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:1230 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:1231 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:1239 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:1345 +msgid "Override calculated value for minimum price" +msgstr "" + +#: part/serializers.py:1352 +msgid "Minimum price currency" +msgstr "" + +#: part/serializers.py:1360 +msgid "Override calculated value for maximum price" +msgstr "" + +#: part/serializers.py:1367 +msgid "Maximum price currency" +msgstr "" + +#: part/serializers.py:1396 +msgid "Update" +msgstr "" + +#: part/serializers.py:1397 +msgid "Update pricing for this part" +msgstr "" + +#: part/serializers.py:1420 +#, python-brace-format +msgid "Could not convert from provided currencies to {default_currency}" +msgstr "" + +#: part/serializers.py:1427 +msgid "Minimum price must not be greater than maximum price" +msgstr "" + +#: part/serializers.py:1430 +msgid "Maximum price must not be less than minimum price" +msgstr "" + +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 +msgid "Select part to copy BOM from" +msgstr "" + +#: part/serializers.py:1843 +msgid "Remove Existing Data" +msgstr "" + +#: part/serializers.py:1844 +msgid "Remove existing BOM items before copying" +msgstr "" + +#: part/serializers.py:1849 +msgid "Include Inherited" +msgstr "" + +#: part/serializers.py:1850 +msgid "Include BOM items which are inherited from templated parts" +msgstr "" + +#: part/serializers.py:1855 +msgid "Skip Invalid Rows" +msgstr "" + +#: part/serializers.py:1856 +msgid "Enable this option to skip invalid rows" +msgstr "" + +#: part/serializers.py:1861 +msgid "Copy Substitute Parts" +msgstr "" + +#: part/serializers.py:1862 +msgid "Copy substitute parts when duplicate BOM items" +msgstr "" + +#: part/serializers.py:1899 +msgid "Clear Existing BOM" +msgstr "" + +#: part/serializers.py:1900 +msgid "Delete existing BOM items before uploading" +msgstr "" + +#: part/serializers.py:1932 +msgid "No part column specified" +msgstr "" + +#: part/serializers.py:1976 +msgid "Multiple matching parts found" +msgstr "" + +#: part/serializers.py:1979 +msgid "No matching part found" +msgstr "" + +#: part/serializers.py:1982 +msgid "Part is not designated as a component" +msgstr "" + +#: part/serializers.py:1991 +msgid "Quantity not provided" +msgstr "" + +#: part/serializers.py:1999 +msgid "Invalid quantity" +msgstr "" + +#: part/serializers.py:2022 +msgid "At least one BOM item is required" +msgstr "" + +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 +msgid "Total Quantity" +msgstr "" + +#: part/stocktake.py:226 +msgid "Total Cost Min" +msgstr "" + +#: part/stocktake.py:227 +msgid "Total Cost Max" +msgstr "" + +#: part/stocktake.py:285 +msgid "Stocktake Report Available" +msgstr "" + +#: part/stocktake.py:286 +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:32 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:38 part/templates/part/category.html:42 +msgid "You are subscribed to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:46 +msgid "Subscribe to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:52 +msgid "Category Actions" +msgstr "" + +#: part/templates/part/category.html:57 +msgid "Edit category" +msgstr "" + +#: part/templates/part/category.html:58 +msgid "Edit Category" +msgstr "" + +#: part/templates/part/category.html:62 +msgid "Delete category" +msgstr "" + +#: part/templates/part/category.html:63 +msgid "Delete Category" +msgstr "" + +#: part/templates/part/category.html:99 +msgid "Top level part category" +msgstr "" + +#: part/templates/part/category.html:124 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:162 +msgid "Create new part" +msgstr "" + +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +msgid "New Part" +msgstr "" + +#: part/templates/part/category.html:189 +#: templates/InvenTree/settings/part_parameters.html:7 +#: templates/InvenTree/settings/sidebar.html:49 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/category.html:208 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:209 +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:255 templates/InvenTree/settings/part_stocktake.html:30 +#: templates/InvenTree/settings/sidebar.html:53 +#: templates/js/translated/stock.js:2301 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:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +msgid "Sales Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:172 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/detail.html:187 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/detail.html:191 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/detail.html:192 +msgid "New Variant" +msgstr "" + +#: part/templates/part/detail.html:215 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +msgid "Add Related" +msgstr "" + +#: part/templates/part/detail.html:271 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:276 +msgid "Export actions" +msgstr "" + +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +msgid "Export BOM" +msgstr "" + +#: part/templates/part/detail.html:282 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/detail.html:288 +msgid "BOM actions" +msgstr "" + +#: part/templates/part/detail.html:292 +msgid "Upload BOM" +msgstr "" + +#: part/templates/part/detail.html:294 +msgid "Validate BOM" +msgstr "" + +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 +msgid "Add BOM Item" +msgstr "" + +#: part/templates/part/detail.html:313 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/detail.html:329 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +msgid "Build Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:368 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/detail.html:388 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/detail.html:672 +msgid "Related Part" +msgstr "" + +#: part/templates/part/detail.html:680 +msgid "Add Related Part" +msgstr "" + +#: part/templates/part/detail.html:765 +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:154 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:155 +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:71 templates/js/translated/label.js:136 +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:80 +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:2296 +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:690 +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:300 +msgid "Minimum stock level" +msgstr "" + +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 +#: templates/js/translated/pricing.js:391 +#: templates/js/translated/pricing.js:1054 +msgid "Price Range" +msgstr "" + +#: part/templates/part/part_base.html:361 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/part_base.html:365 +#: stock/templates/stock/item_base.html:322 +msgid "Search for serial number" +msgstr "" + +#: part/templates/part/part_base.html:453 +msgid "Part QR Code" +msgstr "" + +#: part/templates/part/part_base.html:470 +msgid "Link Barcode to Part" +msgstr "" + +#: part/templates/part/part_base.html:520 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_base.html:537 +msgid "Remove associated image from this part" +msgstr "" + +#: part/templates/part/part_base.html:588 +msgid "No matching images found" +msgstr "" + +#: part/templates/part/part_base.html:684 +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:21 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:51 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 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:103 +#: 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:251 +#: stock/templates/stock/item_base.html:446 +#: templates/js/translated/company.js:1703 +#: templates/js/translated/company.js:1713 +#: templates/js/translated/stock.js:2331 +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:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 +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:172 +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:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 +msgid "No match found for barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:129 +msgid "Match found for barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 +msgid "Barcode matches existing item" +msgstr "" + +#: plugin/base/barcodes/api.py:336 +msgid "No matching part data found" +msgstr "" + +#: plugin/base/barcodes/api.py:353 +msgid "No matching supplier parts found" +msgstr "" + +#: plugin/base/barcodes/api.py:357 +msgid "Multiple matching supplier parts found" +msgstr "" + +#: plugin/base/barcodes/api.py:381 +msgid "Matched supplier part" +msgstr "" + +#: plugin/base/barcodes/api.py:430 +msgid "Item has already been received" +msgstr "" + +#: plugin/base/barcodes/api.py:467 +msgid "No match for supplier barcode" +msgstr "" + +#: plugin/base/barcodes/api.py:510 +msgid "Multiple matching line items found" +msgstr "" + +#: plugin/base/barcodes/api.py:513 +msgid "No matching line item found" +msgstr "" + +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +msgid "Barcode does not match an existing stock item" +msgstr "" + +#: plugin/base/barcodes/api.py:569 +msgid "Stock item does not match line item" +msgstr "" + +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 +#: templates/js/translated/sales_order.js:1953 +msgid "Insufficient stock available" +msgstr "" + +#: plugin/base/barcodes/api.py:602 +msgid "Stock item allocated to sales order" +msgstr "" + +#: plugin/base/barcodes/api.py:606 +msgid "Not enough information" +msgstr "" + +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +msgid "Found multiple matching supplier parts for barcode" +msgstr "" + +#: plugin/base/barcodes/mixins.py:222 +#, python-brace-format +msgid "Found multiple purchase orders matching '{order}'" +msgstr "" + +#: plugin/base/barcodes/mixins.py:226 +#, python-brace-format +msgid "No matching purchase order for '{order}'" +msgstr "" + +#: plugin/base/barcodes/mixins.py:231 +msgid "Purchase order does not match supplier" +msgstr "" + +#: plugin/base/barcodes/mixins.py:465 +msgid "Failed to find pending line item for supplier part" +msgstr "" + +#: plugin/base/barcodes/mixins.py:496 +msgid "Further information required to receive line item" +msgstr "" + +#: plugin/base/barcodes/mixins.py:504 +msgid "Received purchase order line item" +msgstr "" + +#: plugin/base/barcodes/serializers.py:21 +msgid "Scanned barcode data" +msgstr "" + +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 +msgid "Purchase Order to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 +msgid "Purchase order has not been placed" +msgstr "" + +#: plugin/base/barcodes/serializers.py:143 +msgid "Location to receive items into" +msgstr "" + +#: plugin/base/barcodes/serializers.py:149 +msgid "Cannot select a structural location" +msgstr "" + +#: plugin/base/barcodes/serializers.py:163 +msgid "Sales Order to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:169 +msgid "Sales order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:177 +msgid "Sales order line item to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:184 +msgid "Sales order shipment to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:190 +msgid "Shipment has already been delivered" +msgstr "" + +#: plugin/base/barcodes/serializers.py:195 +msgid "Quantity to allocate" +msgstr "" + +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +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:27 +msgid "InvenTree Barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:28 +msgid "Provides native support for barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: 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:64 +#: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +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 +#: plugin/builtin/labels/label_sheet.py:70 +msgid "Debug mode" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 +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:149 +msgid "last used" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:166 +msgid "Options" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:30 +msgid "Page size for the label sheet" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:35 +msgid "Skip Labels" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:36 +msgid "Skip this number of labels when printing label sheets" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:42 +msgid "Border" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:43 +msgid "Print a border around each label" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 +msgid "Landscape" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:49 +msgid "Print the label sheet in landscape mode" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:61 +msgid "InvenTree Label Sheet Printer" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:62 +msgid "Arrays multiple labels onto a single sheet" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:107 +msgid "Label is too large for page size" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:141 +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:36 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:37 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:43 users/models.py:100 +msgid "Key" +msgstr "" + +#: plugin/models.py:44 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:52 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:59 plugin/serializers.py:90 +msgid "Package Name" +msgstr "" + +#: plugin/models.py:61 +msgid "Name of the installed package, if the plugin was installed via PIP" +msgstr "" + +#: plugin/models.py:66 +msgid "Is the plugin active" +msgstr "" + +#: plugin/models.py:157 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:518 +msgid "Installed" +msgstr "" + +#: plugin/models.py:166 +msgid "Sample plugin" +msgstr "" + +#: plugin/models.py:174 +msgid "Builtin Plugin" +msgstr "" + +#: plugin/models.py:182 +msgid "Package Plugin" +msgstr "" + +#: plugin/models.py:220 report/models.py:475 +#: templates/InvenTree/settings/plugin_settings.html:9 +#: templates/js/translated/plugin.js:51 +msgid "Plugin" +msgstr "" + +#: plugin/models.py:267 +msgid "Method" +msgstr "" + +#: plugin/plugin.py:270 +msgid "No author found" +msgstr "" + +#: plugin/registry.py:534 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" +msgstr "" + +#: plugin/registry.py:537 +#, python-brace-format +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:539 +#, 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:226 +msgid "Delete configuration" +msgstr "" + +#: plugin/serializers.py:227 +msgid "Delete the plugin configuration from the database" +msgstr "" + +#: report/api.py:88 +msgid "No valid objects provided to template" +msgstr "" + +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 +#: 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:180 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:182 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:184 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:233 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:248 report/api.py:329 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:283 +msgid "Error printing label" +msgstr "" + +#: report/api.py:375 report/api.py:411 +#, python-brace-format +msgid "Template file '{template}' is missing or does not exist" +msgstr "" + +#: report/helpers.py:43 +msgid "A4" +msgstr "" + +#: report/helpers.py:44 +msgid "A3" +msgstr "" + +#: report/helpers.py:45 +msgid "Legal" +msgstr "" + +#: report/helpers.py:46 +msgid "Letter" +msgstr "" + +#: report/models.py:119 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:151 +msgid "Template name" +msgstr "" + +#: report/models.py:157 +msgid "Template description" +msgstr "" + +#: report/models.py:163 +msgid "Revision number (auto-increments)" +msgstr "" + +#: report/models.py:203 +msgid "Filename Pattern" +msgstr "" + +#: report/models.py:204 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:209 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:215 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:235 +msgid "Filters" +msgstr "" + +#: report/models.py:236 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:295 report/models.py:362 +msgid "Template file" +msgstr "" + +#: report/models.py:303 +msgid "Page size for PDF reports" +msgstr "" + +#: report/models.py:309 +msgid "Render report in landscape orientation" +msgstr "" + +#: report/models.py:368 +msgid "Width [mm]" +msgstr "" + +#: report/models.py:369 +msgid "Label width, specified in mm" +msgstr "" + +#: report/models.py:375 +msgid "Height [mm]" +msgstr "" + +#: report/models.py:376 +msgid "Label height, specified in mm" +msgstr "" + +#: report/models.py:439 +msgid "Number of items to process" +msgstr "" + +#: report/models.py:445 +msgid "Report generation is complete" +msgstr "" + +#: report/models.py:449 templates/js/translated/build.js:2349 +msgid "Progress" +msgstr "" + +#: report/models.py:449 +msgid "Report generation progress" +msgstr "" + +#: report/models.py:457 +msgid "Report Template" +msgstr "" + +#: report/models.py:464 report/models.py:487 +msgid "Output File" +msgstr "" + +#: report/models.py:465 report/models.py:488 +msgid "Generated output file" +msgstr "" + +#: report/models.py:476 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:480 +msgid "Label Template" +msgstr "" + +#: report/models.py:503 +msgid "Snippet" +msgstr "" + +#: report/models.py:504 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:511 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:529 +msgid "Asset" +msgstr "" + +#: report/models.py:530 +msgid "Report asset file" +msgstr "" + +#: report/models.py:537 +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:341 templates/js/translated/pricing.js:527 +#: templates/js/translated/pricing.js:596 +#: templates/js/translated/pricing.js:834 +#: templates/js/translated/purchase_order.js:2185 +#: 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:2087 +#: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 +msgid "Total" +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:1580 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report.html:129 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report.html:131 +msgid "Fail" +msgstr "" + +#: report/templates/report/inventree_test_report.html:138 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report.html:140 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +msgid "Installed Items" +msgstr "" + +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 +msgid "Serial" +msgstr "" + +#: report/templatetags/report.py:98 +msgid "Asset file does not exist" +msgstr "" + +#: report/templatetags/report.py:154 report/templatetags/report.py:233 +msgid "Image file not found" +msgstr "" + +#: report/templatetags/report.py:258 +msgid "part_image tag requires a Part instance" +msgstr "" + +#: report/templatetags/report.py:299 +msgid "company_image tag requires a Company instance" +msgstr "" + +#: stock/admin.py:51 stock/admin.py:171 +msgid "Location ID" +msgstr "" + +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 +msgid "Location Path" +msgstr "" + +#: stock/admin.py:148 +msgid "Stock Item ID" +msgstr "" + +#: stock/admin.py:167 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:179 +msgid "Supplier Part ID" +msgstr "" + +#: stock/admin.py:184 +msgid "Supplier Part SKU" +msgstr "" + +#: stock/admin.py:189 +msgid "Supplier ID" +msgstr "" + +#: stock/admin.py:195 +msgid "Supplier Name" +msgstr "" + +#: stock/admin.py:200 +msgid "Customer ID" +msgstr "" + +#: stock/admin.py:205 stock/models.py:825 +#: stock/templates/stock/item_base.html:354 +msgid "Installed In" +msgstr "" + +#: stock/admin.py:210 +msgid "Build ID" +msgstr "" + +#: stock/admin.py:220 +msgid "Sales Order ID" +msgstr "" + +#: stock/admin.py:225 +msgid "Purchase Order ID" +msgstr "" + +#: stock/admin.py:240 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:245 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:260 stock/models.py:919 +#: stock/templates/stock/item_base.html:433 +#: templates/js/translated/stock.js:2315 users/models.py:124 +msgid "Expiry Date" +msgstr "" + +#: stock/api.py:312 +msgid "Filter by location depth" +msgstr "" + +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 +msgid "Include sub-locations in filtered results" +msgstr "" + +#: stock/api.py:369 stock/serializers.py:1186 +msgid "Parent Location" +msgstr "" + +#: stock/api.py:370 +msgid "Filter by parent location" +msgstr "" + +#: stock/api.py:617 templates/js/translated/table_filters.js:427 +msgid "External Location" +msgstr "" + +#: stock/api.py:805 +msgid "Part Tree" +msgstr "" + +#: stock/api.py:835 +msgid "Expiry date before" +msgstr "" + +#: stock/api.py:839 +msgid "Expiry date after" +msgstr "" + +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 +msgid "Stale" +msgstr "" + +#: stock/api.py:929 +msgid "Quantity is required" +msgstr "" + +#: stock/api.py:935 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/api.py:966 +msgid "The given supplier part does not exist" +msgstr "" + +#: stock/api.py:976 +msgid "The supplier part has a pack size defined, but flag use_pack_size not set" +msgstr "" + +#: stock/api.py:1007 +msgid "Serial numbers cannot be supplied for a non-trackable part" +msgstr "" + +#: stock/models.py:64 +msgid "Stock Location type" +msgstr "" + +#: stock/models.py:65 +msgid "Stock Location types" +msgstr "" + +#: stock/models.py:91 +msgid "Default icon for all locations that have no icon set (optional)" +msgstr "" + +#: stock/models.py:131 stock/models.py:807 +#: stock/templates/stock/location.html:17 +#: stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:132 stock/templates/stock/location.html:183 +#: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 +#: users/models.py:205 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:180 stock/models.py:968 +#: stock/templates/stock/item_base.html:247 +msgid "Owner" +msgstr "" + +#: stock/models.py:181 stock/models.py:969 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:189 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:196 templates/js/translated/stock.js:2865 +#: templates/js/translated/table_filters.js:243 +msgid "External" +msgstr "" + +#: stock/models.py:197 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:203 templates/js/translated/stock.js:2874 +#: templates/js/translated/table_filters.js:246 +msgid "Location type" +msgstr "" + +#: stock/models.py:207 +msgid "Stock location type of this location" +msgstr "" + +#: stock/models.py:279 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:664 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:691 stock/serializers.py:480 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:708 +#, python-brace-format +msgid "Part type ('{self.supplier_part.part}') must be {self.part}" +msgstr "" + +#: stock/models.py:718 stock/models.py:731 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:721 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:743 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:748 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:761 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:777 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:789 +msgid "Base part" +msgstr "" + +#: stock/models.py:799 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:811 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:819 stock/serializers.py:1580 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:830 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:849 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:863 stock/serializers.py:1563 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:868 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:878 +msgid "Source Build" +msgstr "" + +#: stock/models.py:881 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:888 stock/templates/stock/item_base.html:363 +msgid "Consumed By" +msgstr "" + +#: stock/models.py:891 +msgid "Build order which consumed this stock item" +msgstr "" + +#: stock/models.py:900 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:904 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:910 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:921 +msgid "Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:939 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:940 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:960 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:991 +msgid "Converted to part" +msgstr "" + +#: stock/models.py:1511 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:1517 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:1525 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({self.quantity})" +msgstr "" + +#: stock/models.py:1531 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:1536 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:1544 stock/serializers.py:726 +msgid "Serial numbers already exist" +msgstr "" + +#: stock/models.py:1641 +msgid "Test template does not exist" +msgstr "" + +#: stock/models.py:1659 +msgid "Stock item has been assigned to a sales order" +msgstr "" + +#: stock/models.py:1663 +msgid "Stock item is installed in another item" +msgstr "" + +#: stock/models.py:1666 +msgid "Stock item contains other items" +msgstr "" + +#: stock/models.py:1669 +msgid "Stock item has been assigned to a customer" +msgstr "" + +#: stock/models.py:1672 +msgid "Stock item is currently in production" +msgstr "" + +#: stock/models.py:1675 +msgid "Serialized stock cannot be merged" +msgstr "" + +#: stock/models.py:1682 stock/serializers.py:1469 +msgid "Duplicate stock items" +msgstr "" + +#: stock/models.py:1686 +msgid "Stock items must refer to the same part" +msgstr "" + +#: stock/models.py:1694 +msgid "Stock items must refer to the same supplier part" +msgstr "" + +#: stock/models.py:1699 +msgid "Stock status codes must match" +msgstr "" + +#: stock/models.py:1960 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:2414 +msgid "Stock Item Test Result" +msgstr "" + +#: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 +msgid "Test notes" +msgstr "" + +#: stock/models.py:2569 templates/js/translated/stock.js:1633 +msgid "Test station" +msgstr "" + +#: stock/models.py:2570 +msgid "The identifier of the test station where the test was performed" +msgstr "" + +#: stock/models.py:2576 +msgid "Started" +msgstr "" + +#: stock/models.py:2577 +msgid "The timestamp of the test start" +msgstr "" + +#: stock/models.py:2583 +msgid "Finished" +msgstr "" + +#: stock/models.py:2584 +msgid "The timestamp of the test finish" +msgstr "" + +#: stock/serializers.py:76 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:85 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:94 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:103 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:112 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:121 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:128 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:151 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:160 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:168 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:233 +msgid "Test template for this result" +msgstr "" + +#: stock/serializers.py:254 +msgid "Template ID or test name must be provided" +msgstr "" + +#: stock/serializers.py:286 +msgid "The test finished time cannot be earlier than the test started time" +msgstr "" + +#: stock/serializers.py:323 +msgid "Serial number is too large" +msgstr "" + +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 +msgid "Use pack size when adding: the quantity defined is the number of packs" +msgstr "" + +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 +msgid "Purchase price of this stock item, per unit or pack" +msgstr "" + +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 +msgid "Enter number of stock items to serialize" +msgstr "" + +#: stock/serializers.py:674 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({q})" +msgstr "" + +#: stock/serializers.py:681 +msgid "Enter serial numbers for new items" +msgstr "" + +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +msgid "Destination stock location" +msgstr "" + +#: stock/serializers.py:699 +msgid "Optional note field" +msgstr "" + +#: stock/serializers.py:709 +msgid "Serial numbers cannot be assigned to this part" +msgstr "" + +#: stock/serializers.py:764 +msgid "Select stock item to install" +msgstr "" + +#: stock/serializers.py:771 +msgid "Quantity to Install" +msgstr "" + +#: stock/serializers.py:772 +msgid "Enter the quantity of items to install" +msgstr "" + +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/serializers.py:785 +msgid "Quantity to install must be at least 1" +msgstr "" + +#: stock/serializers.py:793 +msgid "Stock item is unavailable" +msgstr "" + +#: stock/serializers.py:804 +msgid "Selected part is not in the Bill of Materials" +msgstr "" + +#: stock/serializers.py:817 +msgid "Quantity to install must not exceed available quantity" +msgstr "" + +#: stock/serializers.py:852 +msgid "Destination location for uninstalled item" +msgstr "" + +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 +msgid "Select part to convert stock item into" +msgstr "" + +#: stock/serializers.py:930 +msgid "Selected part is not a valid option for conversion" +msgstr "" + +#: stock/serializers.py:947 +msgid "Cannot convert stock item with assigned SupplierPart" +msgstr "" + +#: stock/serializers.py:978 +msgid "Destination location for returned item" +msgstr "" + +#: stock/serializers.py:1015 +msgid "Select stock items to change status" +msgstr "" + +#: stock/serializers.py:1021 +msgid "No stock items selected" +msgstr "" + +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 +#: stock/templates/stock/location_sidebar.html:5 +msgid "Sublocations" +msgstr "" + +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:1302 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:1306 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:1330 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:1336 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:1344 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:1354 stock/serializers.py:1608 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:1433 +msgid "Stock merging notes" +msgstr "" + +#: stock/serializers.py:1438 +msgid "Allow mismatched suppliers" +msgstr "" + +#: stock/serializers.py:1439 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" + +#: stock/serializers.py:1444 +msgid "Allow mismatched status" +msgstr "" + +#: stock/serializers.py:1445 +msgid "Allow stock items with different status codes to be merged" +msgstr "" + +#: stock/serializers.py:1455 +msgid "At least two stock items must be provided" +msgstr "" + +#: stock/serializers.py:1522 +msgid "No Change" +msgstr "" + +#: stock/serializers.py:1551 +msgid "StockItem primary key value" +msgstr "" + +#: stock/serializers.py:1570 +msgid "Stock item status code" +msgstr "" + +#: stock/serializers.py:1598 +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:550 +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:1943 +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:1849 +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:276 +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:3354 +msgid "Install Stock Item" +msgstr "" + +#: stock/templates/stock/item.html:264 +msgid "Delete all test results for this stock item" +msgstr "" + +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +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:67 +#: templates/js/translated/filters.js:434 +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:87 templates/js/translated/stock.js:1909 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:81 +#: templates/js/translated/stock.js:1891 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:82 +#: templates/js/translated/stock.js:1900 +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:93 templates/js/translated/stock.js:1918 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:91 +#: templates/js/translated/stock.js:1972 +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:2295 templates/navbar.html:38 +msgid "Build" +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:146 +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:398 +#: templates/js/translated/build.js:2552 +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: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:2037 +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:656 +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:35 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:42 +msgid "Locate stock location" +msgstr "" + +#: stock/templates/stock/location.html:60 +msgid "Scan stock items into this location" +msgstr "" + +#: stock/templates/stock/location.html:60 +msgid "Scan In Stock Items" +msgstr "" + +#: stock/templates/stock/location.html:61 +msgid "Scan stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:61 +msgid "Scan In Container" +msgstr "" + +#: stock/templates/stock/location.html:72 +msgid "Print Location Report" +msgstr "" + +#: stock/templates/stock/location.html:101 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:103 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:105 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:135 +msgid "Top level stock location" +msgstr "" + +#: stock/templates/stock/location.html:141 +msgid "Location Owner" +msgstr "" + +#: stock/templates/stock/location.html:145 +msgid "You are not in the list of owners of this location. This stock location cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:173 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:223 +msgid "Create new stock location" +msgstr "" + +#: stock/templates/stock/location.html:224 +msgid "New Location" +msgstr "" + +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 +msgid "stock location" +msgstr "" + +#: stock/templates/stock/location.html:320 +msgid "Scanned stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:393 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:404 +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 "" + +#: 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:44 +msgid "Part Import" +msgstr "" + +#: templates/InvenTree/settings/part.html:48 +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:510 +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:514 +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:35 +msgid "Exchange Rates" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:39 +msgid "Update Now" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:47 +#: templates/InvenTree/settings/pricing.html:51 +msgid "Last Update" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:51 +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:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 +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:2400 +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:1649 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:309 +#: templates/js/translated/part.js:1650 +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:352 +msgid "Delete Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:387 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:416 +msgid "Create Part Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:439 +msgid "No stock location types found" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:464 +msgid "Location count" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 +msgid "Edit Location Type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:470 +msgid "Delete Location type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:493 +msgid "Delete Location Type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:503 +#: 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:2200 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: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:592 +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:775 +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:45 +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:20 +msgid "Secret: " +msgstr "" + +#: templates/allauth_2fa/setup.html:24 +msgid "Step 2" +msgstr "" + +#: templates/allauth_2fa/setup.html:28 +msgid "Input a token generated by the app:" +msgstr "" + +#: templates/allauth_2fa/setup.html:38 +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:2747 +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:3234 +msgid "Minimum Quantity" +msgstr "" + +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +msgid "No Response" +msgstr "" + +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +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:1145 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +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:1160 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +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:260 +msgid "Attachment actions" +msgstr "" + +#: templates/js/translated/attachment.js:294 +msgid "No attachments found" +msgstr "" + +#: templates/js/translated/attachment.js:334 +msgid "Edit Attachment" +msgstr "" + +#: templates/js/translated/attachment.js:365 +msgid "Upload Date" +msgstr "" + +#: templates/js/translated/attachment.js:385 +msgid "Edit attachment" +msgstr "" + +#: templates/js/translated/attachment.js:393 +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:1125 +msgid "Invalid server response" +msgstr "" + +#: templates/js/translated/barcode.js:403 +msgid "Scan barcode data" +msgstr "" + +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +msgid "Scan Barcode" +msgstr "" + +#: templates/js/translated/barcode.js:489 +msgid "No URL in response" +msgstr "" + +#: templates/js/translated/barcode.js:529 +msgid "This will remove the link to the associated barcode" +msgstr "" + +#: templates/js/translated/barcode.js:535 +msgid "Unlink" +msgstr "" + +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +msgid "Remove stock item" +msgstr "" + +#: templates/js/translated/barcode.js:641 +msgid "Scan Stock Items Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:643 +msgid "Scan stock item barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 +msgid "Check In" +msgstr "" + +#: templates/js/translated/barcode.js:678 +msgid "No barcode provided" +msgstr "" + +#: templates/js/translated/barcode.js:718 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/translated/barcode.js:722 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/translated/barcode.js:729 +msgid "Added stock item" +msgstr "" + +#: templates/js/translated/barcode.js:738 +msgid "Barcode does not match valid stock item" +msgstr "" + +#: templates/js/translated/barcode.js:757 +msgid "Scan Stock Container Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:759 +msgid "Scan stock container barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:793 +msgid "Barcode does not match valid stock location" +msgstr "" + +#: templates/js/translated/barcode.js:837 +msgid "Check Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 +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:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: 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:2673 +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:2812 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 +#: templates/js/translated/sales_order.js:1946 +msgid "No Stock Available" +msgstr "" + +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +msgid "Includes variant and substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 +#: templates/js/translated/sales_order.js:1943 +msgid "Includes variant stock" +msgstr "" + +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +msgid "Includes substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +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:2658 +msgid "Required Part" +msgstr "" + +#: templates/js/translated/bom.js:1683 +msgid "Inherited from parent BOM" +msgstr "" + +#: templates/js/translated/build.js:143 +msgid "Edit Build Order" +msgstr "" + +#: templates/js/translated/build.js:191 +msgid "Create Build Order" +msgstr "" + +#: templates/js/translated/build.js:223 +msgid "Cancel Build Order" +msgstr "" + +#: templates/js/translated/build.js:232 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: templates/js/translated/build.js:238 +msgid "Stock items have been allocated to this build order" +msgstr "" + +#: templates/js/translated/build.js:245 +msgid "There are incomplete outputs remaining for this build order" +msgstr "" + +#: templates/js/translated/build.js:297 +msgid "Build order is ready to be completed" +msgstr "" + +#: templates/js/translated/build.js:305 +msgid "This build order cannot be completed as there are incomplete outputs" +msgstr "" + +#: templates/js/translated/build.js:310 +msgid "Build Order is incomplete" +msgstr "" + +#: templates/js/translated/build.js:328 +msgid "Complete Build Order" +msgstr "" + +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 +msgid "Next available serial number" +msgstr "" + +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 +msgid "Latest serial number" +msgstr "" + +#: templates/js/translated/build.js:380 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: templates/js/translated/build.js:381 +msgid "Build outputs must be generated individually" +msgstr "" + +#: templates/js/translated/build.js:389 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: templates/js/translated/build.js:390 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: templates/js/translated/build.js:397 +msgid "Create Build Output" +msgstr "" + +#: templates/js/translated/build.js:428 +msgid "Allocate stock items to this build output" +msgstr "" + +#: templates/js/translated/build.js:436 +msgid "Deallocate stock from build output" +msgstr "" + +#: templates/js/translated/build.js:445 +msgid "Complete build output" +msgstr "" + +#: templates/js/translated/build.js:453 +msgid "Scrap build output" +msgstr "" + +#: templates/js/translated/build.js:460 +msgid "Delete build output" +msgstr "" + +#: templates/js/translated/build.js:480 +msgid "Are you sure you wish to deallocate the selected stock items from this build?" +msgstr "" + +#: templates/js/translated/build.js:498 +msgid "Deallocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 +msgid "Select Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 +msgid "At least one build output must be selected" +msgstr "" + +#: templates/js/translated/build.js:599 +msgid "Selected build outputs will be marked as complete" +msgstr "" + +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 +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:761 +msgid "Scrap Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:851 +msgid "Selected build outputs will be deleted" +msgstr "" + +#: templates/js/translated/build.js:853 +msgid "Build output data will be permanently deleted" +msgstr "" + +#: templates/js/translated/build.js:854 +msgid "Allocated stock items will be returned to stock" +msgstr "" + +#: templates/js/translated/build.js:872 +msgid "Delete Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:959 +msgid "Delete allocations" +msgstr "" + +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" +msgstr "" + +#: templates/js/translated/build.js:989 +msgid "No allocated stock" +msgstr "" + +#: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 +msgid "Scrap outputs" +msgstr "" + +#: templates/js/translated/build.js:1236 +msgid "Delete outputs" +msgstr "" + +#: templates/js/translated/build.js:1289 +msgid "build output" +msgstr "" + +#: templates/js/translated/build.js:1290 +msgid "build outputs" +msgstr "" + +#: templates/js/translated/build.js:1294 +msgid "Build output actions" +msgstr "" + +#: templates/js/translated/build.js:1470 +msgid "No active build outputs found" +msgstr "" + +#: templates/js/translated/build.js:1563 +msgid "Allocated Lines" +msgstr "" + +#: templates/js/translated/build.js:1577 +msgid "Required Tests" +msgstr "" + +#: templates/js/translated/build.js:1749 +#: templates/js/translated/purchase_order.js:611 +#: templates/js/translated/sales_order.js:1207 +msgid "Select Parts" +msgstr "" + +#: templates/js/translated/build.js:1750 +#: templates/js/translated/sales_order.js:1208 +msgid "You must select at least one part to allocate" +msgstr "" + +#: templates/js/translated/build.js:1813 +#: templates/js/translated/sales_order.js:1157 +msgid "Specify stock allocation quantity" +msgstr "" + +#: templates/js/translated/build.js:1890 +msgid "All Parts Allocated" +msgstr "" + +#: templates/js/translated/build.js:1891 +msgid "All selected parts have been fully allocated" +msgstr "" + +#: templates/js/translated/build.js:1905 +#: templates/js/translated/sales_order.js:1222 +msgid "Select source location (leave blank to take from all locations)" +msgstr "" + +#: templates/js/translated/build.js:1933 +msgid "Allocate Stock Items to Build Order" +msgstr "" + +#: templates/js/translated/build.js:1944 +#: templates/js/translated/sales_order.js:1319 +msgid "No matching stock locations" +msgstr "" + +#: templates/js/translated/build.js:2017 +#: templates/js/translated/sales_order.js:1398 +msgid "No matching stock items" +msgstr "" + +#: templates/js/translated/build.js:2114 +msgid "Automatic Stock Allocation" +msgstr "" + +#: templates/js/translated/build.js:2115 +msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" +msgstr "" + +#: templates/js/translated/build.js:2117 +msgid "If a location is specified, stock will only be allocated from that location" +msgstr "" + +#: templates/js/translated/build.js:2118 +msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" +msgstr "" + +#: templates/js/translated/build.js:2119 +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:2149 +msgid "Allocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:2254 +msgid "No builds matching query" +msgstr "" + +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +msgid "Select" +msgstr "" + +#: templates/js/translated/build.js:2303 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +msgid "No user information" +msgstr "" + +#: templates/js/translated/build.js:2561 +#: templates/js/translated/sales_order.js:1682 +msgid "Edit stock allocation" +msgstr "" + +#: templates/js/translated/build.js:2562 +#: templates/js/translated/sales_order.js:1683 +msgid "Delete stock allocation" +msgstr "" + +#: templates/js/translated/build.js:2577 +msgid "Edit Allocation" +msgstr "" + +#: templates/js/translated/build.js:2589 +msgid "Remove Allocation" +msgstr "" + +#: templates/js/translated/build.js:2628 +msgid "build line" +msgstr "" + +#: templates/js/translated/build.js:2629 +msgid "build lines" +msgstr "" + +#: templates/js/translated/build.js:2647 +msgid "No build lines found" +msgstr "" + +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 +msgid "Trackable part" +msgstr "" + +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 +msgid "Unit Quantity" +msgstr "" + +#: templates/js/translated/build.js:2782 +#: templates/js/translated/sales_order.js:1951 +msgid "Sufficient stock available" +msgstr "" + +#: templates/js/translated/build.js:2837 +msgid "Consumable Item" +msgstr "" + +#: templates/js/translated/build.js:2844 +msgid "Tracked item" +msgstr "" + +#: templates/js/translated/build.js:2845 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2853 +#: templates/js/translated/sales_order.js:2052 +msgid "Build stock" +msgstr "" + +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +msgid "Order stock" +msgstr "" + +#: templates/js/translated/build.js:2862 +#: templates/js/translated/sales_order.js:2046 +msgid "Allocate stock" +msgstr "" + +#: templates/js/translated/build.js:2866 +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:2247 +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:1214 +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:1218 +msgid "Assembled part" +msgstr "" + +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 +msgid "No parameters found" +msgstr "" + +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 +msgid "Edit parameter" +msgstr "" + +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 +msgid "Delete parameter" +msgstr "" + +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 +msgid "Edit Parameter" +msgstr "" + +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 +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:189 +#: templates/js/translated/filters.js:670 +msgid "true" +msgstr "" + +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 +msgid "false" +msgstr "" + +#: templates/js/translated/filters.js:217 +msgid "Select filter" +msgstr "" + +#: templates/js/translated/filters.js:440 +msgid "Print Labels" +msgstr "" + +#: templates/js/translated/filters.js:444 +msgid "Print Reports" +msgstr "" + +#: templates/js/translated/filters.js:456 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:463 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:472 +msgid "Add new filter" +msgstr "" + +#: templates/js/translated/filters.js:480 +msgid "Clear all filters" +msgstr "" + +#: templates/js/translated/filters.js:580 +msgid "Create filter" +msgstr "" + +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +msgid "Action Prohibited" +msgstr "" + +#: templates/js/translated/forms.js:381 +msgid "Create operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:396 +msgid "Update operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:410 +msgid "Delete operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:424 +msgid "View operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:801 +msgid "Keep this form open" +msgstr "" + +#: templates/js/translated/forms.js:904 +msgid "Enter a valid number" +msgstr "" + +#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/modals.html:43 +msgid "Form errors exist" +msgstr "" + +#: templates/js/translated/forms.js:2008 +msgid "No results found" +msgstr "" + +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +msgid "Searching" +msgstr "" + +#: templates/js/translated/forms.js:2532 +msgid "Clear input" +msgstr "" + +#: templates/js/translated/forms.js:3134 +msgid "File Column" +msgstr "" + +#: templates/js/translated/forms.js:3134 +msgid "Field Name" +msgstr "" + +#: templates/js/translated/forms.js:3146 +msgid "Select Columns" +msgstr "" + +#: templates/js/translated/helpers.js:80 +msgid "YES" +msgstr "" + +#: templates/js/translated/helpers.js:83 +msgid "NO" +msgstr "" + +#: templates/js/translated/helpers.js:96 +msgid "True" +msgstr "" + +#: templates/js/translated/helpers.js:97 +msgid "False" +msgstr "" + +#: templates/js/translated/index.js:104 +msgid "No parts required for builds" +msgstr "" + +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:143 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 +msgid "Cancel" +msgstr "" + +#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/modals.html:28 templates/modals.html:51 +msgid "Submit" +msgstr "" + +#: templates/js/translated/modals.js:157 +msgid "Form Title" +msgstr "" + +#: templates/js/translated/modals.js:446 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/translated/modals.js:597 +msgid "Show Error Information" +msgstr "" + +#: templates/js/translated/modals.js:687 +msgid "Accept" +msgstr "" + +#: templates/js/translated/modals.js:745 +msgid "Loading Data" +msgstr "" + +#: templates/js/translated/modals.js:1016 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/translated/modals.js:1016 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/translated/modals.js:1028 +msgid "Error posting form data" +msgstr "" + +#: templates/js/translated/modals.js:1125 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/translated/modals.js:1140 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/translated/modals.js:1141 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/translated/modals.js:1164 +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:1608 +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:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 +msgid "Add Extra Line Item" +msgstr "" + +#: templates/js/translated/order.js:151 +msgid "Export Order" +msgstr "" + +#: templates/js/translated/order.js:266 +msgid "Duplicate Line" +msgstr "" + +#: templates/js/translated/order.js:280 +msgid "Edit Line" +msgstr "" + +#: templates/js/translated/order.js:293 +msgid "Delete Line" +msgstr "" + +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 +msgid "No line items found" +msgstr "" + +#: templates/js/translated/order.js:394 +msgid "Duplicate line" +msgstr "" + +#: templates/js/translated/order.js:395 +msgid "Edit line" +msgstr "" + +#: templates/js/translated/order.js:399 +msgid "Delete line" +msgstr "" + +#: templates/js/translated/part.js:91 +msgid "Part Attributes" +msgstr "" + +#: templates/js/translated/part.js:95 +msgid "Part Creation Options" +msgstr "" + +#: templates/js/translated/part.js:99 +msgid "Part Duplication Options" +msgstr "" + +#: templates/js/translated/part.js:122 +msgid "Add Part Category" +msgstr "" + +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 +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:766 +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:1210 +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:893 +msgid "Schedule generation of a new stocktake report." +msgstr "" + +#: templates/js/translated/part.js:893 +msgid "Once complete, the stocktake report will be available for download." +msgstr "" + +#: templates/js/translated/part.js:901 +msgid "Generate Stocktake Report" +msgstr "" + +#: templates/js/translated/part.js:905 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:1054 +msgid "No stocktake information available" +msgstr "" + +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 +msgid "Edit Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 +msgid "Delete Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1285 +msgid "No variants found" +msgstr "" + +#: templates/js/translated/part.js:1603 +msgid "No part parameter templates found" +msgstr "" + +#: templates/js/translated/part.js:1666 +msgid "Edit Part Parameter Template" +msgstr "" + +#: templates/js/translated/part.js:1678 +msgid "Any parameters which reference this template will also be deleted" +msgstr "" + +#: templates/js/translated/part.js:1686 +msgid "Delete Part Parameter Template" +msgstr "" + +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 +#: templates/js/translated/sales_order.js:1911 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1973 +msgid "Delete part relationship" +msgstr "" + +#: templates/js/translated/part.js:1995 +msgid "Delete Part Relationship" +msgstr "" + +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 +msgid "No parts found" +msgstr "" + +#: templates/js/translated/part.js:2204 +msgid "Set the part category for the selected parts" +msgstr "" + +#: templates/js/translated/part.js:2209 +msgid "Set Part Category" +msgstr "" + +#: templates/js/translated/part.js:2238 +msgid "Set category" +msgstr "" + +#: templates/js/translated/part.js:2290 +msgid "part" +msgstr "" + +#: templates/js/translated/part.js:2291 +msgid "parts" +msgstr "" + +#: templates/js/translated/part.js:2387 +msgid "No category" +msgstr "" + +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 +msgid "Display as list" +msgstr "" + +#: templates/js/translated/part.js:2563 +msgid "Display as grid" +msgstr "" + +#: templates/js/translated/part.js:2661 +msgid "No subcategories found" +msgstr "" + +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 +msgid "Display as tree" +msgstr "" + +#: templates/js/translated/part.js:2777 +msgid "Load Subcategories" +msgstr "" + +#: templates/js/translated/part.js:2792 +msgid "Subscribed category" +msgstr "" + +#: templates/js/translated/part.js:2880 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 +msgid "results" +msgstr "" + +#: templates/js/translated/part.js:2952 +msgid "Edit test template" +msgstr "" + +#: templates/js/translated/part.js:2953 +msgid "Delete test template" +msgstr "" + +#: templates/js/translated/part.js:2957 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/translated/part.js:2973 +msgid "Edit Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:2987 +msgid "Delete Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 +msgid "No date specified" +msgstr "" + +#: templates/js/translated/part.js:3069 +msgid "Specified date is in the past" +msgstr "" + +#: templates/js/translated/part.js:3075 +msgid "Speculative" +msgstr "" + +#: templates/js/translated/part.js:3125 +msgid "No scheduling information available for this part" +msgstr "" + +#: templates/js/translated/part.js:3131 +msgid "Error fetching scheduling information for this part" +msgstr "" + +#: templates/js/translated/part.js:3227 +msgid "Scheduled Stock Quantities" +msgstr "" + +#: templates/js/translated/part.js:3243 +msgid "Maximum Quantity" +msgstr "" + +#: templates/js/translated/part.js:3288 +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:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1237 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1238 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1241 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1368 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1370 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1396 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1464 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1465 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1479 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1751 +#: 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:1913 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1931 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1986 +#: templates/js/translated/sales_order.js:2106 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2001 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:667 +#: templates/js/translated/sales_order.js:2119 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 +#: templates/js/translated/sales_order.js:2130 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2294 +#: templates/js/translated/sales_order.js:2060 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 +#: templates/js/translated/sales_order.js:2061 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 +#: 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:560 +msgid "Receive Return Order Items" +msgstr "" + +#: templates/js/translated/return_order.js:691 +#: templates/js/translated/sales_order.js:2267 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:796 +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:1861 +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:106 +msgid "Serialize Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:137 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:173 +msgid "Add Location type" +msgstr "" + +#: templates/js/translated/stock.js:209 +msgid "Edit Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:224 +msgid "New Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:226 +msgid "Create another location after this one" +msgstr "" + +#: templates/js/translated/stock.js:227 +msgid "Stock location created" +msgstr "" + +#: templates/js/translated/stock.js:241 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: templates/js/translated/stock.js:248 +msgid "Move to parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:257 +msgid "Delete Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:261 +msgid "Action for stock items in this stock location" +msgstr "" + +#: templates/js/translated/stock.js:266 +msgid "Action for sub-locations" +msgstr "" + +#: templates/js/translated/stock.js:320 +msgid "This part cannot be serialized" +msgstr "" + +#: templates/js/translated/stock.js:356 +msgid "Add given quantity as packs instead of individual items" +msgstr "" + +#: templates/js/translated/stock.js:368 +msgid "Enter initial quantity for this stock item" +msgstr "" + +#: templates/js/translated/stock.js:374 +msgid "Enter serial numbers for new stock (or leave blank)" +msgstr "" + +#: templates/js/translated/stock.js:445 +msgid "Stock item duplicated" +msgstr "" + +#: templates/js/translated/stock.js:465 +msgid "Duplicate Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:481 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: templates/js/translated/stock.js:486 +msgid "Delete Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:507 +msgid "Edit Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:549 +msgid "Create another item after this one" +msgstr "" + +#: templates/js/translated/stock.js:561 +msgid "Created new stock item" +msgstr "" + +#: templates/js/translated/stock.js:574 +msgid "Created multiple stock items" +msgstr "" + +#: templates/js/translated/stock.js:599 +msgid "Find Serial Number" +msgstr "" + +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +msgid "Enter serial number" +msgstr "" + +#: templates/js/translated/stock.js:620 +msgid "Enter a serial number" +msgstr "" + +#: templates/js/translated/stock.js:640 +msgid "No matching serial number" +msgstr "" + +#: templates/js/translated/stock.js:649 +msgid "More than one matching result found" +msgstr "" + +#: templates/js/translated/stock.js:757 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:758 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:835 +msgid "Warning: Merge operation cannot be reversed" +msgstr "" + +#: templates/js/translated/stock.js:836 +msgid "Some information will be lost when merging stock items" +msgstr "" + +#: templates/js/translated/stock.js:838 +msgid "Stock transaction history will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:839 +msgid "Supplier part information will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:933 +msgid "Confirm stock item merge" +msgstr "" + +#: templates/js/translated/stock.js:934 +msgid "Merge Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1031 +msgid "Transfer Stock" +msgstr "" + +#: templates/js/translated/stock.js:1032 +msgid "Move" +msgstr "" + +#: templates/js/translated/stock.js:1038 +msgid "Count Stock" +msgstr "" + +#: templates/js/translated/stock.js:1039 +msgid "Count" +msgstr "" + +#: templates/js/translated/stock.js:1043 +msgid "Remove Stock" +msgstr "" + +#: templates/js/translated/stock.js:1044 +msgid "Take" +msgstr "" + +#: templates/js/translated/stock.js:1048 +msgid "Add Stock" +msgstr "" + +#: templates/js/translated/stock.js:1049 users/models.py:396 +msgid "Add" +msgstr "" + +#: templates/js/translated/stock.js:1053 +msgid "Delete Stock" +msgstr "" + +#: templates/js/translated/stock.js:1152 +msgid "Quantity cannot be adjusted for serialized stock" +msgstr "" + +#: templates/js/translated/stock.js:1152 +msgid "Specify stock quantity" +msgstr "" + +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1257 +msgid "Select at least one available stock item" +msgstr "" + +#: templates/js/translated/stock.js:1303 +msgid "Confirm stock adjustment" +msgstr "" + +#: templates/js/translated/stock.js:1448 +msgid "PASS" +msgstr "" + +#: templates/js/translated/stock.js:1450 +msgid "FAIL" +msgstr "" + +#: templates/js/translated/stock.js:1455 +msgid "NO RESULT" +msgstr "" + +#: templates/js/translated/stock.js:1535 +msgid "Pass test" +msgstr "" + +#: templates/js/translated/stock.js:1538 +msgid "Add test result" +msgstr "" + +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 +msgid "No test results found" +msgstr "" + +#: templates/js/translated/stock.js:1625 +msgid "Test Date" +msgstr "" + +#: templates/js/translated/stock.js:1638 +msgid "Test started" +msgstr "" + +#: templates/js/translated/stock.js:1647 +msgid "Test finished" +msgstr "" + +#: templates/js/translated/stock.js:1801 +msgid "Edit Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1821 +msgid "Delete Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1853 +msgid "In production" +msgstr "" + +#: templates/js/translated/stock.js:1857 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:1865 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/translated/stock.js:1871 +msgid "No stock location set" +msgstr "" + +#: templates/js/translated/stock.js:1927 +msgid "Change stock status" +msgstr "" + +#: templates/js/translated/stock.js:1936 +msgid "Merge stock" +msgstr "" + +#: templates/js/translated/stock.js:1985 +msgid "Delete stock" +msgstr "" + +#: templates/js/translated/stock.js:2038 +msgid "stock items" +msgstr "" + +#: templates/js/translated/stock.js:2043 +msgid "Scan to location" +msgstr "" + +#: templates/js/translated/stock.js:2054 +msgid "Stock Actions" +msgstr "" + +#: templates/js/translated/stock.js:2098 +msgid "Load installed items" +msgstr "" + +#: templates/js/translated/stock.js:2176 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/translated/stock.js:2181 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/translated/stock.js:2184 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/translated/stock.js:2187 +msgid "Serialized stock item has been allocated" +msgstr "" + +#: templates/js/translated/stock.js:2189 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:2191 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:2194 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:2196 +msgid "Stock item has been consumed by a build order" +msgstr "" + +#: templates/js/translated/stock.js:2200 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/translated/stock.js:2202 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/translated/stock.js:2207 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/translated/stock.js:2209 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/translated/stock.js:2211 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/translated/stock.js:2215 +#: templates/js/translated/table_filters.js:350 +msgid "Depleted" +msgstr "" + +#: templates/js/translated/stock.js:2380 +msgid "Supplier part not specified" +msgstr "" + +#: templates/js/translated/stock.js:2427 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2555 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/translated/stock.js:2658 +msgid "stock locations" +msgstr "" + +#: templates/js/translated/stock.js:2813 +msgid "Load Sublocations" +msgstr "" + +#: templates/js/translated/stock.js:2930 +msgid "Details" +msgstr "" + +#: templates/js/translated/stock.js:2934 +msgid "No changes" +msgstr "" + +#: templates/js/translated/stock.js:2946 +msgid "Part information unavailable" +msgstr "" + +#: templates/js/translated/stock.js:2968 +msgid "Location no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2985 +msgid "Build order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3000 +msgid "Purchase order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3017 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3034 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3053 +msgid "Customer no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3071 +msgid "Stock item no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3089 +msgid "Added" +msgstr "" + +#: templates/js/translated/stock.js:3097 +msgid "Removed" +msgstr "" + +#: templates/js/translated/stock.js:3169 +msgid "No installed items" +msgstr "" + +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +msgid "Uninstall Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:3280 +msgid "Select stock item to uninstall" +msgstr "" + +#: templates/js/translated/stock.js:3301 +msgid "Install another stock item into this item" +msgstr "" + +#: templates/js/translated/stock.js:3302 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: templates/js/translated/stock.js:3304 +msgid "The Stock Item links to a Part which is the BOM for this Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:3305 +msgid "The Stock Item is currently available in stock" +msgstr "" + +#: templates/js/translated/stock.js:3306 +msgid "The Stock Item is not already installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:3307 +msgid "The Stock Item is tracked by either a batch code or serial number" +msgstr "" + +#: templates/js/translated/stock.js:3320 +msgid "Select part to install" +msgstr "" + +#: templates/js/translated/stock.js:3383 +msgid "Select one or more stock items" +msgstr "" + +#: templates/js/translated/stock.js:3396 +msgid "Selected stock items" +msgstr "" + +#: templates/js/translated/stock.js:3400 +msgid "Change Stock Status" +msgstr "" + +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 +msgid "Order status" +msgstr "" + +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 +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:725 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:778 +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:714 +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:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:726 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:731 +msgid "Show active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 +msgid "Available stock" +msgstr "" + +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 +msgid "Has Units" +msgstr "" + +#: templates/js/translated/table_filters.js:753 +msgid "Part has defined units" +msgstr "" + +#: templates/js/translated/table_filters.js:757 +msgid "Has IPN" +msgstr "" + +#: templates/js/translated/table_filters.js:758 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/translated/table_filters.js:762 +msgid "In stock" +msgstr "" + +#: templates/js/translated/table_filters.js:770 +msgid "Purchasable" +msgstr "" + +#: templates/js/translated/table_filters.js:782 +msgid "Has stocktake entries" +msgstr "" + +#: templates/js/translated/table_filters.js:848 +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: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 "Sulgege otsingumenüü" + +#: 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/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +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:379 +msgid "Permission set" +msgstr "" + +#: users/models.py:388 +msgid "Group" +msgstr "" + +#: users/models.py:392 +msgid "View" +msgstr "" + +#: users/models.py:392 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:396 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:400 +msgid "Change" +msgstr "" + +#: users/models.py:402 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:408 +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 f33b735c76..ec598cb884 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "Address e API peida nashod" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "جزئیات خطا را می توان در پنل مدیریت پیدا کرد" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "تاریخ را وارد کنید" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "یادداشت" @@ -88,258 +92,270 @@ msgstr "مقدار '{name}' در قالب الگو ظاهر قرار نمی گی msgid "Provided value does not match required pattern: " msgstr "مقدار ارائه شده با الگوی مورد نیاز مطابقت ندارد: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "رمز عبور را وارد کنید" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "گذرواژه جدید را وارد کنید" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "تأیید کلمه‌ی عبور" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "گذرواژه جدید را تایید کنید" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "رمز عبور قدیمی" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "ایمیل (دوباره وارد کنید)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "تایید آدرس ایمیل" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "هر بار باید همان ایمیل را تایپ کنید." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "آدرس ایمیل اصلی ارائه شده معتبر نیست." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "دامنه ایمیل ارائه شده تایید نشده است." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "خطا در اتصال" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "سرور با کد وضعیت نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "یک استثنا رخ داده است" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "سرور با مقدار طول محتوا نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "اندازه عکس بسیار بزرگ است" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "فایل‌های داده" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "فایل را برای بارگذاری انتخاب کنید" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "این نوع فایل پشتیبانی نمی‌شود" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "حجم فایل خیلی بزرگ است" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "هیچ ستونی در فایل یافت نشد" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "هیچ ردیف داده ای در فایل یافت نشد" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "هیچ ردیف داده ای ارائه نشده است" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "هیچ ستون داده ای ارائه نشده است" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "ستون مورد نیاز وجود ندارد: \"{name}\"" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "ستون تکراری: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "آدرس فایل تصویری از راه دور" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "مرجع سفارش فروش" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "منبع محل" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "مقصد" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "هیچ عملیات کاربر-محوری، مشخص نشده است" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "تایید" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 bfa729e6d3..24a881f5fd 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API-rajapintaa ei löydy" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "Virheen tiedot löytyvät hallintapaneelista" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Anna päivämäärä" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Merkinnät" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Anna salasana" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Anna uusi salasana" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Vahvista salasana" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Vahvista uusi salasana" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Vanha salasana" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Sähköposti (uudelleen)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Sähköpostiosoitteen vahvistus" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Sinun täytyy kirjoittaa sama sähköposti joka kerta." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Annettu ensisijainen sähköpostiosoite ei kelpaa." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Annetun sähköpostiosoitteen verkkotunnusta ei hyväksytä." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Annettu määrä on virheellinen" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Tyhjä sarjanumero" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Duplikaatti sarjanumero" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Sarjanumeroita ei löytynyt" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Yhteysvirhe" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Palvelin vastasi virheellisellä tilakoodilla" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Kuva on liian iso" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Kuvan lataus ylitti enimmäiskoon" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Etäpalvelin palautti tyhjän vastauksen" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 +msgid "Bulgarian" +msgstr "" + +#: InvenTree/locales.py:20 msgid "Czech" msgstr "tšekki" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "tanska" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "saksa" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "kreikka" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "englanti" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "espanja" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "espanja (Meksiko)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "farsi / persia" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "suomi" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "ranska" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "heprea" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "unkari" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "italia" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "japani" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "korea" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "hollanti" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "norja" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "puola" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "portugali" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "portugali (Brasilia)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "venäjä" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "slovenia" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "ruotsi" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "thai" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "turkki" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "vietnam" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Sähköposti" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metatietojen tulee olla python dict objekti" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Liitännäisen metadata" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadatakenttä, ulkoisten liitännäisten käyttöön" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Virheellisesti muotoiltu malli" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Viitekenttä ei voi olla tyhjä" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Viitenumero on liian suuri" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Puuttuva tiedosto" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Puuttuva ulkoinen linkki" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Liite" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Valitse liitettävä tiedosto" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Linkki ulkoiseen URLiin" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Kommentti" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Tiedoston kommentti" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "latauspäivä" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Tiedoston nimi ei saa olla tyhjä" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Virheellinen liitteen hakemisto" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Tiedostonimi sisältää kielletyn merkin '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Tiedostonimen pääte puuttuu" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Samanniminen liite on jo olemassa" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Virhe tiedoston uudelleennimeämisessä" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Virheellinen valinta" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Kuvaus" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Kuvaus (valinnainen)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Polku" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Viivakoodin Tiedot" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Palvelinvirhe" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Valuutta" msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Käyttäjätunnus" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Etunimi" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Sukunimi" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Aktiivinen" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Tiedostonimi" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Virheellinen arvo" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Datatiedosto" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Valitse lähetettävä datatiedosto" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Tiedostotyyppiä ei tueta" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Tiedosto on liian suuri" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Datarivejä ei annettu" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Datasarakkeita ei annettu" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Vaadittu sarake puuttuu: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplikaatti sarake: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "Kuvatiedoston URL" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "Kuvien lataaminen ei ole käytössä" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "InvenTree järjestelmän terveystarkastukset epäonnistui" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "Järjestelmän tiedot" msgid "About InvenTree" msgstr "Tietoja InvenTree:stä" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Saatavilla" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Osa" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ulkoinen linkki" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Linkki ulkoiseen URLiin" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Määrä" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Varastotuote" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Sijainti" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Tila" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Valmistajan osanumero" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Sarjanumero" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Seurattavissa" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Odottaa" @@ -1540,15 +1677,21 @@ msgstr "Odottaa" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Valmis" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Poista viivakoodin linkitys" @@ -1612,7 +1755,7 @@ msgstr "Poista viivakoodin linkitys" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Linkitä viivakoodi" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Myöhässä" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Prioriteetti" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Valmis" @@ -1813,12 +1977,12 @@ msgstr "Valmis" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Liitteet" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Tiedosto" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Päivitetty" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Viimeisimmän päivityksen aikaleima" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Ei ryhmää" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Uudelleenkäynnistys vaaditaan" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Yrityksen nimi" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Yrityksen sisäinen nimi" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Oletusvaluutta" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "päivää" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Automaattinen varmuuskopionti" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "Ota käyttöön tietokannan ja mediatiedostojen automaattinen varmuuskopiointi" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Automaattisen varmuuskopioinnin aikaväli" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Viivakoodituki" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Komponentti" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Ostettavissa" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Sisäiset hinnat" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Sisäisen hinnan ohitus" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Sivun koko" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Täytä sarjanumerot automaattisesti" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "Salli salasananpalautus" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" -msgstr "Salli rekisteröinti" +msgid "Sales Order Default Shipment" +msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" -msgstr "Salli SSO" +msgid "Edit Completed Sales Orders" +msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "Salli SSO kirjautumissivuilla" - -#: common/models.py:1904 -msgid "Enable SSO registration" -msgstr "Salli SSO rekisteröinti" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" +msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" -msgstr "Sähköposti vaaditaan" - -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" -msgstr "Sähköpostiosoite kahdesti" - -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1932 -msgid "Password twice" -msgstr "Salasana kahdesti" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" +msgstr "" -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" -msgstr "Sallitut verkkotunnukset" - -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" +#: common/models.py:1945 +msgid "Enable password forgot" +msgstr "Salli salasananpalautus" + #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" -msgstr "" +#: common/models.py:1951 +msgid "Enable registration" +msgstr "Salli rekisteröinti" #: common/models.py:1952 -msgid "Enforce MFA" -msgstr "Pakota MFA" - -#: common/models.py:1953 -msgid "Users must use multifactor security." +msgid "Enable self-registration for users on the login pages" msgstr "" +#: common/models.py:1957 +msgid "Enable SSO" +msgstr "Salli SSO" + #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" +msgstr "Salli SSO kirjautumissivuilla" + +#: common/models.py:1963 +msgid "Enable SSO registration" +msgstr "Salli SSO rekisteröinti" + +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" -msgstr "" - -#: common/models.py:1982 -msgid "Enable navigation integration" -msgstr "" - -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" -msgstr "" +msgid "Email required" +msgstr "Sähköposti vaaditaan" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "" + +#: common/models.py:2017 +msgid "Mail twice" +msgstr "Sähköpostiosoite kahdesti" + +#: common/models.py:2018 +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" +msgstr "Salasana kahdesti" + +#: common/models.py:2024 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:2029 +msgid "Allowed domains" +msgstr "Sallitut verkkotunnukset" + +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "" + +#: common/models.py:2037 +msgid "Group on signup" +msgstr "" + +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" + +#: common/models.py:2045 +msgid "Enforce MFA" +msgstr "Pakota MFA" + +#: common/models.py:2046 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:2051 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:2061 +msgid "Check for plugin updates" +msgstr "" + +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2018 +#: common/models.py:2111 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2026 +#: common/models.py:2119 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2034 +#: common/models.py:2127 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2042 +#: common/models.py:2135 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2126 +#: common/models.py:2219 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2138 +#: common/models.py:2231 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2144 +#: common/models.py:2237 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "" -#: common/models.py:2162 +#: common/models.py:2255 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Näytä uutiset" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Näytä uutiset kotisivulla" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "" -#: common/models.py:2229 +#: common/models.py:2322 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "" -#: common/models.py:2245 +#: common/models.py:2338 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2289 +#: common/models.py:2382 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "" -#: common/models.py:2357 +#: common/models.py:2450 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2388 +#: common/models.py:2481 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" -msgstr "" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Käyttäjä" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Hinta" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Aktiivinen" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Salaisuus" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "Isäntä" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Otsikko" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Linkki" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Julkaistu" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Yhteenveto" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "Kuva" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "Kuvatiedosto" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Liite" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Puuttuva tiedosto" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Puuttuva ulkoinen linkki" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Valitse liitettävä tiedosto" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Kommentti" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Tiedostonimi" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Verkkotunnus ei saa olla tyhjä." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Virheellinen verkkotunnus: {domain}" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "Edellinen vaihe" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Yritys" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Yritykset" + +#: company/models.py:117 msgid "Company description" msgstr "Yrityksen kuvaus" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Sivusto" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "Yrityksen sivuston URL" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Puhelinnumero" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Kontakti" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "on asiakas" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" -msgstr "on toimittaja" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "on valmistaja" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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 "Yritys" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Osoite" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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 "Valmistaja" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: 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 "Valmistajan osanumero" - -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Valmistaja" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Valitse valmistaja" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Arvo" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Toimittaja" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Valitse valmistajan osa" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Muistiinpano" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "Poista yritys" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "Osan kuva" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Asiakas" @@ -4249,19 +4605,12 @@ msgstr "Asiakas" msgid "Uses default currency" msgstr "Käyttää oletusvaluuttaa" -#: 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 "Osoite" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Puhelin" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "Asiakkaat" msgid "New Customer" msgstr "Uusi asiakas" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Yritykset" - #: company/views.py:52 msgid "New Company" msgstr "Uusi yritys" @@ -4642,48 +4983,228 @@ msgstr "Uusi yritys" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Hinta yhteensä" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "Tilauksen valuutta" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Tilauksen viite" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "Asiakkaan viite " -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Vastaanotettu" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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 "Seurantakoodi" - -#: order/models.py:1741 -msgid "Shipment tracking information" -msgstr "" - -#: order/models.py:1748 -msgid "Invoice Number" -msgstr "Laskunumero" - -#: order/models.py:1749 -msgid "Reference number for associated invoice" -msgstr "" - -#: order/models.py:1769 -msgid "Shipment has already been sent" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "Seurantakoodi" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "Laskunumero" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Kadonnut" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Palautettu" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Kesken" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ msgid "Edit order" msgstr "Muokkaa tilausta" #: 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 "Peru tilaus" - -#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Kopioi tilaus" -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Peru tilaus" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 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 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 msgid "Total cost" msgstr "Kokonaiskustannukset" -#: order/templates/order/order_base.html:228 -#: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:243 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "Kokonaiskustannuksia ei voitu laskea" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Poista rivi" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Toiminnot" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Avainsanat" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Kategoria" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Oletus avainsanat" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "Kuvake" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "Kuvake (valinnainen)" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "Muut merkinnät" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "Raportti" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Käytössä" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "Käytössä" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "Luo raportti" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Muokkaa kategoriaa" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Muokkaa kategoriaa" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Poista kategoria" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Poista kategoria" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "Luo uusi osa" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Uusi osa" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Muokkaa" -#: part/templates/part/prices.html:28 stock/admin.py:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Suodattimet" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Leveys [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Korkeus [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "Sarjanumero" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Sarjanumero" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "Asetettu karanteeniin" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Varastotuote luotu" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "seuraava sivu" msgid "Navigate to next serial number" msgstr "Siirry seuraavaan sarjanumeroon" -#: stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2380 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Muokkaa sijaintia" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Poista sijainti" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Uusi sijainti" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Poista" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" msgid "Change Password" msgstr "" -#: templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Käyttäjätunnus" - -#: templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Etunimi" - -#: templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Sukunimi" - #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "kopioi leikepöydälle" @@ -10779,7 +11492,7 @@ msgstr "Vahvista sähköpostiosoite" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Vahvista" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Skannaa viivakoodi" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Lähetä" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "Sähköpostiasetukset" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Kyllä" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Ryhmä" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Näytä" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Oikeus tarkastella kohteita" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Oikeus lisätä kohteita" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Muuta" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Oikeus muokata kohteita" -#: users/models.py:413 +#: users/models.py:408 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 f31443fa27..8894f018b4 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:03\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "Point de terminaison de l'API introuvable" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "L'utilisateur n'a pas la permission de voir ce modèle" @@ -52,30 +52,34 @@ msgstr "Quantité fournie invalide ({exc})" msgid "Error details can be found in the admin panel" msgstr "Les détails de l'erreur peuvent être trouvées dans le panneau d'administration" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Entrer la date" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Notes" @@ -88,258 +92,270 @@ msgstr "La valeur '{name}' n'apparaît pas dans le format du modèle" msgid "Provided value does not match required pattern: " msgstr "La valeur fournie ne correspond pas au modèle requis : " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Entrer le mot de passe" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Entrer le nouveau mot de passe" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Confirmez le mot de passe" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Confirmer le nouveau mot de passe" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Ancien mot de passe" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (encore)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Confirmation de l'adresse email" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Vous devez taper le même e-mail à chaque fois." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "L'adresse e-mail principale fournie n'est pas valide." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Le domaine e-mail fourni n'est pas approuvé." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "L'enregistrement est désactivé." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Chaîne de numéro de série vide" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Numéro de série en doublon" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Plage de groupe non valide : {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "La plage de groupe {group} dépasse la quantité autorisée ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Séquence de groupe invalide : {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Aucun numéro de série trouvé" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Le nombre de numéros de série uniques ({len(serials)}) doit correspondre à la quantité ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Retirer les balises HTML de cette valeur" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Erreur de connexion" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Le serveur a répondu avec un code de statut invalide" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Une erreur est survenue" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Le serveur a répondu avec une valeur de longueur de contenu invalide" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Image trop volumineuse" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "La taille de l'image dépasse la taille maximale autorisée" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Le serveur distant a renvoyé une réponse vide" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "L'URL fournie n'est pas un fichier image valide" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "Arabe" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgare" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Tchèque" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Danois" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Allemand" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Grec" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Anglais" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Espagnol" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Espagnol (Mexique)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "Estonien" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Perse" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finnois" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Français" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hébreu" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hindi" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Hongrois" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italien" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japonais" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Coréen" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "Letton" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Néerlandais" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norvégien" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polonais" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugais" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugais (Brésilien)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Roumain" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Russe" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Slovaque" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slovénien" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Serbe" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Suédois" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Thaïlandais" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turc" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "Ukrainien" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamien" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Chinois (Simplifié)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Chinois (Traditionnel)" @@ -348,257 +364,165 @@ msgstr "Chinois (Traditionnel)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Se connecter à l'application" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-mail" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Erreur lors de l'exécution de la validation du plugin" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Les metadata doivent être un objet python de type \"dict\"" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Métadonnées de l'Extension" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "Champs metadata JSON, pour plugins tiers" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Modèle mal formaté" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Clé de format inconnu spécifiée" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Clé de format requise manquante" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Le champ de référence ne peut pas être vide" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "La référence doit correspondre au modèle requis" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Le numéro de référence est trop grand" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Fichier manquant" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Lien externe manquant" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Pièce jointe" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Sélectionnez un fichier à joindre" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Lien vers une url externe" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Commentaire" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Commentaire du fichier" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "date de chargement" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Le nom de fichier ne doit pas être vide" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Répertoire de pièce jointe invalide" - -#: 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:668 -msgid "Filename missing extension" -msgstr "Extension manquante du nom de fichier" - -#: 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:684 -msgid "Error renaming file" -msgstr "Erreur lors du renommage du fichier" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 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:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Description" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "parent" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Chemin d'accès" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Notes Markdown (option)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Données du code-barres" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Données de code-barres tierces" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Hash du code-barre" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Hachage unique des données du code-barres" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Code-barres existant trouvé" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Erreur serveur" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Une erreur a été loguée par le serveur." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Devise" msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Prénom" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "Prénom de l'utilisateur" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Nom" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "Nom de famille de l'utilisateur" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "Adresse e-mail de l'utilisateur" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "Staff" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "Cet utilisateur a-t-il les permissions du staff" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "Super-utilisateur" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "Cet utilisateur est-il un super-utilisateur" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Actif" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "Ce compte d'utilisateur est-il actif" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Vous n'avez pas la permission de modifier ce rôle utilisateur." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Seuls les super-utilisateurs peuvent créer de nouveaux utilisateurs" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Votre compte a été créé." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Veuillez utiliser la fonction de réinitialisation du mot de passe pour vous connecter" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Bienvenue dans InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Nom du fichier" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Valeur non valide" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Fichier de données" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Sélectionnez le fichier de données à envoyer" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Format de fichier non supporté" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Fichier trop volumineux" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Pas de colonnes trouvées dans le fichier" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Par de lignes de données trouvées dans le fichier" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Pas de lignes de données fournies" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Pas de colonne de données fournie" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Colonne requise manquante : {name}" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Colonne duliquée : '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Images distantes" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL du fichier image distant" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Échec de la vérification du processus d'arrière-plan" @@ -702,27 +679,27 @@ msgstr "Backend d'email non configuré" msgid "InvenTree system health checks failed" msgstr "Échec des contrôles de santé du système" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Base de données inconnue" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Unité invalide" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Code de devise invalide" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "La valeur de surplus ne doit pas être négative" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Le surplus ne doit pas dépasser 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Valeur invalide pour le dépassement" @@ -750,62 +727,63 @@ msgstr "Informations système" msgid "About InvenTree" msgstr "À propos d'InvenTree" -#: build/api.py:255 +#: build/api.py:247 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:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Consommable" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Facultatif" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Suivi" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Allouée" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Disponible" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Ordre de Fabrication" msgid "Build Orders" msgstr "Ordres de Fabrication" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Choix invalide pour la fabrication parente" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 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:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "La pièce de commande de construction ne peut pas être changée" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Référence" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Brève description de la fabrication (optionnel)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Fabrication parente" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder associé a cette fabrication" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "BuildOrder associé a cette fabrication" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Pièce" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Sélectionnez la pièce à construire" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Bon de commande de référence" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Commande de vente à laquelle cette construction est allouée" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Emplacement d'origine" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Emplacement cible" -#: build/models.py:270 +#: build/models.py:302 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:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Quantité a fabriquer" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Nombre de stock items à construire" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Articles terminés" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Nombre d'articles de stock qui ont été terminés" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "État de la construction" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: 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:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Date d'achèvement cible" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Date d'achèvement" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "achevé par" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Émis par" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Responsable" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Lien vers une url externe" + +#: build/models.py:381 msgid "Build Priority" msgstr "Priorité de fabrication" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Priorité de cet ordre de fabrication" msgid "Project Code" msgstr "Code du projet" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Code de projet pour cet ordre de construction" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 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 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "La commande de construction {build} a été effectuée" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 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:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, 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:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Création de l'objet" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Création de l'objet" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Quantité" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1562 +#: build/models.py:1660 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:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Installer dans" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Stock de destination de l'article" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Nom de l'article" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:173 +#: build/serializers.py:183 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:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:279 +#: build/serializers.py:289 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:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Emplacement" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:316 +#: build/serializers.py:326 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 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "Les numéros de série doivent être fournis pour les pièces traçables" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "Abandonner les allocations de stock pour les sorties abandonnées" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "État" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:527 +#: build/serializers.py:537 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:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "Consommation du stock alloué" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:620 +#: build/serializers.py:657 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:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:681 +#: build/serializers.py:718 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:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:713 +#: build/serializers.py:750 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:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:788 +#: build/serializers.py:828 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:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:838 +#: build/serializers.py:878 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:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:907 +#: build/serializers.py:947 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:914 +#: build/serializers.py:954 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:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:1016 +#: build/serializers.py:1056 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:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Conditionnement" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "ID de composant" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Description pièce" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Numéro de série" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Traçable" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Stock alloué" -#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "En Commande" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Stock disponible" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "En attente" @@ -1540,15 +1677,21 @@ msgstr "En attente" msgid "Production" msgstr "Fabrication" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Terminé" @@ -1576,8 +1719,8 @@ msgstr "Image miniature de l'article" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Actions de code-barres" @@ -1588,7 +1731,7 @@ msgstr "Actions de code-barres" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Afficher le QR Code" @@ -1599,9 +1742,9 @@ msgstr "Afficher le QR Code" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Délier le code-barre" @@ -1612,7 +1755,7 @@ msgstr "Délier le code-barre" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Lier le code-barre" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Modifier l'assemblage" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Annuler l'assemblage" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "Dupliquer la construction" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Annuler l'assemblage" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Supprimer l'assemblage" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Compléter l'assemblage" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Description de la construction" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Aucune sortie de construction n'a été créée pour cet ordre de construction" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "L'ordre de construction est prêt à être marqué comme terminé" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "L'ordre de construction ne peut pas être achevé car il reste des outputs en suspens" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Le nombre de constructions requis n'a pas encore été atteint" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 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/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Date Cible" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Cette construction était due le %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "En retard" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 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:1511 order/models.py:847 -#: order/models.py:1587 order/models.py:1701 order/models.py:1855 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Sorties de Construction terminées" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Commandes" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Émis par" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Priorité" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "Supprimer la commande de construction" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "Génération du QR Code de commande" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "Lier le code-barres pour construire la commande" @@ -1766,8 +1930,8 @@ 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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Destination" @@ -1779,23 +1943,23 @@ msgstr "Stockage de destination non défini" msgid "Allocated Parts" msgstr "Pièces allouées" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" 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:190 -#: templates/js/translated/build.js:2199 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Créé le" @@ -1804,8 +1968,8 @@ 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:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Terminé" @@ -1813,13 +1977,13 @@ msgstr "Terminé" msgid "Build not complete" msgstr "Compilation incomplète" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Commandes de constructions filles" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Allouer le stock à la construction" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Allouer automatiquement" msgid "Manually allocate stock to build" msgstr "Allouer manuellement le stock à construire" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Allouer le stock" @@ -1870,15 +2034,19 @@ msgstr "Créer une nouvelle sortie de construction" msgid "New Build Output" msgstr "Nouvelle sortie de construction" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "Stock Consommé" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Sorties de Construction terminées" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Sorties de Construction terminées" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Pieces jointes" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Notes de construction" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "Allocation terminée" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "Toutes les lignes ont été entièrement attribuées" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Nouvel ordre de construction" @@ -1914,10 +2082,37 @@ msgstr "Nouvel ordre de construction" msgid "Build Order Details" msgstr "Détails de la commande de construction" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Sorties incomplètes" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "L'utilisateur n'a pas les permissions de supprimer cette pièce jointe" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "Code de devise invalide" @@ -1930,7 +2125,7 @@ msgstr "Code de devise en double" msgid "No valid currency codes provided" msgstr "Aucun code de devise valide fourni" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Pas de plugin" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Fichier" msgid "Select {name} file to upload" msgstr "Sélectionner le fichier {name} à uploader" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Mise à jour" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Date de la dernière mise à jour" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "L'URL du site est verrouillée par configuration" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Code projet unique" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Description du projet" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "Utilisateur ou groupe responsable de ce projet" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "Valeur du paramètre" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "La valeur choisie n'est pas une option valide" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "La valeur doit être une valeur booléenne" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "La valeur doit être un nombre entier" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "La chaîne de caractères constituant la clé doit être unique" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Pas de groupe" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Redémarrage nécessaire" -#: common/models.py:1214 +#: common/models.py:1233 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:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Migration en attente" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "Nombre de migrations de base de données en attente" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Nom de l'instance du serveur" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "Chaîne de caractères descriptive pour l'instance serveur" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Utiliser le nom de l'instance" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "Utiliser le nom de l’instance dans la barre de titre" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Limiter l'affichage de `about`" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "Afficher la modale `about` uniquement aux super-utilisateurs" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Nom de la société" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Nom de société interne" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "URL de base" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "URL de base pour l'instance serveur" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Devise par défaut" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "Sélectionnez la devise de base pour les calculs de prix" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "Devises supportées" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "Liste des codes de devises supportés" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "Intervalle de mise à jour des devises" -#: common/models.py:1273 +#: common/models.py:1292 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:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "jours" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "Plugin de mise à jour de devise" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "Plugin de mise à jour des devises à utiliser" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Télécharger depuis l'URL" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Limite du volume de téléchargement" -#: common/models.py:1295 +#: common/models.py:1314 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:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "Agent utilisateur utilisé pour télécharger depuis l'URL" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "Validation stricte d'URL" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "Spécification du schéma nécessaire lors de la validation des URL" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Confirmation requise" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Exiger une confirmation explicite de l’utilisateur pour certaines actions." -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Profondeur de l'arborescence" -#: common/models.py:1322 +#: common/models.py:1341 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:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Intervalle de vérification des mises à jour" -#: common/models.py:1329 +#: common/models.py:1348 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:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Backup automatique" -#: common/models.py:1336 +#: common/models.py:1355 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:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Intervalle de sauvegarde automatique" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "Spécifiez le nombre de jours entre les sauvegardes automatique" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "Intervalle de suppression des tâches" -#: common/models.py:1350 +#: common/models.py:1369 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:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "Intervalle de suppression du journal d'erreur" -#: common/models.py:1359 +#: common/models.py:1378 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:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "Intervalle de suppression du journal de notification" -#: common/models.py:1368 +#: common/models.py:1387 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:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Support des code-barres" -#: common/models.py:1376 +#: common/models.py:1395 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:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "Délai d'entrée du code-barres" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "Délai de traitement du code-barres" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "Prise en charge de la webcam code-barres" -#: common/models.py:1389 +#: common/models.py:1408 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:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "Modifications de la pièce" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "Activer le champ de modification de la pièce" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permettre la suppression de pièces utilisées dans un assemblage" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "Regex IPN" -#: common/models.py:1407 +#: common/models.py:1444 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:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/models.py:1417 +#: common/models.py:1454 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:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Copier les données de la pièce" -#: common/models.py:1423 +#: common/models.py:1460 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:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "Copier les données des paramètres de la pièce" -#: common/models.py:1429 +#: common/models.py:1466 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:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "Copier les données de test de la pièce" -#: common/models.py:1435 +#: common/models.py:1472 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:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Copier les templates de paramètres de catégorie" -#: common/models.py:1441 +#: common/models.py:1478 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:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Modèle" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Assemblage" -#: common/models.py:1453 +#: common/models.py:1490 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:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Composant" -#: common/models.py:1459 +#: common/models.py:1496 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:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Achetable" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Vendable" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Les pièces sont vendables par défaut" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Virtuelle" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Les pièces sont virtuelles par défaut" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Afficher l'import dans les vues" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "Afficher l'assistant d'importation pour certaine vues de produits" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Afficher les pièces connexes" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Afficher les pièces connexes à une pièce" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Stock initial" -#: common/models.py:1501 +#: common/models.py:1538 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:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Données initiales du fournisseur" -#: common/models.py:1508 +#: common/models.py:1545 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:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Format d'affichage du nom de la pièce" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Format pour afficher le nom de la pièce" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "Icône de catégorie par défaut" -#: common/models.py:1522 +#: common/models.py:1559 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:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "Renforcer les unités des paramètres" -#: common/models.py:1528 +#: common/models.py:1566 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:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "Nombre minimal de décimales" -#: common/models.py:1536 +#: common/models.py:1574 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:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Utiliser le prix fournisseur" -#: common/models.py:1562 +#: common/models.py:1600 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:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Remplacer l'historique des achats" -#: common/models.py:1570 +#: common/models.py:1608 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:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Utiliser les prix des articles en stock" -#: common/models.py:1578 +#: common/models.py:1616 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:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Âge de tarification des articles de stock" -#: common/models.py:1586 +#: common/models.py:1624 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:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Utiliser les prix variants" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "Inclure la tarification variante dans le calcul global des prix" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Variantes actives uniquement" -#: common/models.py:1601 +#: common/models.py:1639 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:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "Intervalle de regénération des prix" -#: common/models.py:1609 +#: common/models.py:1647 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:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Prix internes" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Substitution du prix interne" -#: common/models.py:1624 +#: common/models.py:1662 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:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/models.py:1638 +#: common/models.py:1676 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:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "Journal des erreurs" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Taille de la page" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Activer les rapports de test" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Activer la génération de rapports de test" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Joindre des rapports de test" -#: common/models.py:1676 +#: common/models.py:1714 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:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "Numéro de Série Universellement Unique" -#: common/models.py:1683 +#: common/models.py:1721 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:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Remplir automatiquement les Numéros de Série" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "Remplir automatiquement les numéros de série dans les formulaires" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "Supprimer le stock épuisé" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/models.py:1704 +#: common/models.py:1742 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:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Délai de péremption du stock" -#: common/models.py:1723 +#: common/models.py:1761 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:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Construction de stock expirée" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "Autoriser la construction avec un stock expiré" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "Contrôle de la propriété des stocks" -#: common/models.py:1737 +#: common/models.py:1775 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:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "Icône par défaut de l'emplacement du stock" -#: common/models.py:1743 +#: common/models.py:1781 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:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "Afficher les pièces en stock installées" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Modèle de référence de commande de construction" -#: common/models.py:1771 +#: common/models.py:1810 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:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1785 +#: common/models.py:1844 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1791 +#: common/models.py:1850 msgid "Enable Return Orders" msgstr "Activer les retours de commandes" -#: common/models.py:1792 +#: common/models.py:1851 msgid "Enable return order functionality in the user interface" msgstr "Activer la fonctionnalité de retour de commande dans l'interface utilisateur" -#: common/models.py:1797 +#: common/models.py:1856 msgid "Return Order Reference Pattern" msgstr "Modèle de référence de retour de commande" -#: common/models.py:1799 +#: common/models.py:1858 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1811 +#: common/models.py:1870 msgid "Edit Completed Return Orders" msgstr "Modifier les retours de commandes terminées" -#: common/models.py:1813 +#: common/models.py:1872 msgid "Allow editing of return orders after they have been completed" msgstr "Autoriser la modification des retours après leur enregistrement" -#: common/models.py:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "Modèle de référence de bon de commande" -#: common/models.py:1821 +#: common/models.py:1880 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:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "Expédition par défaut du bon de commande" -#: common/models.py:1834 +#: common/models.py:1893 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:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "Modifier les commandes de vente terminées" -#: common/models.py:1841 +#: common/models.py:1900 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:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "Modèle de référence de commande d'achat" -#: common/models.py:1857 +#: common/models.py:1916 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:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "Modifier les bons de commande terminés" -#: common/models.py:1871 +#: common/models.py:1930 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:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/models.py:1887 +#: common/models.py:1946 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:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/models.py:1893 +#: common/models.py:1952 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:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "Activer l'inscription SSO" -#: common/models.py:1906 +#: common/models.py:1965 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:1912 +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 msgid "Email required" msgstr "Email requis" -#: common/models.py:1913 +#: common/models.py:2004 msgid "Require user to supply mail on signup" msgstr "Exiger que l'utilisateur fournisse un mail lors de l'inscription" -#: common/models.py:1918 +#: common/models.py:2009 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/models.py:1920 +#: common/models.py:2011 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:1926 +#: common/models.py:2017 msgid "Mail twice" msgstr "Courriel en double" -#: common/models.py:1927 +#: common/models.py:2018 msgid "On signup ask users twice for their mail" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mail" -#: common/models.py:1932 +#: common/models.py:2023 msgid "Password twice" msgstr "Mot de passe deux fois" -#: common/models.py:1933 +#: common/models.py:2024 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:1938 +#: common/models.py:2029 msgid "Allowed domains" msgstr "Domaines autorisés" -#: common/models.py:1940 +#: common/models.py:2031 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1946 +#: common/models.py:2037 msgid "Group on signup" msgstr "Grouper sur inscription" -#: common/models.py:1947 -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:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" -#: common/models.py:1952 +#: common/models.py:2045 msgid "Enforce MFA" msgstr "Forcer l'authentification multifacteurs" -#: common/models.py:1953 +#: common/models.py:2046 msgid "Users must use multifactor security." msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs." -#: common/models.py:1958 +#: common/models.py:2051 msgid "Check plugins on startup" msgstr "Vérifier les plugins au démarrage" -#: common/models.py:1960 +#: common/models.py:2053 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:1968 +#: common/models.py:2061 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1969 +#: common/models.py:2062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1975 +#: common/models.py:2068 msgid "Enable URL integration" msgstr "Activer l'intégration d'URL" -#: common/models.py:1976 +#: common/models.py:2069 msgid "Enable plugins to add URL routes" msgstr "Autoriser les plugins à ajouter des chemins URL" -#: common/models.py:1982 +#: common/models.py:2075 msgid "Enable navigation integration" msgstr "Activer l'intégration de navigation" -#: common/models.py:1983 +#: common/models.py:2076 msgid "Enable plugins to integrate into navigation" msgstr "Activer les plugins à s'intégrer dans la navigation" -#: common/models.py:1989 +#: common/models.py:2082 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/models.py:1990 +#: common/models.py:2083 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/models.py:1996 +#: common/models.py:2089 msgid "Enable schedule integration" msgstr "Activer l'intégration du planning" -#: common/models.py:1997 +#: common/models.py:2090 msgid "Enable plugins to run scheduled tasks" msgstr "Autoriser les plugins à éxécuter des tâches planifiées" -#: common/models.py:2003 +#: common/models.py:2096 msgid "Enable event integration" msgstr "Activer l'intégration des évènements" -#: common/models.py:2004 +#: common/models.py:2097 msgid "Enable plugins to respond to internal events" msgstr "Autoriser les plugins à répondre aux évènements internes" -#: common/models.py:2010 +#: common/models.py:2103 msgid "Enable project codes" msgstr "Activer les codes projet" -#: common/models.py:2011 +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "Fonctionnalité d'inventaire" -#: common/models.py:2018 +#: common/models.py:2111 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:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2026 +#: common/models.py:2119 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "Période de l'inventaire automatique" -#: common/models.py:2034 +#: common/models.py:2127 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:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2042 +#: common/models.py:2135 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:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 msgid "Settings key (must be unique - case insensitive" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Afficher les composants suivis" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Afficher les composants suivis sur l'écran d'accueil" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Afficher les catégories suivies" -#: common/models.py:2126 +#: common/models.py:2219 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:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Afficher les dernières pièces" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "Afficher les derniers composants sur la page d'accueil" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2138 +#: common/models.py:2231 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:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "Afficher les dernières modifications du stock" -#: common/models.py:2144 +#: common/models.py:2237 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:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Afficher le stock faible" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "Afficher les articles en stock bas sur la page d'accueil" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "Afficher le stock épuisé" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "Afficher les stocks épuisés sur la page d'accueil" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Afficher le stock nécessaire" -#: common/models.py:2162 +#: common/models.py:2255 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:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "Afficher le stock expiré" -#: common/models.py:2168 +#: common/models.py:2261 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:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Afficher le stock périmé" -#: common/models.py:2174 +#: common/models.py:2267 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:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Afficher les constructions en attente" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Afficher les constructions en attente sur la page d'accueil" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Afficher les constructions en retard" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "Afficher les constructions en retard sur la page d'accueil" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "Afficher les commandes en suspens" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "Afficher les commandes en suspens sur la page d'accueil" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Afficher les commandes en retard" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "Afficher les commandes en retard sur la page d'accueil" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "Afficher les envois en suspens" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "Afficher les envois en suspens sur la page d'accueil" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Afficher les envois en retard" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "Afficher les envois en retard sur la page d'accueil" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Afficher les nouvelles" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Afficher les nouvelles sur la page d'accueil" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "Affichage du libellé en ligne" -#: common/models.py:2229 +#: common/models.py:2322 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:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "Imprimante d'étiquettes par défaut" -#: common/models.py:2237 +#: common/models.py:2330 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:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "Affichage du rapport en ligne" -#: common/models.py:2245 +#: common/models.py:2338 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:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Rechercher de pièces" -#: common/models.py:2252 +#: common/models.py:2345 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:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "Recherche du fournisseur de pièces" -#: common/models.py:2258 +#: common/models.py:2351 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:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "Rechercher les pièces du fabricant" -#: common/models.py:2264 +#: common/models.py:2357 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:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Masquer les pièces inactives" -#: common/models.py:2270 +#: common/models.py:2363 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:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "Rechercher des catégories" -#: common/models.py:2276 +#: common/models.py:2369 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:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Rechercher dans le stock" -#: common/models.py:2282 +#: common/models.py:2375 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:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Cacher les pièces indisponibles" -#: common/models.py:2289 +#: common/models.py:2382 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:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Chercher des Emplacements" -#: common/models.py:2296 +#: common/models.py:2389 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:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Rechercher les entreprises" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "Afficher les entreprises dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Rechercher les commandes de construction" -#: common/models.py:2308 +#: common/models.py:2401 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:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Rechercher des bons de commande" -#: common/models.py:2314 +#: common/models.py:2407 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:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Exclure les bons de commande inactifs" -#: common/models.py:2321 +#: common/models.py:2414 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:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Rechercher les bons de commande" -#: common/models.py:2328 +#: common/models.py:2421 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:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "Exclure les bons de commande inactives" -#: common/models.py:2335 +#: common/models.py:2428 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:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "Rechercher les commandes retournées" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "Résultats de l'aperçu de la recherche" -#: common/models.py:2357 +#: common/models.py:2450 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:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "Recherche Regex" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "Afficher la quantité dans les formulaires" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "Afficher la quantité disponible dans certains formulaires" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "La touche Echap ferme les formulaires" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "Utilisez la touche Echap pour fermer les formulaires modaux" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Barre de navigation fixe" -#: common/models.py:2388 +#: common/models.py:2481 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:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Format de date" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "Format préféré pour l'affichage des dates" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Planification des pièces" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "Afficher les informations de planification des pièces" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventaire des pièces" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "Longueur de la chaîne dans les Tableau" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" -msgstr "" +msgstr "Longueur maximale des chaînes affichées dans les tableaux" -#: common/models.py:2429 -msgid "Default part label template" -msgstr "" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Utilisateur" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Prix" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Actif" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "Ce webhook (lien de rappel HTTP) est-il actif" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "Jeton" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "Jeton d'accès" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "ID message" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "Hôte" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Entête" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Corps" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "Endpoint à partir duquel ce message a été reçu" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "Id" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titre" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Lien" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Publié" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Résumé" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "Lu" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "Cette nouvelle a-t-elle été lue ?" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "Cette nouvelle a-t-elle été lue ?" msgid "Image" msgstr "Image" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "Fichier image" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Symbole" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "Symbole d'unité facultatif" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Définition" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "Définition de l'unité" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Pièce jointe" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Fichier manquant" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Lien externe manquant" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Sélectionnez un fichier à joindre" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Commentaire" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "{verbose_name} annulé" msgid "A order that is assigned to you was canceled" msgstr "Une commande qui vous est assignée a été annulée" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "Articles reçus" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "Erreur déclenchée par le plugin" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "En cours d'exécution" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "Tâches en attente" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "Tâches planifiées" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "Tâches échouées" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "ID de la tâche" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "ID unique de la tâche" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "Verrouillé" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "Heure verrouillé" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "Nom de la tâche" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "Fonction" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "Nom de la fonction" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "Arguments" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "Arguments tâche" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "Mots-clés Arguments" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "Mots-clés arguments tâche" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Nom du fichier" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Un domaine vide n'est pas autorisé." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Nom de domaine invalide : {domain}" @@ -3766,402 +4092,432 @@ msgstr "Pièces importées" msgid "Previous Step" msgstr "Étape précédente" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "La pièce est active" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "Le fabricant est actif" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "Le fournisseur de la pièce est active" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "La pièce interne est active" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "Le fournisseur est actif" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Société" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Entreprises" + +#: company/models.py:117 msgid "Company description" msgstr "Description de la société" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "Description de la société" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Site web" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "Site Web de la société" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Numéro de téléphone" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Numéro de téléphone de contact" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Adresse e-mail de contact" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Contact" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Point de contact" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Lien externe vers les informations de l'entreprise" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "Cette entreprise est-elle active ?" -#: company/models.py:165 -msgid "is customer" -msgstr "est client" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Vendez-vous des objets à cette entreprise?" -#: company/models.py:171 -msgid "is supplier" -msgstr "est fournisseur" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Est-ce que vous achetez des articles à cette entreprise?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "est fabricant" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Cette entreprise fabrique-t-elle des pièces?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" 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:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Société" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Adresse" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adresses" + +#: company/models.py:372 msgid "Select company" msgstr "Sélectionner une entreprise" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "Intitulé de l'adresse" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "Titre décrivant la saisie de l'adresse" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "Adresse principale" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "Sélectionner comme adresse principale" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Ligne 1" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "Adresse" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Ligne 2" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "Seconde ligne d'adresse" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Code postal" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "Ville / Région" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "Code postal Ville / Région" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "État / Province" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "État ou province" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "Pays" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "Pays" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "Notes du livreur" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "Instructions pour le livreur" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "Notes pour la livraison interne" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "Notes internes pour la livraison" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "Lien vers les informations de l'adresse (externe)" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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 "Fabricant" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Fabricant" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Sélectionner un fabricant" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "Nom du paramètre" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Valeur" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Valeur du paramètre" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Unités" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Unités du paramètre" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Pièce fournisseur" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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: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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Fournisseur" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Sélectionner un fabricant" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "Lien de la pièce du fournisseur externe" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "coût de base" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2424 -msgid "Packaging" -msgstr "Conditionnement" - -#: company/models.py:866 +#: company/models.py:853 msgid "Part packaging" msgstr "Conditionnement de l'article" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "Nombre de paquet" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "plusieurs" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "Commande multiple" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "Quantité disponible auprès du fournisseur" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "Disponibilité mise à jour" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "Date de dernière mise à jour des données de disponibilité" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "Devise par défaut utilisée pour ce fournisseur" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "Supprimer la société" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ 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: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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Client" @@ -4249,19 +4605,12 @@ msgstr "Client" msgid "Uses default currency" msgstr "Utiliser la devise par défaut" -#: 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 "Adresse" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Téléphone" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "Créer une nouvelle pièce fournisseur" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Nouvelle pièce fournisseur" @@ -4311,7 +4660,7 @@ msgstr "Pièces du fabricant" msgid "Create new manufacturer part" msgstr "Créer une nouvelle pièce de fabricant" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Nouvelle pièce de fabricant" @@ -4325,7 +4674,7 @@ msgstr "Stock fournisseur" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Nouvelle commande achat" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ msgstr "Fabricants" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Article de la commande" @@ -4435,7 +4784,8 @@ 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:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Pièces Internes" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ msgstr "Fournisseurs" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Paramètres" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nouveau paramètre" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "Articles en stock assignés" msgid "Contacts" msgstr "" -#: company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adresses" - -#: 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 "Pièce fournisseur" - #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4511,7 +4852,7 @@ msgstr "Actions de la pièce du fournisseur" #: 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Commander un composant" @@ -4544,12 +4885,12 @@ msgstr "Supprimer la pièce du fournisseur" 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:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ 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:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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:207 -#: templates/js/translated/stock.js:537 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Nouvel article de stock" @@ -4582,29 +4923,33 @@ msgstr "Information sur les prix" msgid "Add Price Break" msgstr "Ajouter un prix de rupture" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Éléments en stock" @@ -4630,10 +4975,6 @@ msgstr "Clients" msgid "New Customer" msgstr "Nouveaux Clients" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Entreprises" - #: company/views.py:52 msgid "New Company" msgstr "Nouvelle Entreprise" @@ -4642,48 +4983,228 @@ msgstr "Nouvelle Entreprise" msgid "Placed" msgstr "Placé" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "Données" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "Erreurs" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "Valide" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Inconnu" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "Impression" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "Aucun média" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "Déconnecté" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "Imprimante Etiquette" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "Impression directe des étiquettes pour divers articles." -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "Emplacement Imprimante" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "Porter de l'imprimante sur un emplacement spécifique" @@ -4723,10 +5244,6 @@ msgstr "Aucune erreur" msgid "Initialized" msgstr "Initialisé" -#: machine/models.py:110 -msgid "Errors" -msgstr "Erreurs" - #: machine/models.py:117 msgid "Machine status" msgstr "Statut de la machine" @@ -4743,78 +5260,78 @@ msgstr "Configuration de la machine" msgid "Config type" msgstr "Type de configuration" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Prix Total" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Statut de la commande" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "Possède un Tarif" -#: order/api.py:240 +#: order/api.py:228 msgid "No matching purchase order found" msgstr "Aucun bon de commande correspondant n'a été trouvé" -#: 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Commande" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "Commande Complétée" -#: order/api.py:462 +#: order/api.py:450 msgid "Order Pending" msgstr "Commande En Attente" -#: order/api.py:1509 order/models.py:380 order/models.py:1432 -#: order/models.py:1541 order/templates/order/order_base.html:9 +#: order/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 msgid "Purchase Order" msgstr "Commande d’achat" -#: 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "Retour de commande" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "Prix total pour cette commande" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "Devise de la commande" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "Description de la commande (facultatif)" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Lien vers une page externe" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "Adresse de l'entreprise pour cette commande" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Référence de la commande" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "Statut de la commande d'achat" -#: order/models.py:487 +#: order/models.py:493 msgid "Company from which the items are being ordered" msgstr "Société de laquelle les articles sont commandés" -#: order/models.py:498 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1702 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "Référence du fournisseur" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "Code de référence de la commande fournisseur" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "reçu par" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Date d'émission" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "Date d'émission de la commande" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "Date à laquelle la commande a été complété" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "La quantité doit être un nombre positif" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "Société à laquelle les articles sont vendus" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "Référence client " -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: 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:978 +#: order/models.py:1029 msgid "shipped by" msgstr "expédié par" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 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:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "Contexte" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "Prix unitaire" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "supprimé" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Reçu" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "Prix d'achat unitaire" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "Où l'Acheteur veut-il stocker cet article ?" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 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:1579 +#: order/models.py:1642 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:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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:1606 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Prix de vente unitaire" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "Quantité expédiée" -#: order/models.py:1708 +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "Date d'expédition" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Date de Livraison" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "Vérifié par" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "Envoi" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "Numéro d'expédition" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "N° de suivi" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "Information de suivi des colis" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "N° de facture" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "Numéro de référence de la facture associée" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "Le colis a déjà été envoyé" -#: order/models.py:1772 +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "L'expédition n'a pas d'articles en stock alloués" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "L'article de stock n'a pas été assigné" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "Impossible d'allouer le stock à une ligne sans pièce" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "Ligne" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Article" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "Statut du retour de commande" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 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:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:643 +#: order/serializers.py:742 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:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "Devise du prix de vente" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 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:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "Les numéros de série suivants sont déjà alloués" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Perdu" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Retourné" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "En Cours" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Retour" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Réparer" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Remplacer" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Remboursement" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Refuser" @@ -5426,87 +5987,93 @@ msgid "Edit order" msgstr "Modifier la commande" #: 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 "Annuler la commande" - -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Annuler la commande" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Finaliser la commande" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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:115 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Description de la commande" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Incomplet" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "Dupliquer la sélection" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Supprimer la ligne" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: templates/js/translated/return_order.js:308 #: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "Référence client" -#: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: templates/js/translated/return_order.js:380 #: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Coût total" -#: order/templates/order/return_order_base.html:259 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "Détails de la Commande" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" 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 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Actions" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "ID de composant" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Nom de l'article" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Description pièce" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Révision" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Mots-clés" @@ -5815,7 +6369,8 @@ msgstr "Image pièce" msgid "Category ID" msgstr "ID catégorie" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "Nom catégorie" @@ -5827,11 +6382,11 @@ msgstr "ID Emplacement par défaut" msgid "Default Supplier ID" msgstr "ID Fournisseur par défaut" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variante de" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Stock Minimum" @@ -5839,169 +6394,183 @@ msgstr "Stock Minimum" msgid "Used In" msgstr "Utilisé pour" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "Construction" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "Coût minimal" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "Coût maximal" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "Chemin catégorie" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Pièces" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "Profondeur" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "Valide" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Catégorie" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "Utilise" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Emplacement par défaut" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Stock total" @@ -6010,1042 +6579,1144 @@ msgstr "Stock total" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 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:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: 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:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Structurel" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Mots-clés par défaut" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Nom de l'article" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Est-ce que cette pièce est active ?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Création Utilisateur" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "Propriétaire responsable de cette pièce" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "Coût minimum de vente" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "Notes additionnelles" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "Nom de test" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Activé" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "Requis" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "Valeur requise" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "Nom de test" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "Activé" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "Requis" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "Valeur requise" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "Données" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Valeur par Défaut" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Surplus" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Validée" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Copier les paramètres" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" -msgstr "" +msgstr "Notification de stock faible" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" -msgstr "" +msgstr "Vous êtes abonné aux notifications pour cette catégorie" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" -msgstr "" +msgstr "S'abonner aux notifications de cette catégorie" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Modifier la catégorie" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Modifier la catégorie" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Supprimer la catégorie" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Supprimer la catégorie" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Pièces (incluant les sous-catégories)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Nouvelle catégorie" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "Prise d'inventaire" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "Fabricants de composants" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Sélectionner un format de fichier" @@ -7354,15 +8029,15 @@ msgstr "Liste des composants" #: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 msgid "You are subscribed to notifications for this part" -msgstr "" +msgstr "Vous êtes abonné aux notifications pour cette pièce" #: part/templates/part/part_base.html:33 msgid "Subscribe to notifications for this part" -msgstr "" +msgstr "S'abonner aux notifications de cette pièce" #: 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Impression étiquette" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "Dernier numéro de série" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Rechercher un numéro de série" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Modifier" -#: part/templates/part/prices.html:28 stock/admin.py:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,15 +8340,15 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 msgid "Low Stock" -msgstr "" +msgstr "Stock minimum" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Aucune action spécifiée" msgid "No matching action found" msgstr "Aucune action correspondante trouvée" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Aucune correspondance trouvée pour les données du code-barres" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Correspondance trouvée pour les données du code-barres" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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 "Contributeurs d'InvenTree" +#: plugin/builtin/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "Notifications InvenTree" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "Extension Intégrée" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8294,7 +9007,7 @@ msgstr "" #: plugin/serializers.py:101 msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "" +msgstr "Identifiant de version du plugin. Laissez vide pour la dernière version." #: plugin/serializers.py:106 msgid "Confirm plugin installation" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "Aucun objet valide n'a été fourni au modèle" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Nom du modèle" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Modèle de nom de fichier" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Filtres" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Largeur [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "Largeur de l'étiquette, spécifiée en mm" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Hauteur [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "Hauteur de l'étiquette, spécifiée en mm" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "Extrait " -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "Elément" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "Numéro de série" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "Résultat" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Numéro de série" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "Sélectionner un propriétaire" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 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:700 +#: stock/models.py:721 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:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 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:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "Les numéros de série existent déjà" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "Entrez le nombre d'articles en stock à sérialiser" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 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:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "En quarantaine" msgid "Legacy stock tracking entry" msgstr "Ancienne entrée de suivi de stock" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Article en stock créé" @@ -9431,7 +10173,7 @@ msgstr "Séparer de l'élément parent" msgid "Split child item" msgstr "Fractionner l'élément enfant" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Articles de stock fusionnés" @@ -9451,7 +10193,7 @@ msgstr "Sortie de l'ordre de construction terminée" 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 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Consommé par ordre de construction" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Assemblage" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" msgid "Navigate to next serial number" msgstr "Accéder au numéro de série suivant" -#: stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2380 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "Sélectionner la quantité à sérialiser et les numéros de série uniques." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "Autorisation refusée" @@ -9903,15 +10628,15 @@ msgstr "" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" -msgstr "" +msgstr "Pièces suivies" #: templates/InvenTree/index.html:52 msgid "Subscribed Categories" -msgstr "" +msgstr "Catégories favorites" #: templates/InvenTree/index.html:62 msgid "Latest Parts" -msgstr "" +msgstr "Dernières pièces" #: templates/InvenTree/index.html:77 msgid "BOM Waiting Validation" @@ -9919,7 +10644,7 @@ msgstr "" #: templates/InvenTree/index.html:106 msgid "Recently Updated" -msgstr "" +msgstr "Mis à jour récemment" #: templates/InvenTree/index.html:134 msgid "Depleted Stock" @@ -10056,7 +10781,7 @@ msgstr "" #: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" -msgstr "" +msgstr "Inscription" #: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "Chemin d'installation" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Supprimer" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10420,18 +11145,18 @@ msgstr "Paramètres Utilisateur" #: templates/InvenTree/settings/sidebar.html:9 msgid "Account" -msgstr "" +msgstr "Compte" #: templates/InvenTree/settings/sidebar.html:11 msgid "Display" -msgstr "" +msgstr "Affichage" #: 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/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "Paramètres du Compte" msgid "Change Password" msgstr "Changer le mot de passe" -#: templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Nom d'utilisateur" - -#: templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Prénom" - -#: templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Nom" - #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Les adresses de messagerie suivantes sont associées à votre compte :" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Confirmer" @@ -10818,17 +11531,17 @@ msgstr "" #: templates/account/logout.html:10 msgid "Are you sure you want to sign out?" -msgstr "" +msgstr "Voulez-vous vraiment vous déconnecter ?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 #: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 msgid "Return to Site" -msgstr "" +msgstr "Retourner au site" #: templates/account/password_reset.html:5 #: templates/account/password_reset.html:12 msgid "Password Reset" -msgstr "" +msgstr "Réinitialisation mot de passe" #: 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." @@ -10836,15 +11549,15 @@ msgstr "" #: templates/account/password_reset.html:23 msgid "Reset My Password" -msgstr "" +msgstr "Réinitialiser mon mot de passe" #: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." -msgstr "" +msgstr "Cette fonction est actuellement désactivée. Veuillez contacter un administrateur." #: templates/account/password_reset_from_key.html:7 msgid "Bad Token" -msgstr "" +msgstr "Mauvais jeton" #: templates/account/password_reset_from_key.html:11 #, python-format @@ -10853,7 +11566,7 @@ msgstr "" #: templates/account/password_reset_from_key.html:18 msgid "Change password" -msgstr "" +msgstr "Changer de mot de passe" #: templates/account/password_reset_from_key.html:22 msgid "Your password is now changed." @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Quantité requise" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Scanner le code-barres" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" -msgstr "" +msgstr "Dernier numéro de série" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Ajouter" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14200,7 +14986,7 @@ msgstr "" #: templates/socialaccount/login.html:24 msgid "Continue" -msgstr "" +msgstr "Continuer" #: templates/socialaccount/login.html:29 msgid "Invalid SSO Provider" @@ -14287,6 +15073,14 @@ msgstr "Paramètres de Messagerie" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Oui" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Droit défini" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Groupe" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Vue" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Droit de voir des éléments" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Droit d'ajouter des éléments" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Modifier" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Droit de modifier des élément" -#: users/models.py:413 +#: users/models.py:408 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 3d24e8f570..8e4e2ec79f 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "הזן תאריך סיום" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "הכנס סיסמה" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "הכנס סיסמה חדשה" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "אישור סיסמה" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "אשר סיסמה חדשה" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "אימייל (שנית)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "אישור כתובת אימייל" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "חובה לרשום את אותו אימייל בכל פעם." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "מספרים סידוריים לא נמצאו" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 +msgid "Danish" +msgstr "" + +#: InvenTree/locales.py:22 msgid "German" msgstr "גרמנית" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "יוונית" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "אנגלית" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "ספרדית" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "ספרדית (מקסיקנית)" -#: InvenTree/locales.py:26 -msgid "Farsi / Persian" -msgstr "" - #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 +msgid "Farsi / Persian" +msgstr "" + +#: InvenTree/locales.py:29 +msgid "Finnish" +msgstr "" + +#: InvenTree/locales.py:30 msgid "French" msgstr "צרפתית" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "עברית" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "איטלקית" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "יפנית" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "קוריאנית" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "הולנדית" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "נורווגית" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "פולנית" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "רוסית" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "שוודית" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "תאילנדית" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "טורקית" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "ווייטנאמית" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 "שם הקובץ מכיל תו '{c}' שאינו חוקי" - -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "שם" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "תיאור" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "מקור" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "שם קובץ" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "מידע אודות המערכת" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "מקט" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "מקור הבנייה" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "רכיב" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "בחר רכיב לבנייה" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "כמות בניה" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "קישור חיצוני" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "כמות" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "בהמתנה" @@ -1540,15 +1677,21 @@ msgstr "בהמתנה" msgid "Production" msgstr "ייצור" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "הושלם" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "משתמש" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "קישור" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "קובץ מצורף" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "קובץ חסר" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "חסר קישור חיצוני" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "בחר קובץ לצירוף" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "הערה" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "שם קובץ" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "מוקם" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "אבד" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "הוחזר" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "לא פורטה הפעולה" msgid "No matching action found" msgstr "פעולה מבוקשת לא נמצאה" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "אשר" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 441116f3e3..14357356cf 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "तारीख दर्ज करें" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "पास वर्ड दर्ज करें" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "नया पासवर्ड दर्ज करें" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "पासवर्ड की पुष्टि करें" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "नए पासवर्ड की पुष्टि करें" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "पुराना पासवर्ड" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "कनेक्शन त्रुटि" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 12445a123e..236cf4fc49 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-09 22:03\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API funkciót nem találom" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Nincs jogosultságod az adatok megtekintéséhez" @@ -52,30 +52,34 @@ msgstr "Hibás mennyiség ({exc})" msgid "Error details can be found in the admin panel" msgstr "A hiba részleteit megtalálod az admin panelen" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Dátum megadása" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Megjegyzések" @@ -88,258 +92,270 @@ msgstr "A(z) '{name}' érték nem a szükséges minta szerinti" msgid "Provided value does not match required pattern: " msgstr "A megadott érték nem felel meg a szükséges mintának: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Jelszó megadása" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Új jelszó megadása" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Jelszó megerősítése" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Új jelszó megerősítése" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Régi jelszó" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (újra)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Email cím megerősítés" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Mindig ugyanazt az email címet kell beírni." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "MFA regisztráció nincs engedélyezve." + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "A megadott elsődleges email cím nem valós." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "A megadott email domain nincs jóváhagyva." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Regisztráció le van tiltva." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Üres sorozatszám" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Duplikált sorozatszám" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Hibás tartomány: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Csoport tartomány {group} több mint az engedélyezett ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Hibás csoport-sor: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Nem található sorozatszám" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Az egyedi sorozatszámok számának ({len(serials)}) meg kell egyeznie a mennyiséggel ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "HTML tag-ek eltávolítása ebből az értékből" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Csatlakozási hiba" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "A kiszolgáló érvénytelen státuszkóddal válaszolt" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Kivétel történt" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "A kiszolgáló érvénytelen Content-Length értéket adott" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "A kép mérete túl nagy" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "A kép letöltés meghaladja a maximális méretet" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "A kiszolgáló üres választ adott" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "A megadott URL nem egy érvényes kép fájl" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "Arab" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bolgár" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Cseh" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Dán" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Német" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Görög" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Angol" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spanyol" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spanyol (Mexikói)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "Észt" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Fárszi/Perzsa" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finn" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Francia" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Héber" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hindi" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Magyar" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Olasz" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japán" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Koreai" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "Litván" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Holland" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norvég" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Lengyel" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugál" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugál (Brazíliai)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Román" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Orosz" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Szlovák" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Szlovén" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Szerb" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Svéd" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Tháj" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Török" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "Ukrán" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnámi" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Kínai (egyszerűsített)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Kínai (Hagyományos)" @@ -348,257 +364,165 @@ msgstr "Kínai (Hagyományos)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Bejelentkezés" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Email" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Hiba a plugin validálása közben" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "A meta adatnak egy python dict objektumnak kell lennie" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Plugin meta adatok" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "JSON meta adat mező, külső pluginok számára" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Helytelenül formázott minta" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Ismeretlen formátum kulcs lett megadva" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Hiányzó formátum kulcs" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Az azonosító mező nem lehet üres" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Az azonosítónak egyeznie kell a mintával" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Azonosító szám túl nagy" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Hiányzó fájl" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Hiányzó külső link" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Melléklet" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Válaszd ki a mellekelni kívánt fájlt" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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 "Link" - -#: InvenTree/models.py:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Link külső URL-re" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Megjegyzés" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Leírás, bővebb infó" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "feltöltés dátuma" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "A fájlnév nem lehet üres" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Érvénytelen melléklet mappa" - -#: 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:668 -msgid "Filename missing extension" -msgstr "Fájlnév kiterjesztése hiányzik" - -#: 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:684 -msgid "Error renaming file" -msgstr "Hiba a fájl átnevezésekor" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikált nevek nem lehetnek ugyanazon szülő alatt" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Név" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Leírás" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "szülő" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Elérési út" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Markdown megjegyzések (opcionális)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Vonalkód adat" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Harmadik féltől származó vonalkód adat" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Vonalkód hash" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Egyedi vonalkód hash" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Létező vonalkód" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Kiszolgálóhiba" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Pénznem" msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Felhasználónév" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Keresztnév" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "A felhasználó keresztneve" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Vezetéknév" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "A felhasználó vezetékneve" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "A felhasználó e-mail címe" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "Személyzet" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "Rendszergazda" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Aktív" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "Aktív a felhasználói fiók" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Önnek nincs joga változtatni ezen a felhasználói szerepkörön." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Csak a superuser-ek hozhatnak létre felhasználókat" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "A fiókod sikeresen létrejött." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Kérlek használd a jelszó visszállítás funkciót a belépéshez" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Üdvözlet az InvenTree-ben" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Fájlnév" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Érvénytelen érték" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Adat fájl" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Fájl kiválasztása feltöltéshez" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Nem támogatott fájltípus" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Fájl túl nagy" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Nem találhatók oszlopok a fájlban" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Nincsenek adatsorok a fájlban" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Nincs adatsor megadva" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Nincs adat oszlop megadva" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Szükséges oszlop hiányzik: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplikált oszlop: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Távoli kép" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "A távoli kép URL-je" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Háttér folyamat ellenőrzés sikertelen" @@ -702,27 +679,27 @@ msgstr "Email backend nincs beállítva" msgid "InvenTree system health checks failed" msgstr "InvenTree rendszer állapotának ellenőrzése sikertelen" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Ismeretlen adatbázis" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Érvénytelen fizikai mértékegység" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Túlszállítás nem lehet negatív" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Túlszállítás nem lehet több mint 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Érvénytelen érték a túlszállításra" @@ -750,62 +727,63 @@ msgstr "Rendszerinformáció" msgid "About InvenTree" msgstr "Verzió információk" -#: build/api.py:255 +#: build/api.py:247 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:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Opcionális" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Követett" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Elérhető" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Gyártási utasítás" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Gyártási utasítás" msgid "Build Orders" msgstr "Gyártási utasítások" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Hibás választás a szülő gyártásra" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "Meg kell adni felelős felhasználót vagy csoportot" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Gyártási rendelés alkatrész nem változtatható" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Azonosító" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Gyártás rövid leírása (opcionális)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Szülő gyártás" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Alkatrész" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Válassz alkatrészt a gyártáshoz" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Vevői rendelés azonosító" -#: build/models.py:252 +#: build/models.py:284 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:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Forrás hely" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Cél hely" -#: build/models.py:270 +#: build/models.py:302 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:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Gyártási mennyiség" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Gyártandó készlet tételek száma" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Kész tételek" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Elkészült készlet tételek száma" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Gyártási állapot" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: 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:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Befejezés cél dátuma" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Befejezés dátuma" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "elkészítette" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Indította" -#: build/models.py:330 +#: build/models.py:362 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:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Felelős" -#: build/models.py:339 +#: build/models.py:371 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:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Külső link" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Link külső URL-re" + +#: build/models.py:381 msgid "Build Priority" msgstr "Priorítás" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Gyártási utasítás priorítása" msgid "Project Code" msgstr "Projektszám" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Projekt kód a gyártáshoz" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 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 +#: build/models.py:661 #, 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:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:853 +#: build/models.py:961 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:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 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:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, 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:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Gyártás objektum" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,415 +1124,553 @@ msgstr "Gyártás objektum" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1503 +#: build/models.py:1601 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:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Cél készlet tétel" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Alkatrész neve" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "Projekt kód címke" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:169 +#: build/serializers.py:179 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:173 +#: build/serializers.py:183 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:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:276 +#: build/serializers.py:286 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:279 +#: build/serializers.py:289 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:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Hely" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "Legyártott készlet helye" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:316 +#: build/serializers.py:326 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 +#: build/serializers.py:341 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 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 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 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Állapot" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "Kimenetek befejezése akkor is ha a készlet nem\n" "lett teljesen lefoglalva" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "Lefoglalt készlet felhasználása" -#: build/serializers.py:613 +#: build/serializers.py:650 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:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:681 +#: build/serializers.py:718 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:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:713 +#: build/serializers.py:750 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:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:788 +#: build/serializers.py:828 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:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:838 +#: build/serializers.py:878 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:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:907 +#: build/serializers.py:947 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:914 +#: build/serializers.py:954 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:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:1010 +#: build/serializers.py:1050 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:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:1016 +#: build/serializers.py:1056 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:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1050 +#: build/serializers.py:1090 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:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Gyártói cikkszám" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "Hely neve" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Csomagolás" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "Alkatrész ID" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "Alkatrész IPN" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Alkatrész leírása" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Sorozatszám" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "Lefoglalt mennyiség" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Elérhető mennyiség" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Követésre kötelezett" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "Változatok" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Lefoglalt készlet" -#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Rendelve" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Elérhető készlet" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External Stock" +msgstr "Külső raktárkészlet" + #: 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Függőben" @@ -1541,15 +1678,21 @@ msgstr "Függőben" msgid "Production" msgstr "Folyamatban" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "Felfüggesztve" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Kész" @@ -1577,8 +1720,8 @@ msgstr "Alkatrész bélyegkép" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Vonalkód műveletek" @@ -1589,7 +1732,7 @@ msgstr "Vonalkód műveletek" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR kód megjelenítése" @@ -1600,9 +1743,9 @@ msgstr "QR kód megjelenítése" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Vonalkód leválasztása" @@ -1613,7 +1756,7 @@ msgstr "Vonalkód leválasztása" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Vonalkód hozzárendelése" @@ -1637,87 +1780,100 @@ msgid "Edit Build" msgstr "Gyártás szerkesztése" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Gyártás törlése" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "Gyártás másolása" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Gyártás törlése" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Gyártás törlése" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Gyártás befejezése" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Gyártás leírása" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Ehhez a gyártási utasításhoz nem készült kimenet" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Gyártási utasítás elkészültnek jelölhető" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Befejezetlen gyártási kimenetek vannak" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Szükséges gyártási mennyiség még nincs meg" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 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/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Cél dátum" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Ez a gyártás %(target)s-n volt esedékes" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Késésben" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Befejezett kimenetek" -#: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1727,31 +1883,39 @@ msgstr "Befejezett kimenetek" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Vevői rendelés" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Kiállította" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Prioritás" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "Gyártási utasítás törlése" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "Gyártási utasítás QR kódja" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "Vonalkód gyártáshoz rendelése" @@ -1767,8 +1931,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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Cél" @@ -1780,23 +1944,23 @@ msgstr "A cél hely nincs megadva" msgid "Allocated Parts" msgstr "Lefoglalt alkatrészek" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" 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:190 -#: templates/js/translated/build.js:2199 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Létrehozva" @@ -1805,8 +1969,8 @@ 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:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Kész" @@ -1814,13 +1978,13 @@ msgstr "Kész" msgid "Build not complete" msgstr "Gyártás nincs kész" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Alárendelt gyártások" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Készlet foglalása gyártáshoz" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1842,7 +2006,7 @@ msgstr "Automata foglalás" msgid "Manually allocate stock to build" msgstr "Manuális készlet foglalás a gyártáshoz" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Készlet foglalása" @@ -1871,15 +2035,19 @@ msgstr "Új gyártási kimenet létrehozása" msgid "New Build Output" msgstr "Új gyártási kimenet" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "Felhasznált készlet" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Befejezett gyártási kimenetek" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1889,25 +2057,25 @@ msgstr "Befejezett gyártási kimenetek" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Mellékletek" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Gyártási megjegyzések" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "Lefoglalás kész" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "Minden sor rendben lefoglalva" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Új gyártási utasítás" @@ -1915,23 +2083,50 @@ msgstr "Új gyártási utasítás" msgid "Build Order Details" msgstr "Gyártási utasítás részletei" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Befejezetlen kimenetek" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" -msgstr "" +msgstr "Érvénytelen valuta kód" #: common/currency.py:134 msgid "Duplicate currency code" -msgstr "" +msgstr "Létező valuta kód" #: common/currency.py:139 msgid "No valid currency codes provided" -msgstr "" +msgstr "Hiányzó érvényes valuta kód" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Nincsen plugin" @@ -1973,1606 +2168,1662 @@ msgstr "{name.title()} Fájl" msgid "Select {name} file to upload" msgstr "{name} fájl kiválasztása feltöltéshez" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Frissítve" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Legutóbbi frissítés időpontja" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "A site URL blokkolva van a konfigurációban" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Egyedi projektszám" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Projekt leírása" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "A projektért felelős felhasználó vagy csoport" -#: common/models.py:764 +#: common/models.py:783 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:768 +#: common/models.py:787 msgid "Settings value" msgstr "Beállítás értéke" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "A kiválasztott érték nem egy érvényes lehetőség" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Az érték bináris kell legyen" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Az érték egész szám kell legyen" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Kulcs string egyedi kell legyen" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Nincs csoport" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Újraindítás szükséges" -#: common/models.py:1214 +#: common/models.py:1233 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:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Függőben levő migrációk" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "Függőben levő adatbázis migrációk" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Kiszolgáló példány neve" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "String leíró a kiszolgáló példányhoz" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Példány név használata" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "Példány név használata a címsorban" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Verzió infók megjelenítésének tiltása" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "Verzió infók megjelenítése csak admin felhasználóknak" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Cég neve" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Belső cégnév" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Kiindulási URL" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "Kiindulási URL a kiszolgáló példányhoz" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Alapértelmezett pénznem" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "Válassz alap pénznemet az ár számításokhoz" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" -msgstr "" +msgstr "Támogatott valuták" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" -msgstr "" +msgstr "Támogatott valuták listája" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "Árfolyam frissítési gyakoriság" -#: common/models.py:1273 +#: common/models.py:1292 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:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "nap" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "Árfolyam frissítő plugin" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "Kiválasztott árfolyam frissítő plugin" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Letöltés URL-ről" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Letöltési méret korlát" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "Maximum megengedett letöltési mérete a távoli képeknek" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "Felhasznált User-agent az URL-ről letöltéshez" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "Erős URL validáció" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "Sablon specifikáció igénylése az URL validálásnál" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Megerősítés igénylése" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Kérjen felhasználói megerősítést bizonyos műveletekhez" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Fa mélység" -#: common/models.py:1322 +#: common/models.py:1341 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:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Frissítés keresés gyakorisága" -#: common/models.py:1329 +#: common/models.py:1348 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:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Automatikus biztonsági mentés" -#: common/models.py:1336 +#: common/models.py:1355 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:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Automata biztonsági mentés gyakorisága" -#: common/models.py:1342 +#: common/models.py:1361 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:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "Feladat törlési gyakoriság" -#: common/models.py:1350 +#: common/models.py:1369 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:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "Hibanapló törlési gyakoriság" -#: common/models.py:1359 +#: common/models.py:1378 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:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "Értesítés törlési gyakoriság" -#: common/models.py:1368 +#: common/models.py:1387 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:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Vonalkód támogatás" -#: common/models.py:1376 +#: common/models.py:1395 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:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "Vonalkód beadási késleltetés" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "Webkamerás vonalkód olvasás" -#: common/models.py:1389 +#: common/models.py:1408 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:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "Alkatrész változatok" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "Alkatrész változat vagy verziószám tulajdonság használata" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "IPN reguláris kifejezés" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Többször is előforduló IPN engedélyezése" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "Azonos IPN használható legyen több alkatrészre is" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "IPN szerkesztésének engedélyezése" -#: common/models.py:1417 +#: common/models.py:1454 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:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Alkatrészjegyzék adatok másolása" -#: common/models.py:1423 +#: common/models.py:1460 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:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "Alkatrész paraméterek másolása" -#: common/models.py:1429 +#: common/models.py:1466 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:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "Alkatrész teszt adatok másolása" -#: common/models.py:1435 +#: common/models.py:1472 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:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Kategória paraméter sablonok másolása" -#: common/models.py:1441 +#: common/models.py:1478 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:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Sablon" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Gyártmány" -#: common/models.py:1453 +#: common/models.py:1490 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:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Összetevő" -#: common/models.py:1459 +#: common/models.py:1496 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:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Beszerezhető" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Értékesíthető" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Alkatrészek alapból eladhatók legyenek" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Virtuális" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Alkatrészek alapból virtuálisak legyenek" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Importálás megjelenítése a nézetekben" -#: common/models.py:1489 +#: common/models.py:1526 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:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Kapcsolódó alkatrészek megjelenítése" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Kezdeti készlet adatok" -#: common/models.py:1501 +#: common/models.py:1538 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:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Kezdeti beszállítói adatok" -#: common/models.py:1508 +#: common/models.py:1545 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:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Alkatrész név megjelenítés formátuma" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Formátum az alkatrész név megjelenítéséhez" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "Alkatrész kategória alapértelmezett ikon" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "Csak választható mértékegységek" -#: common/models.py:1528 +#: common/models.py:1566 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:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek min. száma" -#: common/models.py:1536 +#: common/models.py:1574 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:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek max. száma" -#: common/models.py:1549 +#: common/models.py:1587 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:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Beszállítói árazás használata" -#: common/models.py:1562 +#: common/models.py:1600 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:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Beszerzési előzmények felülbírálása" -#: common/models.py:1570 +#: common/models.py:1608 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:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Készlet tétel ár használata" -#: common/models.py:1578 +#: common/models.py:1616 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:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Készlet tétel ár kora" -#: common/models.py:1586 +#: common/models.py:1624 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:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Alkatrészváltozat árak használata" -#: common/models.py:1594 +#: common/models.py:1632 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:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Csak az aktív változatokat" -#: common/models.py:1601 +#: common/models.py:1639 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:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "Árazás újraszámítás gyakoriság" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "Árak automatikus frissítése ennyi nap után" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Belső árak" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Belső ár felülbírálása" -#: common/models.py:1624 +#: common/models.py:1662 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:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Címke nyomtatás engedélyezése a web felületről" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/models.py:1638 +#: common/models.py:1676 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:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Debug mód" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "Jelentési hibák naplózása" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "Jelentések generálása közben jelentkező hibák naplózása" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Lapméret" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Teszt riportok engedélyezése" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Teszt riportok előállításának engedélyezése" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Teszt riportok hozzáadása" -#: common/models.py:1676 +#: common/models.py:1714 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:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "Globálisan egyedi sorozatszámok" -#: common/models.py:1683 +#: common/models.py:1721 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:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Sorozatszámok automatikus kitöltése" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "Sorozatszámok automatikus kitöltése a formokon" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "Kimerült készlet törlése" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "Alapértelmezett művelet mikor a készlet tétel elfogy" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/models.py:1704 +#: common/models.py:1742 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:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/models.py:1723 +#: common/models.py:1761 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:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/models.py:1737 +#: common/models.py:1775 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:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "Beépített készlet megjelenítése" -#: common/models.py:1748 +#: common/models.py:1787 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:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "Tételek telepítésekor a darabjegyzék ellenőrzése" -#: common/models.py:1755 +#: common/models.py:1794 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:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/models.py:1771 +#: common/models.py:1810 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:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "Felelős tulajdonos szükséges" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "Minden rendeléshez felelőst kell rendelni" -#: common/models.py:1783 +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "Blokkolás a tesztek sikeres végrehajtásáig" -#: common/models.py:1785 +#: common/models.py:1844 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Nem lehet gyártási tételt befejezni amíg valamennyi kötelező teszt sikeres nem lett" -#: common/models.py:1791 +#: common/models.py:1850 msgid "Enable Return Orders" msgstr "Visszavétel engedélyezése" -#: common/models.py:1792 +#: common/models.py:1851 msgid "Enable return order functionality in the user interface" msgstr "Visszavételek engedélyezése a felületen" -#: common/models.py:1797 +#: common/models.py:1856 msgid "Return Order Reference Pattern" msgstr "Visszavétel azonosító minta" -#: common/models.py:1799 +#: common/models.py:1858 msgid "Required pattern for generating Return Order reference field" msgstr "Szükséges minta a visszavétel azonosító mező előállításához" -#: common/models.py:1811 +#: common/models.py:1870 msgid "Edit Completed Return Orders" msgstr "Befejezett visszavétel szerkesztése" -#: common/models.py:1813 +#: common/models.py:1872 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:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "Vevői rendelés azonosító minta" -#: common/models.py:1821 +#: common/models.py:1880 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:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "Vevői rendeléshez alapértelmezett szállítmány" -#: common/models.py:1834 +#: common/models.py:1893 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:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "Befejezett vevői rendelés szerkesztése" -#: common/models.py:1841 +#: common/models.py:1900 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:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/models.py:1857 +#: common/models.py:1916 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:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "Befejezett beszerzési rendelés szerkesztése" -#: common/models.py:1871 +#: common/models.py:1930 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:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "Beszerzési rendelések automatikus befejezése" -#: common/models.py:1879 +#: common/models.py:1938 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:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/models.py:1887 +#: common/models.py:1946 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/models.py:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/models.py:1893 +#: common/models.py:1952 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:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "SSO regisztráció engedélyezése" -#: common/models.py:1906 +#: common/models.py:1965 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:1912 +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 msgid "Email required" msgstr "Email szükséges" -#: common/models.py:1913 +#: common/models.py:2004 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/models.py:1918 +#: common/models.py:2009 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/models.py:1920 +#: common/models.py:2011 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:1926 +#: common/models.py:2017 msgid "Mail twice" msgstr "Email kétszer" -#: common/models.py:1927 +#: common/models.py:2018 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:1932 +#: common/models.py:2023 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/models.py:1933 +#: common/models.py:2024 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:1938 +#: common/models.py:2029 msgid "Allowed domains" msgstr "Engedélyezett domainek" -#: common/models.py:1940 +#: common/models.py:2031 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:1946 +#: common/models.py:2037 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/models.py:1947 -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:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" -#: common/models.py:1952 +#: common/models.py:2045 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/models.py:1953 +#: common/models.py:2046 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/models.py:1958 +#: common/models.py:2051 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/models.py:1960 +#: common/models.py:2053 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:1968 +#: common/models.py:2061 msgid "Check for plugin updates" msgstr "Plugin frissítések ellenőrzése" -#: common/models.py:1969 +#: common/models.py:2062 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:1975 +#: common/models.py:2068 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/models.py:1976 +#: common/models.py:2069 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:1982 +#: common/models.py:2075 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/models.py:1983 +#: common/models.py:2076 msgid "Enable plugins to integrate into navigation" msgstr "Navigációs integráció engedélyezése a pluginok számára" -#: common/models.py:1989 +#: common/models.py:2082 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/models.py:1990 +#: common/models.py:2083 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:1996 +#: common/models.py:2089 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/models.py:1997 +#: common/models.py:2090 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:2003 +#: common/models.py:2096 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/models.py:2004 +#: common/models.py:2097 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:2010 +#: common/models.py:2103 msgid "Enable project codes" msgstr "Projektszámok engedélyezése" -#: common/models.py:2011 +#: common/models.py:2104 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:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "Leltár funkció" -#: common/models.py:2018 +#: common/models.py:2111 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:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "Külső helyek nélkül" -#: common/models.py:2026 +#: common/models.py:2119 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:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "Automatikus leltár időpontja" -#: common/models.py:2034 +#: common/models.py:2127 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:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "Riport törlési gyakoriság" -#: common/models.py:2042 +#: common/models.py:2135 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:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "Felhasználók teljes nevének megjelenítése" -#: common/models.py:2050 +#: common/models.py:2143 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:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "Teszt állomás adatok engedélyezése" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "Tesztállomás adatok gyűjtésének teszt eredménybe gyűjtésének engedélyezése" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 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:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "Inaktív alkatrészek elrejtése" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Nem aktív alkatrészek elrejtése a kezdőlapon" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Értesítésre beállított alkatrészek megjelenítése" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Alkatrész értesítések megjelenítése a főoldalon" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Értesítésre beállított kategóriák megjelenítése" -#: common/models.py:2126 +#: common/models.py:2219 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:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Legújabb alkatrészek megjelenítése" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "Legújabb alkatrészek megjelenítése a főoldalon" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "Hibás alkatrészjegyzékek megjelenítése" -#: common/models.py:2138 +#: common/models.py:2231 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:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "Legfrissebb készlet változások megjelenítése" -#: common/models.py:2144 +#: common/models.py:2237 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:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Alacsony készlet megjelenítése" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "Alacsony készletek megjelenítése a főoldalon" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "Kimerült készlet megjelenítése" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "Kimerült készletek megjelenítése a főoldalon" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Gyártáshoz szükséges készlet megjelenítése" -#: common/models.py:2162 +#: common/models.py:2255 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:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "Lejárt készlet megjelenítése" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "Lejárt készletek megjelenítése a főoldalon" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Állott készlet megjelenítése" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "Álló készletek megjelenítése a főoldalon" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Függő gyártások megjelenítése" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Folyamatban lévő gyártások megjelenítése a főoldalon" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Késésben lévő gyártások megjelenítése" -#: common/models.py:2186 +#: common/models.py:2279 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:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "Kintlévő beszerzési rendelések megjelenítése" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "Kintlévő beszerzési rendelések megjelenítése a főoldalon" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Késésben lévő megrendelések megjelenítése" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "Késésben lévő megrendelések megjelenítése a főoldalon" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "Függő vevői rendelések megjelenítése" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "Függő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Késésben lévő vevői rendelések megjelenítése" -#: common/models.py:2210 +#: common/models.py:2303 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:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "Függő vevői szállítmányok megjelenítése" -#: common/models.py:2216 +#: common/models.py:2309 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:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Hírek megjelenítése" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Hírek megjelenítése a főoldalon" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "Beágyazott címke megjelenítés" -#: common/models.py:2229 +#: common/models.py:2322 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:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "Alapértelmezett címkenyomtató" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" msgstr "Melyik címkenyomtató legyen az alapértelmezett" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "Beágyazott riport megjelenítés" -#: common/models.py:2245 +#: common/models.py:2338 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:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Alkatrészek keresése" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "Alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "Beszállítói alkatrészek keresése" -#: common/models.py:2258 +#: common/models.py:2351 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:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "Gyártói alkatrészek keresése" -#: common/models.py:2264 +#: common/models.py:2357 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:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Inaktív alkatrészek elrejtése" -#: common/models.py:2270 +#: common/models.py:2363 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:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "Kategóriák keresése" -#: common/models.py:2276 +#: common/models.py:2369 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:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Készlet keresése" -#: common/models.py:2282 +#: common/models.py:2375 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:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Nem elérhető készlet tételek elrejtése" -#: common/models.py:2289 +#: common/models.py:2382 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:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Helyek keresése" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "Készlet helyek megjelenítése a keresési előnézetben" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Cégek keresése" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "Cégek megjelenítése a keresési előnézetben" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Gyártási utasítások keresése" -#: common/models.py:2308 +#: common/models.py:2401 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:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Beszerzési rendelések keresése" -#: common/models.py:2314 +#: common/models.py:2407 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:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktív beszerzési rendelések kihagyása" -#: common/models.py:2321 +#: common/models.py:2414 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:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Vevői rendelések keresése" -#: common/models.py:2328 +#: common/models.py:2421 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:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "Inaktív vevői rendelések kihagyása" -#: common/models.py:2335 +#: common/models.py:2428 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:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "Visszavétel keresése" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "Visszavételek megjelenítése a keresés előnézet ablakban" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "Inaktív visszavételek kihagyása" -#: common/models.py:2349 +#: common/models.py:2442 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:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "Keresési előnézet eredményei" -#: common/models.py:2357 +#: common/models.py:2450 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:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "Regex keresés" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "Reguláris kifejezések engedélyezése a keresésekben" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "Teljes szó keresés" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "A keresések csak teljes szóra egyező találatokat adjanak" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "Mennyiség megjelenítése a formokon" -#: common/models.py:2376 +#: common/models.py:2469 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:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "ESC billentyű zárja be a formot" -#: common/models.py:2382 +#: common/models.py:2475 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:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Rögzített menüsor" -#: common/models.py:2388 +#: common/models.py:2481 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:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Dátum formátum" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "Preferált dátum formátum a dátumok kijelzésekor" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Alkatrész ütemezés" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "Alkatrész ütemezési információk megjelenítése" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Alkatrész leltár" -#: common/models.py:2415 +#: common/models.py:2508 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:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "Táblázati szöveg hossz" -#: common/models.py:2423 +#: common/models.py:2516 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:2429 -msgid "Default part label template" -msgstr "Alapértelmezett alkatrész címke sablon" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "Az alapértelmezetten kiválasztott alkatrész címke sablon" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "Alapértelmezett készlet címke sablon" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "Az alapértelmezetten kiválasztott készlet címke sablon" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "Alapértelmezett készlethely címke sablon" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "Az alapértelmezetten kiválasztott készlethely címke sablon" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "Alapértelmezett gyártási tétel címke sablon" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "Az alapértelmezetten kiválasztott gyártási tétel címke sablon" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "Hibariportok fogadása" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "Értesítések fogadása a rendszerhibákról" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "Utoljára használt nyomtató gépek" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "Az utoljára használt nyomtató tárolása a felhasználóhoz" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Felhasználó" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Ár" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Aktív" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "Token" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Titok" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Fejléc" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Törzs" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "Azonosító" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Cím" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Link" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Közzétéve" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "Elolvasva" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "Elolvasva?" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3582,42 +3833,97 @@ msgstr "Elolvasva?" msgid "Image" msgstr "Kép" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "Képfájl" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "A mértékegységnek valós azonosítónak kell lennie" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "Egység neve" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Szimbólum" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "Opcionális mértékegység szimbólum" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definíció" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "Mértékegység definíció" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Melléklet" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Hiányzó fájl" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Hiányzó külső link" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Válaszd ki a mellekelni kívánt fájlt" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Megjegyzés" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "Fájl mérete" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "Fájlméret bájtban" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3636,7 +3942,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:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "Készlet érkezett" @@ -3652,79 +3958,99 @@ msgstr "Készlet érkezett vissza egy visszavétel miatt" msgid "Error raised by plugin" msgstr "Plugin hiba" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "Folyamatban" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "Folyamatban lévő feladatok" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "Ütemezett Feladatok" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "Hibás feladatok" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "Feladat ID" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "Egyedi feladat ID" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "Zárol" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "Zárolási idő" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "Feladat neve" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "Funkció" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "Funkció neve" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "Paraméterek" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "Feladat paraméterei" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "Kulcsszó paraméterek" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "Feladat kulcsszó paraméterek" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Fájlnév" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "Modell típusa" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Üres domain nem engedélyezett." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Érvénytelen domain név: {domain}" @@ -3767,402 +4093,432 @@ msgstr "Importált alkatrészek" msgid "Previous Step" msgstr "Előző lépés" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "Az alkatrész aktív" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "A Gyártó Aktív" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "A Szállítói Alkatrész Aktív" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "A saját alkatrész Aktív" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "A Beszállító Aktív" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Cég" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Cégek" + +#: company/models.py:117 msgid "Company description" msgstr "Cég leírása" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "A cég leírása" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Weboldal" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "Cég weboldala" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Telefonszám" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Kapcsolattartó telefonszáma" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Kapcsolattartó email címe" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Névjegy" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Kapcsolattartó" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Link a külső céginformációhoz" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "Ez a vállalat aktív?" -#: company/models.py:165 -msgid "is customer" -msgstr "vevő-e" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Értékesítesz alkatrészeket ennek a cégnek?" -#: company/models.py:171 -msgid "is supplier" -msgstr "beszállító-e" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Vásárolsz alkatrészeket ettől a cégtől?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "gyártó-e" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Gyárt ez a cég alkatrészeket?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" 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:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Cég" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Cím" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Címek" + +#: company/models.py:372 msgid "Select company" msgstr "Cég kiválasztása" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "Cím megnevezése" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "Címhez tartozó leírás, megnevezés" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "Elsődleges cím" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "Beállítás elsődleges címként" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "1. sor" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "Cím első sora" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "2. sor" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "Cím második sora" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Irányítószám" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "Város/Régió" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "Irányítószám város/régió" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "Állam/Megye" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "Állam vagy megye" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "Ország" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "Cím országa" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "Megjegyzés a futárnak" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "Futárnak szóló megjegyzések" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "Belső szállítási megjegyzések" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "Szállítási megjegyzések belső használatra" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "Link a címinformációkhoz (külső)" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Gyártó" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2053 -msgid "MPN" -msgstr "MPN (Gyártói cikkszám)" - -#: company/models.py:508 -msgid "Manufacturer Part Number" -msgstr "Gyártói cikkszám" - -#: company/models.py:515 -msgid "URL for external manufacturer part link" -msgstr "URL link a gyártói alkatrészhez" - -#: company/models.py:524 -msgid "Manufacturer part description" -msgstr "Gyártói alkatrész leírása" - -#: company/models.py:581 company/models.py:608 company/models.py:824 +#: company/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Kiindulási alkatrész" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Válassz alkatrészt" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Gyártó" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Gyártó kiválasztása" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "MPN (Gyártói cikkszám)" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "URL link a gyártói alkatrészhez" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "Gyártói alkatrész leírása" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "Paraméter neve" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Érték" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Paraméter értéke" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Mértékegység" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Paraméter mértékegység" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Beszállítói alkatrész" + +#: company/models.py:719 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:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "Csomagolási mennyiségnek nullánál többnek kell lennie" -#: company/models.py:753 +#: company/models.py:740 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: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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Beszállító" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "Ez a szállítói termék aktív?" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Gyártói alkatrész kiválasztása" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "URL link a beszállítói alkatrészhez" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Megjegyzés" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "alap költség" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2424 -msgid "Packaging" -msgstr "Csomagolás" - -#: company/models.py:866 +#: company/models.py:853 msgid "Part packaging" msgstr "Alkatrész csomagolás" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "Csomagolási mennyiség" -#: company/models.py:873 +#: company/models.py:860 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:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "többszörös" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "Többszörös rendelés" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "Beszállítónál elérhető mennyiség" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "Elérhetőség frissítve" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "Utolsó elérhetőségi adat frissítés" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "Beszállító által használt alapértelmezett pénznem" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4173,8 +4529,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "Inaktív" @@ -4213,7 +4569,7 @@ msgstr "Cég törlése" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "Alkatrész képe" @@ -4232,17 +4588,17 @@ 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: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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Vevő" @@ -4250,19 +4606,12 @@ msgstr "Vevő" msgid "Uses default currency" msgstr "Alapértelmezett pénznemet használja" -#: 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 "Cím" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefonszám" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "Kép eltávolítása" @@ -4271,19 +4620,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:530 +#: part/templates/part/part_base.html:539 #: 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:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "Kép feltöltése" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "Kép letöltése" @@ -4299,7 +4648,7 @@ msgstr "Új beszállítói alkatrész létrehozása" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Új beszállítói alkatrész" @@ -4312,7 +4661,7 @@ msgstr "Gyártói alkatrészek" msgid "Create new manufacturer part" msgstr "Új gyártói alkatrész létrehozása" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Új gyártói alkatrész" @@ -4326,7 +4675,7 @@ msgstr "Beszállítói készlet" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4349,7 +4698,7 @@ msgstr "Új beszerzési rendelés" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4421,7 +4770,7 @@ msgstr "Gyártók" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Alkatrész rendelés" @@ -4436,7 +4785,8 @@ 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:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Belső alkatrész" @@ -4446,7 +4796,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4455,19 +4805,23 @@ msgstr "Beszállítók" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Paraméterek" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Új paraméter" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "Paraméter hozzáadása" @@ -4491,19 +4845,6 @@ msgstr "Hozzárendelt készlet tételek" msgid "Contacts" msgstr "Névjegyek" -#: company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Címek" - -#: 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 "Beszállítói alkatrész" - #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4512,7 +4853,7 @@ msgstr "Beszállítói alkatrész műveletek" #: 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Alkatrész rendelése" @@ -4545,12 +4886,12 @@ msgstr "Beszállítói alkatrész törlése" 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:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "SKU (leltári azonosító)" @@ -4559,13 +4900,13 @@ 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:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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:207 -#: templates/js/translated/stock.js:537 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Új készlet tétel" @@ -4583,29 +4924,33 @@ msgstr "Árinformációk" msgid "Add Price Break" msgstr "Ársáv hozzáadása" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "Beszállítói alkatrész QR kód" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "Vonalkód hozzárendelése a beszállítói alkatrészhez" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 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:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Készlet tételek" @@ -4631,10 +4976,6 @@ msgstr "Vevők" msgid "New Customer" msgstr "Új vevő" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Cégek" - #: company/views.py:52 msgid "New Company" msgstr "Új cég" @@ -4643,48 +4984,228 @@ msgstr "Új cég" msgid "Placed" msgstr "Kiküldve" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "Oszlopok" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "Adat" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "Hibák" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "Érvényes" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "Másolatok" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "Címkénkénti nyomtatandó mennyiség" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "Csatlakoztatba" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Ismeretlen" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "Nyomtatás" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "Nincs papír" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "Nincs kapcsolat" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "Címkenyomtató" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "Közvetlen címkenyomtatás különféle tételekre." -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "Nyomtató helye" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "Nyomtató korlátozása egy készlethelyhez" @@ -4724,10 +5245,6 @@ msgstr "Nincsen hiba" msgid "Initialized" msgstr "Inicializálva" -#: machine/models.py:110 -msgid "Errors" -msgstr "Hibák" - #: machine/models.py:117 msgid "Machine status" msgstr "Gép állapot" @@ -4744,78 +5261,78 @@ msgstr "Gép konfiguráció" msgid "Config type" msgstr "Konfiguráció típusa" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Teljes ár" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Rendelés állapota" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "Van árazás" -#: order/api.py:240 +#: order/api.py:228 msgid "No matching purchase order found" msgstr "Nincs egyező beszerzési rendelés" -#: 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Rendelés" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "A rendelés teljesítve" -#: order/api.py:462 +#: order/api.py:450 msgid "Order Pending" msgstr "A rendelés függőben" -#: order/api.py:1509 order/models.py:380 order/models.py:1432 -#: order/models.py:1541 order/templates/order/order_base.html:9 +#: order/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 msgid "Purchase Order" msgstr "Beszerzési rendelés" -#: 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "Visszavétel" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "A rendelés teljes ára" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "Rendelés pénzneme" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 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)" @@ -4831,7 +5348,7 @@ msgstr "Rendelés leírása (opcionális)" msgid "Select project code for this order" msgstr "Válassz projektszámot ehhez a rendeléshez" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Link külső weboldalra" @@ -4855,534 +5372,578 @@ msgstr "Kapcsolattartó ehhez a rendeléshez" msgid "Company address for this order" msgstr "Cég címei ehhez a rendeléshez" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Rendelés azonosító" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "Beszerzési rendelés állapota" -#: order/models.py:487 +#: order/models.py:493 msgid "Company from which the items are being ordered" msgstr "Cég akitől a tételek beszerzésre kerülnek" -#: order/models.py:498 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1702 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "Beszállítói azonosító" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "Beszállítói rendelés azonosító kód" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "érkeztette" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Kiállítás dátuma" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "Kiállítás dátuma" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "Rendelés teljesítési dátuma" -#: order/models.py:566 +#: order/models.py:572 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:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "Mennyiség pozitív kell legyen" -#: order/models.py:941 +#: order/models.py:992 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:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "Vevői azonosító " -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "Megrendelés azonosító kódja a vevőnél" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: 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:978 +#: order/models.py:1029 msgid "shipped by" msgstr "szállította" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "Csak nyitott rendelés jelölhető késznek" -#: order/models.py:1038 +#: order/models.py:1089 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:1043 +#: order/models.py:1094 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:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Tétel mennyiség" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "Sortétel azonosító" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "Sortétel megjegyzései" -#: order/models.py:1345 +#: order/models.py:1393 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:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "Sortétel leírása (opcionális)" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "Kontextus" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "További kontextus ehhez a sorhoz" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "Egységár" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "törölve" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "Beszállítói alkatrész" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Beérkezett" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Beszerzési ár" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "Beszerzési egységár" -#: order/models.py:1483 +#: order/models.py:1536 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:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 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:1579 +#: order/models.py:1642 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:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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:1606 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Eladási egységár" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "Szállított mennyiség" -#: order/models.py:1708 +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "Szállítás dátuma" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Szállítási dátum" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "Kézbesítés dátuma" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "Ellenőrizte" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "Szállítmány" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "Szállítmány száma" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "Nyomkövetési szám" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "Szállítmány nyomkövetési információ" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "Számlaszám" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "Hozzátartozó számla referencia száma" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "Szállítmány már elküldve" -#: order/models.py:1772 +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "Készlet tétel nincs hozzárendelve" -#: order/models.py:1899 +#: order/models.py:1973 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:1902 +#: order/models.py:1976 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:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 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:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "Vevői rendelés nem egyezik a szállítmánnyal" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "Szállítmány nem egyezik a vevői rendeléssel" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "Sor" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "Vevői rendelés szállítmány azonosító" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Tétel" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "Válaszd ki a foglalásra szánt készlet tételt" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "Visszavétel azonosító" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "Cég akitől a tételek visszavételre kerülnek" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "Visszavétel állapota" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 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:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "Visszavétel dátuma" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "Mikor lett visszavéve a tétel" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Kimenetel" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "Sortétel végső kimenetele" -#: order/models.py:2302 +#: order/models.py:2418 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:81 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/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "Kész sorok" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 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:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Beszerzési ár automatikus számítása a beszállítói alkatrész adatai alapján" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "Elemek összevonása" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Azonos forrás és cél dátumú Alkatrész tételeinek összevonása egy tételre" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "Belső cikkszám" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:511 +#: order/serializers.py:590 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:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "Sortétel nem egyezik a beszerzési megrendeléssel" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:643 +#: order/serializers.py:742 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:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "A következő sorozatszámok már ki lettek osztva" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:1689 +#: order/serializers.py:1785 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:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "Sortétel pénzneme" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Elveszett" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Visszaküldve" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Folyamatban" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Visszavétel" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Javítás" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Csere" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Visszatérítés" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Elutasított" @@ -5427,87 +5988,93 @@ msgid "Edit order" msgstr "Rendelés szerkesztése" #: 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 "Rendelés törlése" - -#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Rendelés másolása" -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Rendelés törlése" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "Rendelés kiküldése" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Rendelés befejezése" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 msgid "Supplier part thumbnail" 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:110 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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:115 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Rendelés leírása" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 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:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 msgid "Completed Line Items" msgstr "Kész sortételek" -#: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:167 -#: order/templates/order/sales_order_base.html:177 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Hiányos" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Kiküldve" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 msgid "Total cost" 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:243 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "A teljes költség nem számolható" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "Beszerzési rendelés QR kódja" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "Vonalkód hozzáadása a beszerzési rendeléshez" @@ -5560,13 +6127,13 @@ msgstr "Kijelöltek másolása" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Sor törlése" @@ -5667,31 +6234,31 @@ msgstr "Visszavételi riport nyomtatása" 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:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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:239 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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:259 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "Visszavétel QR kódja" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "Vonalkód visszavételhez rendelése" @@ -5703,36 +6270,36 @@ msgstr "Visszavétel részletei" msgid "Print sales order report" msgstr "Vevői rendelés nyomtatása" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "Tételek kiszállítása" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: 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:135 +#: order/templates/order/sales_order_base.html:138 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:173 +#: order/templates/order/sales_order_base.html:176 #: 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:321 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "Vevő rendelés QR kódja" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "Vonalkód hozzáadása a vevői rendeléshez" @@ -5746,7 +6313,8 @@ msgid "Pending Shipments" msgstr "Függő szállítmányok" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Műveletek" @@ -5776,35 +6344,21 @@ 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:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "Alkatrész ID" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Alkatrész neve" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Alkatrész leírása" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "IPN (Belső Cikkszám)" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Változat" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Kulcsszavak" @@ -5816,7 +6370,8 @@ msgstr "Alkatrész ábra" msgid "Category ID" msgstr "Kategória ID" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "Kategória neve" @@ -5828,11 +6383,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:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimális készlet" @@ -5840,169 +6395,183 @@ msgstr "Minimális készlet" msgid "Used In" msgstr "Felhasználva ebben" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "Gyártásban" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "Szülő ID" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "Szülő neve" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "Kategória elérési út" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Alkatrészek" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "Alkatrészjegyzék szint" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "Alkatrészjegyzék tétel ID" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "Szülő IPN" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "Alkatrész IPN" +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Minimum ár" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Maximum ár" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "Csillagozott" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "Csillagozottra szűrés" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "Mélység" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "Kategória mélységre szűrés" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "Felső szint" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "Lépcsőzetes" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "Szűrt eredmények tartalmazzák az alkategóriákat" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "Szülő" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "Szülő kategóriára szűrés" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "Fa kihagyása" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "Az adott kategória alkategóriáinak kihagyása" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "Van találat" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "Beérkező beszerzési rendelés" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "Kimenő vevői rendelés" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "Gyártással előállított készlet" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "A gyártási utasításhoz szükséges készlet" -#: part/api.py:887 -msgid "Valid" -msgstr "Érvényes" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "Ennek az opciónak ki kll lennie választva" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Kategória" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "Használ" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Alapértelmezett hely" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Teljes készlet" @@ -6011,1042 +6580,1144 @@ msgstr "Teljes készlet" msgid "Input quantity for price calculation" msgstr "Add meg a mennyiséget az árszámításhoz" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 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:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: 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:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Ebben a kategóriában lévő alkatrészek helye alapban" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Szerkezeti" -#: part/models.py:111 +#: part/models.py:115 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:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Alapértelmezett kulcsszavak" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "Ikon" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "Ikon (opcionális)" -#: part/models.py:150 +#: part/models.py:178 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:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "Hibás választás a szülő alkatrészre" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, 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:595 +#: part/models.py:631 #, 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:660 +#: part/models.py:694 #, 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:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 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:845 +#: part/models.py:916 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:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 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:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "Szerkezeti kategóriákhoz nem lehet alkatrészeket rendelni!" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "Alkatrész leírása (opcionális)" -#: part/models.py:931 +#: part/models.py:1014 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:941 +#: part/models.py:1024 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "Belső cikkszám" - -#: part/models.py:956 +#: part/models.py:1039 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:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "Alapértelmezett beszállító" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "Alapértelmezett beszállítói alkatrész" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:1036 +#: part/models.py:1129 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:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "Alkatrész mértékegysége" -#: part/models.py:1061 +#: part/models.py:1154 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:1067 +#: part/models.py:1160 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:1073 +#: part/models.py:1166 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:1079 +#: part/models.py:1172 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:1085 +#: part/models.py:1178 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:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 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:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "Utolsó leltár" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Dátum" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "További megjegyzések" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "Leltározta" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "Riport" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "Leltár riport fájl (generált)" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "Alkatrész szám" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "Leltározott alkatrészek száma" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "Felhasználó aki a leltár riportot kérte" -#: part/models.py:3469 +#: part/models.py:3398 +msgid "Part Sale Price Break" +msgstr "" + +#: part/models.py:3510 +msgid "Part Test Template" +msgstr "" + +#: part/models.py:3536 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Hibás sablon név - legalább egy alfanumerikus karakter kötelező" -#: part/models.py:3490 part/models.py:3654 +#: part/models.py:3557 part/models.py:3726 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" -#: part/models.py:3501 +#: part/models.py:3568 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:3512 +#: part/models.py:3579 msgid "Test template with the same key already exists for part" msgstr "Már létezik ilyen azonosítójú Teszt sablon ehhez az alkatrészhez" -#: part/models.py:3529 templates/js/translated/part.js:2880 +#: part/models.py:3596 templates/js/translated/part.js:2895 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3530 +#: part/models.py:3597 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3536 +#: part/models.py:3603 msgid "Test Key" msgstr "Teszt azonosító" -#: part/models.py:3537 +#: part/models.py:3604 msgid "Simplified key for the test" msgstr "Egyszerűsített Teszt azonosító" -#: part/models.py:3544 +#: part/models.py:3611 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3545 +#: part/models.py:3612 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 msgid "Enabled" msgstr "Engedélyezve" -#: part/models.py:3549 +#: part/models.py:3616 msgid "Is this test enabled?" msgstr "Teszt engedélyezve?" -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 msgid "Required" msgstr "Kötelező" -#: part/models.py:3555 +#: part/models.py:3622 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3560 templates/js/translated/part.js:2917 +#: part/models.py:3627 templates/js/translated/part.js:2932 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3561 +#: part/models.py:3628 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:3566 templates/js/translated/part.js:2924 +#: part/models.py:3633 templates/js/translated/part.js:2939 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3568 +#: part/models.py:3635 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:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "Lehetőségek" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 +#: part/models.py:3674 +msgid "Part Parameter Template" +msgstr "" + +#: part/models.py:3701 msgid "Checkbox parameters cannot have units" msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" -#: part/models.py:3634 +#: part/models.py:3706 msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: part/models.py:3671 +#: part/models.py:3743 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: part/models.py:3686 +#: part/models.py:3758 msgid "Parameter Name" msgstr "Paraméter neve" -#: part/models.py:3693 +#: part/models.py:3765 msgid "Physical units for this parameter" msgstr "Paraméter mértékegysége" -#: part/models.py:3701 +#: part/models.py:3773 msgid "Parameter description" msgstr "Paraméter leírása" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "Választható lehetőségek (vesszővel elválasztva)" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "Szülő alkatrész" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Paraméter sablon" -#: part/models.py:3847 -msgid "Data" -msgstr "Adat" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "Paraméter értéke" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Alapértelmezett érték" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "Alkatrész ID vagy alkatrész név" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "Egyedi alkatrész ID értéke" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "Alkatrész IPN érték" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "Szint" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "Alkatrészjegyzék szint" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4117 +#: part/models.py:4259 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:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Többlet" -#: part/models.py:4125 +#: part/models.py:4267 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:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 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:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "Változatok" - -#: part/models.py:4165 +#: part/models.py:4307 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:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 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:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4423 +#: part/models.py:4563 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:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "Felsőbb szintű alkatrész kategória" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Alkategóriák" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "Eredmények" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "Eszerint a sablon szerint rögzített eredmények száma" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "Ennyi alkatrész használja ezt a sablont" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "Nincs kiválasztva alkatrész" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "Válassz kategóriát" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Paraméterek másolása" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:492 +#: part/serializers.py:513 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:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:517 +#: part/serializers.py:538 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:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "Külső raktárkészlet" +#: part/serializers.py:901 +msgid "Revisions" +msgstr "" -#: part/serializers.py:843 +#: part/serializers.py:906 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:846 +#: part/serializers.py:909 msgid "Variant Stock" msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 +#: part/serializers.py:939 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:877 +#: part/serializers.py:940 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:883 templates/js/translated/part.js:102 +#: part/serializers.py:946 templates/js/translated/part.js:103 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:884 +#: part/serializers.py:947 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:890 +#: part/serializers.py:953 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:891 +#: part/serializers.py:954 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:899 +#: part/serializers.py:962 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:900 +#: part/serializers.py:963 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:905 +#: part/serializers.py:968 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:906 +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1129 +#: part/serializers.py:1192 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:1139 +#: part/serializers.py:1202 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:1149 +#: part/serializers.py:1212 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:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "Külső készlet nélkül" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "Külső helyeken lévő készlet nélkül" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "Riport létrehozása" -#: part/serializers.py:1162 +#: part/serializers.py:1225 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:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "Alaktrészek frissítése" -#: part/serializers.py:1168 +#: part/serializers.py:1231 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:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "Leltár funkció nincs engedélyezve" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, 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:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Gyártható" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1743 +#: part/serializers.py:1844 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:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1749 +#: part/serializers.py:1850 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:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1761 +#: part/serializers.py:1862 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:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "Meglévő alkatrészjegyzék törlése" -#: part/serializers.py:1796 +#: part/serializers.py:1900 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:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "Nincs megadva alkatrész oszlop" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "Több egyező alkatrész is található" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "Nincs egyező alkatrész" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "Az alkatrész nem lett összetevőként jelölve" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "Mennyiség nincs megadva" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "Érvénytelen mennyiség" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "Legalább egy alkatrészjegyzék tétel szükséges" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "Teljes mennyiség" @@ -7066,11 +7737,11 @@ msgstr "Leltár riport rendelkezésre áll" msgid "A new stocktake report is available for download" msgstr "Egy új leltár riport készen áll a letöltésre" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "Alacsony készlet értesítés" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "A {part.name} alkatrész rendelkezésre álló készlete a megadott minimum alá csökkent" @@ -7092,65 +7763,65 @@ msgstr "Ezt az alkatrészjegyzéket utoljára %(checker)s ellenőrizte %(check_d msgid "This BOM has not been validated." msgstr "Ez az alkatrészjegyzék még nincs jóváhagyva." -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "Alkatrész kategória leltározása" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "Értesítések beállítva erre a kategóriára" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "Értesítések kérése erre a kategóriára" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "Kategória műveletek" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Kategória szerkesztése" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Kategória szerkesztése" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Kategória törlése" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Kategória törlése" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "Legfelső szintű alkatrész kategória" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Alkatrészek száma (alkategóriákkal együtt)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "Alkatrész létrehozása" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Új alkatrész" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Alkatrész paraméterek" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "Alkatrész kategória létrehozása" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Új kategória" @@ -7196,9 +7867,9 @@ msgid "Add stocktake information" msgstr "Leltár információ hozzáadása" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "Leltár" @@ -7210,101 +7881,105 @@ msgstr "Alkatrész teszt sablonok" msgid "Add Test Template" msgstr "Teszt sablon hozzáadása" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Vevői rendeléshez foglalások" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "Alkatrész megjegyzések" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "Alkatrész változatok" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "Új változat létrehozása" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "Új változat" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "Paraméter hozzáadása" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "Kapcsolódó alkatrészek" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "Kapcsolódó hozzáadása" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Alkatrészjegyzék" -#: part/templates/part/detail.html:260 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "Exportálási műveletek" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Alkatrészjegyzék exportálása" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "Alkatrészjegyzék riport nyomtatása" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "Alkatrészjegyzék műveletek" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "Alkatrészjegyzék feltöltése" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "Alkatrészjegyzék jóváhagyása" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Alkatrészjegyzék tétel hozzáadása" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "Gyártmányok" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "Alkatrész gyártások" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Gyártáshoz foglalások" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "Alkatrész beszállítók" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "Alkatrész gyártók" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "Kapcsolódó alkatrész" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "Kapcsolódó alkatrész hozzáadása" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "Teszt eredmény sablon hozzáadása" @@ -7339,13 +8014,13 @@ msgstr "Alkatrész import sablon letöltése" #: 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 +#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 msgid "Format" msgstr "Formátum" #: 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Fájlfomátum kiválasztása" @@ -7363,7 +8038,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 templates/js/translated/label.js:143 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Címke nyomtatása" @@ -7373,7 +8048,7 @@ msgstr "Árinformációk megjelenítése" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Készlet műveletek" @@ -7385,7 +8060,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:2296 msgid "Part actions" msgstr "Készlet műveletek" @@ -7434,7 +8109,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:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "Alkatrész részletei" @@ -7448,51 +8123,47 @@ msgstr "Gyártáshoz lefoglalva" msgid "Allocated to Sales Orders" msgstr "Vevő rendeléshez lefoglalva" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Gyártható" - -#: part/templates/part/part_base.html:291 +#: part/templates/part/part_base.html:300 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:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Ártartomány" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "Legutolsó sorozatszám" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Sorozatszámra keresés" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "Alkatrész QR kódja" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "Vonalkód hozzárendelése az alkatrészhez" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "Számítás" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "Alkatrészhez rendelt kép eltávolítása" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "Nincs egyező kép" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "Részletek elrejtése" @@ -7546,13 +8217,13 @@ msgid "Variants" msgstr "Változatok" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Készlet" @@ -7588,17 +8259,17 @@ msgstr "Alkatrész árazás felülbírálása" #: 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/helpers.js:103 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Szerkesztés" -#: part/templates/part/prices.html:28 stock/admin.py:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "Utoljára módosítva" @@ -7670,9 +8341,9 @@ msgid "Update Pricing" msgstr "Árazás Frissítése" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Nincs készlet" @@ -7750,7 +8421,7 @@ msgstr "Az alkatrész képe nem található" msgid "Part Pricing" msgstr "Alkatrész árak" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "Plugin nem törölhető mivel még aktív" @@ -7762,100 +8433,108 @@ msgstr "Nincs megadva művelet" msgid "No matching action found" msgstr "Nincs egyező művelet" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Nincs egyező vonalkód" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Egyezés vonalkódra" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "Ez a vonalkód már egy másik tételé" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "Nem található megfelelő alkatrész adat" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "Nem található megfelelő beszállítói alkatrész" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "Több beszállítói alkatrész található" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "Beszállítói alkatrész található" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "Ez a termék már bevételezve" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "Beszállítói vonalkód nem található" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "Több egyező sortétel is található" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "Nincs egyező sortétel" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "Vonalkód nem egyezik egy létező készlet tétellel sem" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 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:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Nincs elegendő" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "Készlet tétel lefoglalva egy vevői rendeléshez" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "Nincs elég információ" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "A vonalkódhoz több beszállítói alkatrész is tartozik" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "A '{order}' rendeléshez több beszerzési rendelés is tartozik" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "A '{order}' rendeléshez nem tartozik beszerzési rendelés" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "A beszerzési rendelés nem egyezik a beszállítóval" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "Nem található függőben levő tétel a beszállítói alkatrészhez" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "A tétel bevételezéséhez további információ szükséges" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "Beszerzési rendelés tétele bevételezve" @@ -7863,55 +8542,63 @@ msgstr "Beszerzési rendelés tétele bevételezve" msgid "Scanned barcode data" msgstr "Beolvasott vonalkód" -#: plugin/base/barcodes/serializers.py:81 +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 msgid "Purchase Order to allocate items against" msgstr "Tételekhez rendelendő Beszerzési Rendelés" -#: plugin/base/barcodes/serializers.py:87 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order is not pending" msgstr "Beszerzési rendelés nincs függőben" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:129 msgid "PurchaseOrder to receive items against" msgstr "Bevételezési tételekhez rendelendő Beszerzési Rendelés" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "Beszerzési rendelés nincs elküdve" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "Bevételezés erre a készlet helyre" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "Struktúrális hely nem választható" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "Tételekhez rendelendő Vevői Rendelés" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "Vevői rendelés nincs függőben" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "Tételekhez rendelendő vevői rendelés sortétel" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "Tételekhez rendelendő vevői rendelés szállítmány" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "Szállítmány kiszállítva" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "Lefoglalandó mennyiség" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "Címkenyomtatás sikertelen" @@ -7927,25 +8614,49 @@ msgstr "A címke HTML nyomtatása sikertelen" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "InventTree vonalkódok" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "Alapvető vonalkód támogatást ad" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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 "InvenTree fejlesztők" +#: plugin/builtin/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "InvenTree értesítések" @@ -8001,10 +8712,12 @@ 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:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "Debug mód" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Debug mód engedélyezése - nyers HTML-t ad vissza PDF helyett" @@ -8016,55 +8729,55 @@ msgstr "InvenTree címkenyomtató" msgid "Provides support for printing using a machine" msgstr "Nyomtatási támogatást nyújt egy Berendezés által" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "utoljára használva" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "Opciók" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "Címke oldal méret" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "Címkék kihagyása" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "Hagyjon ki ennyi számú címkét a címke ívek nyomtatásakor" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "Szegély" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 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:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "Fekvő" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "Fekvő módban nyomtatás" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "Inventree Címke Ív Nyomtató" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "Több címke egy ívre helyezése" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 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:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "Nem készült címke" @@ -8190,7 +8903,7 @@ msgid "Is the plugin active" msgstr "Aktív-e a plugin" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "Beépítve" @@ -8206,7 +8919,7 @@ msgstr "Beépített plugin" msgid "Package Plugin" msgstr "Csomag plugin" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8220,17 +8933,17 @@ msgstr "Módszer" msgid "No author found" msgstr "Nincs szerző" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, 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:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "A pluginhoz minimum {v} verzió kell" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "A pluginhoz maximum {v} verzió kell" @@ -8357,12 +9070,8 @@ msgstr "Plugin konfiguráció törlése az adatbázisból" msgid "No valid objects provided to template" msgstr "Nincs érvényes objektum megadva a sablonhoz" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8398,147 +9107,147 @@ msgstr "Címkenyomtatási hiba" msgid "Template file '{template}' is missing or does not exist" msgstr "A '{template}' sablon fájl hiányzik vagy nem érhető el" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "A4" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "A3" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "Jogi információk" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "„Letter” méret" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Sablon neve" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Fájlnév minta" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Szűrők" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "Lapméret a PDF riportokhoz" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "Jelentés fekvő nézetben" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Szélesség [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "Címke szélessége, mm-ben" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Magasság [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "Címke magassága, mm-ben" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "Haladás" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 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 "Output File" +msgstr "Kimeneti Fájl" + +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "Részlet" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "Riport részlet fájl" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "Részlet fájl leírása" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "Eszköz" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "Riport asset fájl" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "Asset fájl leírása" @@ -8589,10 +9298,10 @@ msgstr "Beszállító törölve lett" #: 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Egységár" @@ -8605,26 +9314,13 @@ msgstr "Egyéb tételek" #: 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 msgid "Total" msgstr "Összesen" -#: 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 "Sorozatszám" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "Készlethely tételek" @@ -8638,713 +9334,759 @@ msgid "Test Results" msgstr "Teszt eredmények" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "Teszt" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "Eredmény" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "Sikeres" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "Sikertelen" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "Nincs eredmény (szükséges)" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "Nincs eredmény" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Beépített tételek" -#: 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Sorozatszám" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "A fájl nem létezik" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "A képfile nem található" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "part_image elem csak alkatrész példánynál használható" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "company_image elem csak cég példánynál használható" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 msgid "Location ID" msgstr "Hely ID" -#: stock/admin.py:54 stock/admin.py:176 -msgid "Location Name" -msgstr "Hely neve" - -#: stock/admin.py:64 stock/templates/stock/location.html:131 -#: stock/templates/stock/location.html:137 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "Hely elérési út" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "Készlet tétel ID" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "Státuszkód" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "Beszállítói cikkszám" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "Beszállító ID" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "Beszállító neve" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "Vevő ID" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Beépítve ebbe" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "Gyártás ID" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "Vevői rendelés ID" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "Vevői rendelés azonosító" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "Felülvizsgálat szükséges" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "Törlés ha kimerül" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "Lejárati dátum" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "Hely mélységre szűrés" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "Szűrt eredmények tartalmazzák az alhelyeket" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "Szülő hely" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "Szülő helyre szűrés" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Külső hely" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "Alkatrész fa" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "Lejárat előtt" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "Lejárat után" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Állott" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "Mennyiség megadása kötelező" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "Egy érvényes alkatrészt meg kell adni" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "A megadott beszállítói alkatrész nem létezik" -#: stock/api.py:974 +#: stock/api.py:976 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:1005 +#: stock/api.py:1007 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:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "Készlethely típus" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "Készlethely típusok" -#: stock/models.py:86 +#: stock/models.py:91 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:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Készlet hely" -#: stock/models.py:124 stock/templates/stock/location.html:186 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Készlethelyek" -#: stock/models.py:166 stock/models.py:949 +#: stock/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Tulajdonos" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "Tulajdonos kiválasztása" -#: stock/models.py:175 +#: stock/models.py:189 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:182 templates/js/translated/stock.js:2781 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Külső" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "Ez egy külső készlethely" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Helyszín típusa" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "Tárolóhely típus" -#: stock/models.py:262 +#: stock/models.py:279 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:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" -#: stock/models.py:687 +#: stock/models.py:708 #, 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:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 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:700 +#: stock/models.py:721 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:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "A tétel nem tartozhat saját magához" -#: stock/models.py:729 +#: stock/models.py:748 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:742 +#: stock/models.py:761 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:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "Szülő készlet tétel" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "Kiindulási alkatrész" -#: stock/models.py:780 +#: stock/models.py:799 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:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 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:811 +#: stock/models.py:830 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:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "Készlet mennyiség" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "Forrás gyártás" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "Gyártás ehhez a készlet tételhez" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Felhasználva ebben" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "Felhasználva ebben a gyártásban" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "Forrás beszerzési rendelés" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "Beszerzés ehhez a készlet tételhez" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "Cél vevői rendelés" -#: stock/models.py:902 +#: stock/models.py:921 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:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "Törlés ha kimerül" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "Készlet tétel törlése ha kimerül" -#: stock/models.py:941 +#: stock/models.py:960 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:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "Alkatrésszé alakítva" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1504 +#: stock/models.py:1525 #, 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:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "A sorozatszám egész számok listája kell legyen" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "A sorozatszámok már léteznek" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "Ez a Teszt sablon nem létezik" -#: stock/models.py:1638 +#: stock/models.py:1659 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:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:1673 +#: stock/models.py:1694 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:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" -#: stock/models.py:1905 +#: stock/models.py:1960 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:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "Bejegyzés megjegyzései" -#: stock/models.py:2394 +#: stock/models.py:2414 +msgid "Stock Item Test Result" +msgstr "" + +#: stock/models.py:2447 msgid "Value must be provided for this test" msgstr "Ehhez a teszthez meg kell adni értéket" -#: stock/models.py:2399 +#: stock/models.py:2452 msgid "Attachment must be uploaded for this test" msgstr "Ehhez a teszthez fel kell tölteni mellékletet" -#: stock/models.py:2404 +#: stock/models.py:2457 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2428 +#: stock/models.py:2542 msgid "Test result" msgstr "Teszt eredménye" -#: stock/models.py:2435 +#: stock/models.py:2549 msgid "Test output value" msgstr "Teszt kimeneti értéke" -#: stock/models.py:2443 +#: stock/models.py:2557 msgid "Test result attachment" msgstr "Teszt eredmény melléklet" -#: stock/models.py:2447 +#: stock/models.py:2561 msgid "Test notes" msgstr "Tesztek megjegyzései" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "Teszt állomás" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "A tesztet elvégző tesztállomás azonosítója" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "Elkezdődött" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "A teszt indításának időpontja" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "Befejezve" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "A teszt befejezésének időpontja" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "Az eredmény Teszt sablonja" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "Sablon azonosító vagy Teszt név szükséges" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "A tesztet nem lehet a kezdésnél hamarabb befejezni" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "Szériaszám túl nagy" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Szülő tétel" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 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:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Lejárt" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Gyermek tételek" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 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:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 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:609 +#: stock/serializers.py:674 #, 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:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "Cél készlet hely" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "Beépítendő mennyiség" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "Adja meg a beépítendő mennyiséget" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "A beépítendő mennyiség legalább 1 legyen" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:752 +#: stock/serializers.py:817 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:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:852 +#: stock/serializers.py:947 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:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "Cél hely a visszatérő tételeknek" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 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:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "Nincs készlet tétel kiválasztva" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Alhelyek" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "Felsőbb szintű készlet hely" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 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:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 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:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "Nincs változás" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "Készlet tétel státusz kódja" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" @@ -9376,7 +10118,7 @@ msgstr "Karanténban" 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 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Készlet tétel létrehozva" @@ -9432,7 +10174,7 @@ msgstr "Szülő tételből szétválasztva" msgid "Split child item" msgstr "Szétválasztott gyermek tétel" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Összevont készlet tétel" @@ -9452,7 +10194,7 @@ msgstr "Gyártási utasítás kimenete kész" 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 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Gyártásra felhasználva" @@ -9497,7 +10239,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:276 msgid "Delete Test Data" msgstr "Teszt adatok törlése" @@ -9513,15 +10255,15 @@ msgstr "Készlet tétel megjegyzések" msgid "Installed Stock Items" msgstr "Beépített készlet tételek" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "Készlet tétel beépítése" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 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:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "Teszt eredmény hozzáadása" @@ -9534,8 +10276,8 @@ msgid "Scan to Location" msgstr "Áthelyezés kódolvasással" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "Nyomtatási műveletek" @@ -9544,17 +10286,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:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "Leltározás" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "Készlet növelése" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "Készlet csökkentése" @@ -9563,12 +10305,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:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "Készlet áthelyezése" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "Vevőhöz rendelése" @@ -9609,14 +10351,10 @@ 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:2123 templates/navbar.html:38 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Gyártás" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Szülő tétel" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Nincs beállítva gyártó" @@ -9626,7 +10364,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Úgytűnik nem vagy ennek a tételnek a tulajdonosa. Ezt így nem tudod módosítani." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "Csak olvasható" @@ -9670,12 +10408,8 @@ msgstr "követkető oldal" msgid "Navigate to next serial number" msgstr "Menj a következő sorozatszámhoz" -#: stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Elérhető mennyiség" - #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2380 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Nincs beállítva hely" @@ -9692,11 +10426,6 @@ msgstr "Ez a készlet tétel nem felelt meg az összes szükséges teszten" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Ez a készlet tétel lejárt %(item.expiry_date)s-n" -#: stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:435 users/models.py:174 -msgid "Expired" -msgstr "Lejárt" - #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -9707,7 +10436,7 @@ msgid "No stocktake performed" msgstr "Még nem volt leltározva" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "készlet tétel" @@ -9739,7 +10468,7 @@ msgstr "Ez a művelet nem vonható vissza könnyen" msgid "Convert Stock Item" msgstr "Készlet tétel konvertálása" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "Visszavétel készletre" @@ -9751,84 +10480,84 @@ msgstr "Sorszámozott készletek létrehozása ebből a készlet tételből." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Válassz mennyiséget és egyedi sorozatszámokat a sorozatszámozáshoz." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "Készlethely leltározása" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "Készlet hely keresése" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "Készlet bevételezése erre a helyre" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "Készlet vonalkódok beolvasása" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "Készlet tároló bevételezése erre a helyre" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "Tároló vonalkód beolvasása" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "Készlethely riport nyomtatása" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "Hely műveletek" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Hely szerkesztése" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Hely törlése" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "Legfelső szintű készlet hely" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "Hely tulajdonosa" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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:176 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "Új készlet hely létrehozása" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Új hely" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "készlet hely" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "Készlet tároló bevételezve erre a helyre" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "Készlet hely QR kódja" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "Vonalkód hozzárendelése a készlet helyhez" @@ -9844,10 +10573,6 @@ msgstr "Készlettörténet" msgid "Allocations" msgstr "Foglalások" -#: stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Gyermek tételek" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Hozzáférés megtagadva" @@ -10098,11 +10823,11 @@ msgstr "URL kompatibilis név (Slug)" msgid "Part Settings" msgstr "Alkatrész beállítások" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "Alkatrész importálás" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "Alkatrész importálása" @@ -10208,7 +10933,7 @@ msgstr "Telepítési útvonal" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "Beépített" @@ -10218,7 +10943,7 @@ msgstr "Ez egy beépített plugin amit nem lehet letiltani" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "Minta" @@ -10321,9 +11046,9 @@ msgid "Rate" msgstr "Árfolyam" #: 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Törlés" @@ -10344,7 +11069,7 @@ msgid "No project codes found" msgstr "Nem találhatók projektszámok" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "csoport" @@ -10363,12 +11088,12 @@ msgid "No category parameter templates found" msgstr "Nincs kategória paraméter sablon" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "Sablon szerkesztése" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "Sablon törlése" @@ -10376,40 +11101,40 @@ msgstr "Sablon törlése" msgid "Edit Category Parameter Template" msgstr "Kategória paraméter sablon szerkesztése" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "Kategória paraméter sablon törlése" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "Kategória paraméter sablon létrehozása" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "Alkatrész paraméter sablon létrehozása" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "Nem találhatók készlethely típusok" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "Készlethely mennyiség" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "Készlethely típus szerkesztése" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "Készlethely típus törlése" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "Készlethely típus törlése" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "Új készlethely típus" @@ -10432,7 +11157,7 @@ msgid "Home Page" msgstr "Főoldal" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10481,18 +11206,6 @@ msgstr "Fiókbeállítások" msgid "Change Password" msgstr "Jelszó módosítása" -#: templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Felhasználónév" - -#: templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Keresztnév" - -#: templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Vezetéknév" - #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "A következő email címek vannak hozzárendelve a felhasználódhoz:" @@ -10758,7 +11471,7 @@ msgid "Submit Bug Report" msgstr "Hibabejelentés küldése" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "vágólapra másolás" @@ -10780,7 +11493,7 @@ msgstr "Email cím megerősítése" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Erősítsd meg hogy a %(email)s email a %(user_display)s felhasználó email címe." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Megerősítés" @@ -11013,7 +11726,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Szükséges mennyiség" @@ -11027,15 +11740,15 @@ 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:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "Minimum mennyiség" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "Nincs válasz" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "Nincs válasz az InvenTree kiszolgálótól" @@ -11047,27 +11760,27 @@ msgstr "Error 400: Rossz kérelem" msgid "API request returned error code 400" msgstr "Az API kérelem 400-as hibakódot adott vissza" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "Error 401: Nincs hitelesítve" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "Hitelesítési adatok nem lettek megadva" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "Error 403: Hozzáférés megtagadva" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 msgid "You do not have the required permissions to access this function" msgstr "Nincs meg a szükséges jogosultságod, hogy elérd ezt a funkciót" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "Error 404: Erőforrás nem található" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "A kért erőforrás nem található a kiszolgálón" @@ -11079,11 +11792,11 @@ msgstr "Error 405: Metódus nincs engedélyezve" msgid "HTTP method not allowed at URL" msgstr "HTTP metódus nincs engedélyezve ezen az URL-n" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "Error 408: Időtúllépés" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "Időtúllépés a kiszolgálótól való adatlekérés közben" @@ -11115,27 +11828,27 @@ msgstr "Mellékletek törlése" msgid "Delete attachments" msgstr "Mellékletek törlése" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "Mellékletek műveletei" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "Nem találhatók mellékletek" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "Melléklet szerkesztése" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "Feltöltés dátuma" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "Melléklet szerkesztése" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "Melléklet törlése" @@ -11168,85 +11881,85 @@ msgid "Unknown response from server" msgstr "Ismeretlen válasz a kiszolgálótól" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "Érvénytelen válasz a szervertől" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "Vonalkód beolvasása" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Vonalkód beolvasása" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "Nincs URL a válaszban" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "Ez törli a vonalkód hozzárendelést" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "Leválasztás" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "Készlet tétel törlése" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "Készlet bevételezése adott helyre" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "Készlet tétel vonalkód beolvasása, amit bevételezzünk erre a helyre" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "Bevételezés" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "Nincs vonalkód beolvasva" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "Készlet tétel már beolvasva" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "Készlet tétel már ezen a helyen van" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "Hozzáadott készlet tétel" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "Vonalkód nem egyezik egy ismert készlet tétellel sem" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "Készlet tároló bevételezése adott helyre" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "Készlet tároló vonalkód beolvasása, amit bevételezzünk erre a helyre" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "A vonalkód nem egyezik egy ismert hellyel sem" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "Készlet áthelyezése a leolvasott helyre" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "A vonalkód nem egyezik egy ismert hellyel sem" @@ -11263,8 +11976,8 @@ msgid "Row Data" msgstr "Sor adat" #: 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11382,7 +12095,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:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "Készletváltozatok engedélyezve" @@ -11402,30 +12115,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:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "Külső raktárkészlet" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: 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:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 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:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: 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:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "Helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "Fogyóeszköz tétel" @@ -11457,7 +12170,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:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "Szükséges alkatrész" @@ -11465,120 +12178,120 @@ msgstr "Szükséges alkatrész" msgid "Inherited from parent BOM" msgstr "Örökölve a szülő alkatrészjegyzéktől" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "Gyártási utasítás szerkesztése" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "Gyártási utasítás létrehozása" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "Gyártási utasítás törlése" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "Biztosan meg szeretnéd szakítani ezt a gyártást?" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "Ehhez a gyártáshoz készlet lett hozzárendelve" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "Ennek a gyártásnak befejezetlen kimenetei vannak" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "Gyártási utasítás készen áll a befejezésre" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "A rendelés nem jelölhető késznek mivel függő kimenetek vannak" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "Gyártási utasítás befejezetlen" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "Gyártási utasítás befejezése" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "Következő szabad sorozatszám" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "Legutolsó sorozatszám" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "Az alkatrészjegyzék követésre kötelezett alkatrészeket tartalmaz" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "A gyártási kimeneteket egyesével kell előállítani" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "A követésre kötelezett alkatrészekhez sorozatszámot lehet rendelni" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "Adj meg sorozatszámokat a több egyedi gyártási kimenet létrehozásához" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "Gyártási kimenet létrehozása" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "Készlet tételek foglalása ehhez a gyártási kimenethez" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "Készlet felszabadítása a gyártási kimenetből" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "Gyártási kimenet befejezése" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "Gyártási kimenet selejtezése" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "Gyártási kimenet törlése" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "Biztosan szeretnéd a már lefoglalt készlet tételeket felszabadítani ebből a gyártási utasításból?" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "Készlet tételek felszabadítása" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "Gyártási kimenetek kiválasztása" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "Legalább egy gyártási kimenetet ki kell választani" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 msgid "Selected build outputs will be marked as complete" msgstr "A kiválasztott gyártási kimenetek késznek lesznek jelölve" -#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:860 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "Kimenet" @@ -11602,231 +12315,263 @@ msgstr "A lefoglalt készlet már nem lesz elérhető" msgid "The completion status of the build order will not be adjusted" msgstr "A befejezési státusza a gyártásnak nem fog változni" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "Gyártási kimenetek selejtezése" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "A kiválasztott gyártási kimenetek törölve lesznek" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "A gyártási kimenet adatai véglegesen törölve lesznek" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "A lefoglalt készlet tételek újra készletre kerülnek" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "Gyártási kimenetek törlése" -#: templates/js/translated/build.js:960 +#: templates/js/translated/build.js:959 +msgid "Delete allocations" +msgstr "" + +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" +msgstr "" + +#: templates/js/translated/build.js:989 +msgid "No allocated stock" +msgstr "" + +#: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 msgid "No build order allocations found" msgstr "Nincs gyártási utasításhoz történő foglalás" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" -msgstr "Lefoglalt mennyiség" - -#: templates/js/translated/build.js:1005 +#: templates/js/translated/build.js:1178 msgid "Location not specified" msgstr "Hely nincs megadva" -#: templates/js/translated/build.js:1027 +#: templates/js/translated/build.js:1200 msgid "Complete outputs" msgstr "Kimenetek befejezése" -#: templates/js/translated/build.js:1045 +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "Kimenetek selejtezése" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "Kimenetek törlése" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "gyártás kimenet" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "gyártás kimenetek" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "Gyártási kimenet műveletei" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "Nem található aktív gyártási kimenet" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "Lefoglalt sorok" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "Szükséges tesztek" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: templates/js/translated/purchase_order.js:611 #: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "Válassz alkatrészeket" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1750 #: 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:1640 +#: templates/js/translated/build.js:1813 #: 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:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "Minden alkatrész lefoglalva" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "Minden kiválasztott alkatrész teljesen lefoglalva" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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:1760 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "Készlet foglalása a gyártási utasításhoz" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "Nincs egyező készlethely" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "Nincs egyező készlet" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "Automatikus készlet foglalás" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 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:1944 +#: templates/js/translated/build.js:2117 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:1945 +#: templates/js/translated/build.js:2118 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:1946 +#: templates/js/translated/build.js:2119 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:1977 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "Készlet tételek foglalása" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 msgid "No builds matching query" msgstr "Nincs a lekérdezéssel egyező gyártási utasítás" -#: 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "Kiválaszt" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "Gyártás késésben van" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "Nincs felhasználói információ" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "Készlet foglalások szerkesztése" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "Készlet foglalások törlése" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "Foglalás szerkesztése" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "Foglalás törlése" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "gyártás sor" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "gyártás sorok" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "Nincsenek gyártási sorok" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "Követésre kötelezett alkatrész" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "Mennyiségi egység" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "Van elegendő" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "Fogyóeszköz tétel" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "Követett tétel" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 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/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "Gyártási készlet" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "Készlet rendelés" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "Lefoglalt készlet" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "Készlet foglalások törlése" @@ -11973,7 +12718,7 @@ msgid "Delete Parameters" msgstr "Paraméterek törlése" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "Alkatrész rendelés" @@ -11990,34 +12735,34 @@ msgid "No manufacturer parts found" msgstr "Nincs gyártói alkatrész" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "Sablon alkatrész" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "Gyártmány alkatrész" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "Nem található paraméter" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "Paraméter szerkesztése" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "Paraméter törlése" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "Paraméter szerkesztése" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "Paraméter törlése" @@ -12071,119 +12816,119 @@ msgstr "Ársáv szerkesztése" msgid "Delete price break" msgstr "Ársáv törlése" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "igaz" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "hamis" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "Szűrő kiválasztása" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "Címkék nyomtatása" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "Riportok nyomtatása" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "Táblázat letöltése" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "Táblázat frissítése" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "Új szűrő hozzáadása" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "Összes szűrő törlése" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 msgid "Create filter" msgstr "Szűrő létrehozása" -#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 -#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "Művelet tiltva" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "Létrehozás nem engedélyezett" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "Módosítás nem engedélyezett" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "Törlés nem engedélyezett" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "Megtekintés nem engedélyezett" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "Form nyitva tartása" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "Adj meg egy érvényes számot" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Form hibák vannak" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "Nincs találat" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "Keresés" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "Bevitel törlése" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "Fájl oszlop" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "Mező név" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "Oszlopok kiválasztása" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "IGEN" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "NEM" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "Igaz" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "Hamis" @@ -12191,74 +12936,74 @@ msgstr "Hamis" msgid "No parts required for builds" msgstr "Nem szükséges alkatrész a gyártáshoz" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "Tételek kiválasztása" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 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:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "Címkék nyomtatónak elküldve" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 msgid "Cancel" msgstr "Mégsem" -#: 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Küldés" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "Form megnevezése" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "Várakozás a kiszolgálóra..." -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "Hibainformációk megjelenítése" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "Elfogadás" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "Adatok betöltése" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "Rossz válasz a kiszolgálótól" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "Űrlap adat hiányzik a kiszolgálótól kapott válaszban" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "Form adat küldési hiba" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "JSON válasz hiányzó form adatok" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "Error 400: Rossz kérelem" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "A kiszolgáló 400-as hibakódot adott vissza" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "Form adat lekérése sikertelen" @@ -12268,7 +13013,7 @@ msgstr "Nem találhatók hírek" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "Azonosító" @@ -12296,400 +13041,404 @@ msgstr "Nincsenek olvasatlan értesítések" msgid "Notifications will load here" msgstr "Az értesítések itt fognak megjelenni" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "Egyéb tétel hozzáadása" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "Rendelés exportálása" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "Sor másolása" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "Sor szerkesztése" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "Sor törlése" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "Nem találhatók sortételek" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "Sor másolása" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "Sor szerkesztése" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "Sor törlése" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "Alkatrész tulajdonságok" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "Alkatrész létrehozási opciók" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "Alkatrész másolási opciók" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "Alkatrész kategória hozzáadása" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "Felsőbb szintű alkatrész kategória" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "Ikon (opcionális) - Az összes ikon felfedezése itt" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "Alkatrész kategória létrehozása" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "Új kategória létrehozása ez után" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "Alkatrész kategória létrehozva" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "Alkatrész kategória szerkesztése" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "Biztos hogy törölni szeretnéd ezt az alkatrész kategóriát?" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "Áthelyezés fentebbi kategóriába" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "Alkatrész kategória törlése" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "A kategóriában lévő alkatrészek kezelése" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "Alkategóriák kezelése" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "Alkatrész létrehozása" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "Új alkatrész létrehozása ez után" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "Alkatrész sikeresen létrehozva" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "Alkatrész szerkesztése" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "Alkatrész módosítva" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "Alkatrész változat létrehozása" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "Aktív alkatrész" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "Alkatrész nem törölhető mivel még aktív" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "Ezen alkatrész törlése nem vonható vissza" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "Ennek az alkatrésznek a teljes készlete törölve lesz" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "Ez az alkatrész minden alkatrészjegyzékből törölve lesz" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "Ehhez az alkatrészhez rendelt minden beszállítói és gyártói információ törölve lesz" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "Alkatrész törlése" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "Értesítések beállítva erre a tételre" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "Értesítések beállítva erre a tételre" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "Értesítések kérése erre a tételre" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "Értesítések letiltva erre a tételre" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "Az alkatrészjegyzék jóváhagyása minden sortételt jóvá fog hagyni" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "Alkatrészjegyzék jóváhagyása" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "Alkatrészjegyzék jóvá lett hagyva" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "Alkatrészjegyzék másolása" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "Alacsony készlet" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "Nincs elérhető készlet" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "Igény" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "Me" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "Virtuális alkatrész" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "Értesítésre beállított alkatrész" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "Értékesíthető alkatrész" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "Új leltár riport ütemezése." -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "Amint elkészül, az új leltár riport letölthető lesz." -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "Leltár riport létrehozása" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "Leltár riport beütemezve" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "Nincs elérhető leltár előzmény" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "Leltár bejegyzés szerkesztése" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "Leltár bejegyzés törlése" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "Nincs több változat" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "Nincs alkatrész paraméter sablon" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "Alkatrész paraméter sablon módosítása" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "Az összes erre a sablonra hivatkozó paraméter is törlésre kerül" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "Alkatrész paraméter sablon törlése" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "Nem található beszerzési rendelés" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: 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:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "Sortétel bevételezése" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "Alkatrész kapcsolatok törlése" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "Alkatrész kapcsolatok törlése" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "Nincs alkatrész" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "Kategória beállítása a kiválasztott alkatrészekhez" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "Alkatrész kategória beállítása" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "Kategória beállítása" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "alkatrész" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "alkatrészek" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "Nincs kategória" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "Megjelenítés listaként" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "Megjelenítés rácsnézetként" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 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:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "Megjelenítés fában" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "Alkategóriák betöltése" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "Értesítésre beállított kategória" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "Nincs a lekérdezéssel egyező teszt sablon" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "találat" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" -msgstr "Teszt eredmény szerkesztése" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" +msgstr "" -#: templates/js/translated/part.js:2938 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:2953 +msgid "Delete test template" +msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 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:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "Teszt eredmény sablon szerkesztése" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "Teszt eredmény sablon törlése" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "Nincs megadva dátum" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "A megadott dátum a múltban van" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "Spekulatív" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 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:3116 +#: templates/js/translated/part.js:3131 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:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "Ütemezett készlet mennyiség" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "Maximum mennyiség" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "Minimális készlet" @@ -12902,109 +13651,122 @@ msgstr "Beérkezett mennyiség" msgid "Quantity to receive" msgstr "Érkező mennyiség" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "Készlet állapota" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "Vonalkód hozzáadása" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "Vonalkód eltávolítása" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "Add meg a helyet" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "Batch kód hozzáadása" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "Sorozatszám hozzáadása" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "Sorozatszámok" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "Rendelési kód" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "Érkező mennyiség" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "Bevételezés megerősítése" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "Beszerzési rendelés tételeinek bevételezése" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "Tétel vonalkód beolvasása" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "Beérkezett tétel vonalkódjának leolvasása (egyik meglévő készlet tétellel sem egyezhet)" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "Érvénytelen vonalkód adat" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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:1843 +#: templates/js/translated/purchase_order.js:1913 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:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "Töröljük a kiválasztott sortételeket?" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "Sortétel másolása" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "Sortétel szerkesztése" -#: templates/js/translated/purchase_order.js:1942 -#: templates/js/translated/return_order.js:681 +#: templates/js/translated/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "Sortétel törlése" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "Sortétel másolása" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/return_order.js:800 +#: templates/js/translated/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "Sortétel szerkesztése" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:804 +#: templates/js/translated/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "Sortétel törlése" @@ -13059,16 +13821,16 @@ msgstr "Nem található visszavétel" msgid "Invalid Customer" msgstr "Érvénytelen vevő" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "Visszavétel tételeinek bevételezése" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "Nincs egyező sortétel" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "Tétel bevételezve" @@ -13227,7 +13989,7 @@ msgstr "Készlet foglalások törlése" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "Vevőnek kiszállítva" @@ -13285,505 +14047,521 @@ msgstr "Eredmények összezárása" msgid "Remove results" msgstr "Eredmények eltávolítása" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "Készlet tétel sorszámozása" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 msgid "Confirm Stock Serialization" msgstr "Készlet sorozatszámozás megerősítése" -#: templates/js/translated/stock.js:139 -msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" -msgstr "Alapértelmezett ikon minden készlethelyre melyhez nincs ikon rendelve (választható) - Válogass az ikonok közül" - -#: templates/js/translated/stock.js:152 -msgid "Parent stock location" -msgstr "Felsőbb szintű készlet hely" - -#: templates/js/translated/stock.js:166 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "Készlethely típus hozzáadása" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "Készlet hely szerkesztése" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "Új készlet hely" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "Új készlethely létrehozása ez után" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "Készlet hely létrehozva" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "Biztosan törölni szeretnéd ezt a készlet helyet?" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "Szülő készlet helyre mozgatás" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "Készlethely törlése" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "Műveletek az ezen a helyen lévő tételekhez" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "Műveletek az al-helyekhez" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "Ezt az alkatrészt nem lehet sorozatszámozni" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "Mennyiség hozzáadása csomagolási egységenként egyedi tételek helyett" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "Add meg a kezdeti mennyiséget ehhez a készlet tételhez" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Add meg az új készlet tételhez tartozó sorozatszámokat (vagy hagyd üresen)" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "Készlet tétel lemásolva" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "Készlet tétel másolása" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "Biztosan törölni szeretnéd ezt a készlet tételt?" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "Készlet tétel törlése" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "Készlet tétel szerkesztése" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "Új tétel létrehozása ez után" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "Készlet tétel létrehozva" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "Több készlet tétel létre lett hozva" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "Sorozatszám keresése" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "Sorozatszám megadása" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "Adj meg egy sorozatszámot" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "Nincs egyező sorozatszám" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "Több egyező eredmény is van" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "Készlet hozzárendelés jóváhagyása" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "Készlet vevőhöz rendelése" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "Figyelem: az összevonási művelet nem vonható vissza" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "Némi információ elveszik a készlet összevonás során" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "A készlettörténet törölve lesz az összevont tételeknél" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "A beszállítói alkatrész információk törlődnek az összevont tételeknél" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "Készlet összevonás megerősítése" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "Készlet tételek összevonása" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "Készlet áthelyezése" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "Áthelyezés" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "Leltározás" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "Leltár" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "Készlet csökkentése" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "Kivesz" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "Készlet növelése" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Hozzáad" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "Készlet törlése" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 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:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "Készlet mennyiség megadása" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "Készlet tételek kiválasztása" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 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:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "Készlet módosítás jóváhagyása" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "SIKER" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "SIKERTELEN" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "NINCS EREDMÉNY" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "Teszt sikeres" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "Teszt eredmény hozzáadása" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "Teszt eredmény szerkesztése" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "Teszt eredmény törlése" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "Nincs teszt eredmény" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "Teszt dátuma" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "Teszt elkezdődött" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "Teszt befejezve" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "Teszt eredmény szerkesztése" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "Teszt eredmény törlése" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "Gyártásban" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "Beépítve készlet tételbe" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "Vevő rendeléshez hozzárendelve" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "Nincs hely megadva" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "Készlet állapot módosítása" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "Készlet összevonása" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "Készlet törlése" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "készlet tételek" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "Beolvasás helyre" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "Készlet műveletek" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "Beépített tételek betöltése" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "Készlet tétel gyártás alatt" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "Készlet tétel hozzárendelve egy vevői rendeléshez" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "Egyedi követésre kötelezett készlet tétel lefoglalva" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "Készlet tétel teljes egészében lefoglalva" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "Készlet tétel részben lefoglalva" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 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:2111 +#: templates/js/translated/stock.js:2196 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:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "Készlet tétel lejárt" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "Készlet tétel hamarosan lejár" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "Készlet tétel elutasítva" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "Készlet tétel elveszett" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "Készlet tétel megsemmisült" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "Kimerült" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "Beszállítói alkatrész nincs megadva" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "Készletérték" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "Nincs a lekérdezésnek megfelelő készlet tétel" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "készlethelyek" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "Alhelyek betöltése" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "Részletek" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "Nincs változás" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "Alkatrész információ nem áll rendelkezésre" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "A hely már nem létezik" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "A gyártási utasítás már nem létezik" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "Beszerzési megrendelés már nem létezik" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "Vevői megrendelés már nem létezik" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "Visszavétel már nem létezik" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "Vevő már nem létezik" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "A készlet tétel már nem létezik" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "Hozzáadva" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "Eltávolítva" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "Nincsenek beépített tételek" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "Készlet tétel kiszedése" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "Válaszd ki a kiszedni való készlet tételt" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "Másik tétel beépítése ebbe a készlet tételbe" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "Készlet tételek csak akkor építhetők be ha teljesítik a következő kritériumokat" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "A készlet tétel egy olyan alkatrészre mutat ami alkatrészjegyzéke ennek a készlet tételnek" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "A készlet tétel jelenleg elérhető készleten" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "A készlet tétel még nem épült be egy másik tételbe" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "A készlet tétel követett vagy sorozatszámmal vagy batch kóddal" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "Válaszd ki a beépítendő alkatrészt" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "Válassz ki egy vagy több készlet tételt" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "Kiválasztott készlet tételek" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "Készlet állapot módosítása" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +msgstr "" + #: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "Van projektszáma" #: 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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 msgid "Order status" msgstr "Rendelés állapota" #: 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 msgid "Outstanding" msgstr "Kintlévő" #: 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "Hozzám rendelt" @@ -13818,12 +14596,12 @@ msgstr "Van készlethely típusa" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "Alkategóriákkal együtt" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "Értesítés beállítva" @@ -13865,7 +14643,7 @@ msgid "Batch code" msgstr "Batch kód" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "Aktív alkatrész" @@ -13966,52 +14744,64 @@ msgstr "Teszten megfelelt" msgid "Include Installed Items" msgstr "Beépített tételekkel együtt" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "Gyártási állapot" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "Alkategóriákkal együtt" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "Aktív alkatrészek megjelenítése" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "Elérhető" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "Van mértékegysége" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "Az alkatrésznek van megadva mértékegysége" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "Van IPN-je" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "Van belső cikkszáma" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "Készleten" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "Beszerezhető" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "Volt leltár" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "Vannak lehetőségei" @@ -14083,10 +14873,6 @@ msgstr "Lapozó elrejtése/megjelenítése" msgid "Toggle" msgstr "Átváltás" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Oszlopok" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "Összes" @@ -14288,6 +15074,14 @@ msgstr "Email beállítások" msgid "Email settings not configured" msgstr "Email beállítások hiányoznak" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Igen" @@ -14360,35 +15154,35 @@ msgstr "Token utolsó használata" msgid "Revoked" msgstr "Visszavonva" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Jogosultságok" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Csoport" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Nézet" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Jogosultság tételek megtekintéséhez" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Jogosultság tételek hozzáadásához" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Módosítás" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Jogosultság tételek szerkesztéséhez" -#: users/models.py:413 +#: users/models.py:408 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 baf67d03fc..8d8ba881c6 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint tidak ditemukan" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Pengguna tidak memiliki izin untuk melihat model ini" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "Detail terkait galat dapat dilihat di panel admin" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Masukkan tanggal" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Catatan" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "Nilai yang diberikan tidak sesuai dengan pola yang ditentukan: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Masukkan sandi" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Masukkan kata sandi baru" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Konfirmasikan kata sandi" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Konfirmasi sandi baru" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Kata sandi lama" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (ulang)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Konfirmasi alamat email" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Masukkan email yang sama." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Alamat surel utama yang diberikan tidak valid." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Domain surel yang diberikan tidak perbolehkan." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Nomor seri kosong" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Tidak ada nomor seri ditemukan" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Hapus tag-tag HTML dari nilai ini" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Ukuran gambar terlalu besar" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "URL yang diberikan bukan file gambar yang valid" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 +msgid "Bulgarian" +msgstr "" + +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Ceko" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Denmark" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Jerman" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Yunani" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Inggris" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spanyol" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spanyol (Meksiko)" -#: InvenTree/locales.py:26 -msgid "Farsi / Persian" -msgstr "Farsi / Persia" - #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 +msgid "Farsi / Persian" +msgstr "Farsi / Persia" + +#: InvenTree/locales.py:29 +msgid "Finnish" +msgstr "" + +#: InvenTree/locales.py:30 msgid "French" msgstr "Perancis" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Ibrani" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Hungaria" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Itali" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Jepang" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Korea" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Belanda" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norwegia" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polandia" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugis" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugis (Brasil)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Rusia" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Swedia" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turki" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnam" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Surel" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "File tidak ditemukan" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Tautan eksternal tidak ditemukan" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Lampiran" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Pilih file untuk dilampirkan" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Tautan menuju URL eksternal" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Komentar" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Komentar file" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "tanggal diunggah" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Nama file tidak boleh kosong" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Direktori lampiran tidak valid" - -#: 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:668 -msgid "Filename missing extension" -msgstr "Nama file tidak memiliki ekstensi" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Lampiran dengan nama file ini sudah ada" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Kesalahan merubah nama file" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Pilihan tidak valid" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Nama" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Keterangan" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "induk" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Direktori" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Data Barcode" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Data barcode pihak ketiga" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Hash unik data barcode" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Sudah ada barcode yang sama" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Terjadi Kesalahan Server" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Mata Uang" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Nama File" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Nilai tidak valid" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "File data" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Pilih file untuk diunggah" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Jenis file tidak didukung" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Ukuran file terlalu besar" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Tidak ditemukan kolom dalam file" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Tidak ditemukan barisan data dalam file" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Tidak ada barisan data tersedia" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Tidak ada kolom data tersedia" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Kolom yang diperlukan kurang: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Kolom duplikat: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL file gambar external" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "Pengecekan kesehatan sistem InvenTree gagal" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Bukan kode mata uang yang valid" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Nilai kelebihan tidak boleh negatif" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Kelebihan tidak boleh melebihi 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Nilai kelebihan tidak valid" @@ -750,62 +727,63 @@ msgstr "Informasi Sistem" msgid "About InvenTree" msgstr "Tentang InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Order Produksi" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Order Produksi" msgid "Build Orders" msgstr "Order Produksi" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Pilihan produksi induk tidak valid" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referensi" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Produksi Induk" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Produksi induk dari produksi ini" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Produksi induk dari produksi ini" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Bagian" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Pilih bagian untuk diproduksi" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Referensi Order Penjualan" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Order penjualan yang teralokasikan ke pesanan ini" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Lokasi Sumber" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Lokasi Tujuan" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Pilih lokasi di mana item selesai akan disimpan" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Jumlah Produksi" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Jumlah item stok yang akan dibuat" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Item selesai" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Jumlah stok item yang telah diselesaikan" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Status pembuatan" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Tanggal Pembuatan" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Target tanggal selesai" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Tanggal selesai" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "diselesaikan oleh" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Diserahkan oleh" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Penanggung Jawab" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Tautan menuju URL eksternal" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Tujuan stok item" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:279 +#: build/serializers.py:289 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:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Lokasi" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:316 +#: build/serializers.py:326 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 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:713 +#: build/serializers.py:750 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:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 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:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:914 +#: build/serializers.py:954 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:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "Produksi" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Selesai" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Tampilkan kode QR" @@ -1599,9 +1742,9 @@ msgstr "Tampilkan kode QR" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Ubah Produksi" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Batalkan Produksi" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Batalkan Produksi" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Hapus Produksi" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Selesaikan Produksi" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Deskripsi Produksi" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Tidak ada hasil pesanan yang dibuat oleh pesanan ini" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" -msgstr "Surel diperlukan" - -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" -msgstr "" +msgid "Email required" +msgstr "Surel diperlukan" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Pengguna" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Tautan" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Lampiran" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "File tidak ditemukan" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Tautan eksternal tidak ditemukan" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Pilih file untuk dilampirkan" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Komentar" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Nama File" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "Diletakkan" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Hilang" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Dikembalikan" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Tidak ada tindakan yang ditentukan" msgid "No matching action found" msgstr "Aksi tidak ditemukan" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "Lampiran perlu diunggah untuk tes ini" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "Lampiran perlu diunggah untuk tes ini" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Item stok dibuat" @@ -9431,7 +10173,7 @@ msgstr "Dipisah dari item induk" msgid "Split child item" msgstr "Pisah item dari barang induk" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Stok item digabungkan" @@ -9451,7 +10193,7 @@ msgstr "Order output produksi selesai" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Terpakai oleh order produksi" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Produksi" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "Alamat surel berikut dikaitkan dengan akun Anda:" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "Konfirmasi alamat surel" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Harap konfirmasikan bahwa %(email)s adalah alamat surel untuk pengguna %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Konfirmasi" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "Pengaturan Surel" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 74df3343c3..c68bba7d34 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -21,14 +21,14 @@ msgstr "" msgid "API endpoint not found" msgstr "Endpoint API non trovato" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "L'utente non ha i permessi per vedere questo modello" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "Unità fornita non valida ({unit})" #: InvenTree/conversion.py:177 msgid "No value provided" @@ -52,30 +52,34 @@ msgstr "Quantità fornita non valida ({exc})" msgid "Error details can be found in the admin panel" msgstr "I dettagli dell'errore possono essere trovati nel pannello di amministrazione" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Inserisci la data" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Note" @@ -88,517 +92,437 @@ msgstr "Il valore '{name}' non è nel formato del pattern" msgid "Provided value does not match required pattern: " msgstr "Il valore fornito non corrisponde al modello richiesto: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Inserire la password" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Inserire una nuova password" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Conferma la password" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Conferma la nuova password" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Vecchia password" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (ancora)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Conferma indirizzo email" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "È necessario digitare la stessa e-mail ogni volta." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "L'indirizzo email principale fornito non è valido." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "L'indirizzo di posta elettronica fornito non è approvato." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "La registrazione è disabilitata." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Numero seriale vuoto" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Seriale Duplicato" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Intervallo di gruppo non valido: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "L'intervallo di gruppo {group} supera la quantità consentita ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Sequenza di gruppo non valida: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Nessun numero di serie trovato" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Il numero di numeri di serie univoci ({len(serials)}) deve corrispondere alla quantità ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Rimuovi i tag HTML da questo valore" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Errore di connessione" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Il server ha risposto con un codice di stato non valido" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Si è verificata un'eccezione" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Il server ha risposto con valore Content-Length non valido" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Immagine troppo grande" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Il download dell'immagine ha superato la dimensione massima" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Il server remoto ha restituito una risposta vuota" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "Arabo" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgaro" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Ceco" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Danese" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Tedesco" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Greco" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Inglese" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spagnolo" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spagnolo (Messicano)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "Estone" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Persiano" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finlandese" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Francese" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Ebraico" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" -msgstr "" +msgstr "Hindi" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Ungherese" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italiano" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Giapponese" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Coreano" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" -msgstr "" +msgstr "Lettone" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Olandese" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norvegese" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polacco" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portoghese" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portoghese (Brasile)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Rumeno" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Russo" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" -msgstr "" +msgstr "Slovacco" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Sloveno" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Serbo" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Svedese" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Thailandese" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turco" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" -msgstr "" +msgstr "Ucraino" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Cinese (Semplificato)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Cinese (Tradizionale)" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "" +msgstr "[{site_name}] Accedi all'app" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "" +msgstr "Email" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" -msgstr "" +msgstr "Errore nell'eseguire la convalida del plugin" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "I metadati devono essere un oggetto python dict" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Metadati Plugin" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "Campo di metadati JSON, da utilizzare con plugin esterni" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Schema formattato impropriamente" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Formato chiave sconosciuta" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Formato chiave mancante" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Il campo di riferimento non può essere vuoto" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Il campo deve corrispondere al modello richiesto" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Numero di riferimento troppo grande" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "File mancante" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Link esterno mancante" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Allegato" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Seleziona file da allegare" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Link a URL esterno" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Commento" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Commento del file" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "data caricamento" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Il nome del file non deve essere vuoto" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Directory allegati non valida" - -#: 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:668 -msgid "Filename missing extension" -msgstr "Nome file estensione mancante" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Esiste già un allegato con questo nome di file" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Errore nella rinominazione del file" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomi duplicati non possono esistere sotto lo stesso genitore" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Descrizione" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "genitore" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Percorso" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Note di Markdown (opzionale)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Dati del Codice a Barre" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Dati Codice a Barre applicazioni di terze parti" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Codice a Barre" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Codice univoco del codice a barre" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Trovato codice a barre esistente" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Errore del server" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Valuta" msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Nome utente" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Nome" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "Nome dell'utente" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Cognome" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "Cognome dell'utente" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "Indirizzo email dell'utente" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "Staff" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "Questo utente ha i permessi dello staff" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "Superuser" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "Questo utente è un superutente" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Attivo" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "Questo account utente è attivo" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Non hai i permessi per cambiare il ruolo dell'utente." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Solo i superutenti possono creare nuovi utenti" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." -msgstr "" +msgstr "Il tuo account è stato creato." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" -msgstr "" +msgstr "Si prega di utilizzare la funzione di reset password per accedere" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" -msgstr "" +msgstr "Benvenuto in InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Nome del file" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Valore non valido" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "File dati" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Seleziona un file per il caricamento" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Formato file non supportato" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "File troppo grande" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Nessun colonna trovata nel file" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Nessuna riga di dati trovata nel file" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Nessun dato fornito" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Nessuna colonna di dati fornita" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Colonna richiesta mancante: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Colonna duplicata: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Immagine Remota" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL del file immagine remota" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Controllo in background non riuscito" @@ -702,27 +679,27 @@ msgstr "Server di posta non configurato" msgid "InvenTree system health checks failed" msgstr "Controlli di sistema InvenTree falliti" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Database sconosciuto" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Unità fisica non valida" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Il sovra-valore non può essere negativo" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "L'eccesso non deve superare il 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Valore non valido per eccedenza" @@ -750,62 +727,63 @@ msgstr "Informazioni sistema" msgid "About InvenTree" msgstr "Informazioni Su InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Opzionale" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Monitorato" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Allocato" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Disponibile" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Ordine di Produzione" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Ordine di Produzione" msgid "Build Orders" msgstr "Ordini di Produzione" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "Assembly BOM non è stato convalidato" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "L'ordine di generazione non può essere creato per una parte inattiva" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "L'ordine di compilazione non può essere creato per una parte sbloccata" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Scelta non valida per la produzione genitore" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "L'utente o il gruppo responsabile deve essere specificato" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "L'ordine di costruzione della parte non può essere cambiata" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Riferimento" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Breve descrizione della build (facoltativo)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Produzione Genitore" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Ordine di produzione a cui questa produzione viene assegnata" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Ordine di produzione a cui questa produzione viene assegnata" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Articolo" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Selezionare parte da produrre" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Numero di riferimento ordine di vendita" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Ordine di vendita a cui questa produzione viene assegnata" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Posizione Di Origine" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Posizione Della Destinazione" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Quantità Produzione" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Numero di articoli da costruire" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Articoli completati" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Numero di articoli di magazzino che sono stati completati" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Stato Produzione" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Data completamento obiettivo" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Data di completamento" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "Completato da" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Rilasciato da" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Responsabile" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Link a URL esterno" + +#: build/models.py:381 msgid "Build Priority" msgstr "Priorità di produzione" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Priorità di questo ordine di produzione" msgid "Project Code" msgstr "Codice del progetto" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Codice del progetto per questo ordine di produzione" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "L'ordine di produzione {build} è stato completato" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Crea oggetto" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Crea oggetto" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Quantità" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Installa in" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Nome Articolo" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:279 +#: build/serializers.py:289 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:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Posizione" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:316 +#: build/serializers.py:326 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 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Stato" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:527 +#: build/serializers.py:537 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:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:681 +#: build/serializers.py:718 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:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:713 +#: build/serializers.py:750 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:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:838 +#: build/serializers.py:878 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:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:907 +#: build/serializers.py:947 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:914 +#: build/serializers.py:954 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:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:1016 +#: build/serializers.py:1056 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:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Codice articolo produttore" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "Nome Ubicazione" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Confezionamento" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "Codice Articolo" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "IPN Articolo" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Descrizione Articolo" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Numero Seriale" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Quantità Disponibile" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Tracciabile" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "Consenti Le Varianti" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Ordinato" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Disponibilità in magazzino" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "In attesa" @@ -1540,15 +1677,21 @@ msgstr "In attesa" msgid "Production" msgstr "Produzione" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Completo" @@ -1576,8 +1719,8 @@ msgstr "Anteprima parte" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Azioni Barcode" @@ -1588,7 +1731,7 @@ msgstr "Azioni Barcode" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Mostra QR Code" @@ -1599,9 +1742,9 @@ msgstr "Mostra QR Code" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Scollega Codice a Barre" @@ -1612,7 +1755,7 @@ msgstr "Scollega Codice a Barre" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Collega Codice a Barre" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Modica Produzione" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Annulla Produzione" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "Duplica Produzione" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Annulla Produzione" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Elimina Produzione" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Completa Produzione" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Descrizione Produzione" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Nessun output di produzione è stato creato per questo ordine di produzione" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "L'ordine di produzione è pronto per essere contrassegnato come completato" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "L'ordine di produzione non può essere completato poiché gli output rimangono in sospeso" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 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/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Data scadenza" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Questa produzione era in scadenza il %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "In ritardo" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Outputs Completati" -#: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Outputs Completati" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Ordini di Vendita" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Inviato da" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Priorità" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "Elimina ordine di produzione" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "Genera Codice QR Ordine di produzione" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "Collega il codice a barre all'ordine di produzione" @@ -1766,8 +1930,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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Destinazione" @@ -1779,23 +1943,23 @@ msgstr "Posizione di destinazione non specificata" msgid "Allocated Parts" msgstr "Articoli Assegnati" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" 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:190 -#: templates/js/translated/build.js:2199 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Creato" @@ -1804,8 +1968,8 @@ msgid "No target date set" msgstr "Nessuna data di destinazione impostata" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Completato" @@ -1813,13 +1977,13 @@ msgstr "Completato" msgid "Build not complete" msgstr "Build Completata" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Ordine di Produzione Subordinato" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Assegna Scorte alla Produzione" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Assegnazione Automatica" msgid "Manually allocate stock to build" msgstr "Assegna manualmente le scorte per la produzione" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Assegna Scorte" @@ -1870,15 +2034,19 @@ msgstr "Crea nuova produzione" msgid "New Build Output" msgstr "Nuova Produzione" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Produzioni Completate" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Produzioni Completate" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Allegati" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Genera Note" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Nuovo Ordine di Produzione" @@ -1914,10 +2082,37 @@ msgstr "Nuovo Ordine di Produzione" msgid "Build Order Details" msgstr "Dettagli Ordine di Produzione" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Output Incompleti" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "Seleziona il file {name} da caricare" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Aggiornato" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Orario dell'ultimo aggiornamento" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Codice unico del progetto" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Descrizione del progetto" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole)" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "Valore impostazioni" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "Il valore specificato non è un opzione valida" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Il valore deve essere un valore booleano" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Il valore deve essere un intero" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Nessun gruppo" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Riavvio richiesto" -#: common/models.py:1214 +#: common/models.py:1233 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:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Nome Istanza Del Server" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "Descrittore stringa per l'istanza del server" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Utilizza nome istanza" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "Usa il nome dell'istanza nella barra del titolo" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Limita visualizzazione `Informazioni`" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "Mostra la modalità `Informazioni` solo ai superusers" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Nome azienda" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Nome interno dell'azienda" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "URL Base" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "URL di base per l'istanza del server" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Valuta predefinita" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "giorni" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Scarica dall'URL" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Limite Dimensione Download" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "Dimensione massima consentita per il download dell'immagine remota" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "User-agent utilizzato per scaricare dall'URL" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Richiesta conferma" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Richiede una conferma esplicita dell'utente per una determinata azione." -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Profondità livelli" -#: common/models.py:1322 +#: common/models.py:1341 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:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Aggiorna intervallo di controllo" -#: common/models.py:1329 +#: common/models.py:1348 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:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Backup automatico" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "Abilita il backup automatico di database e file multimediali" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Intervallo Di Backup Automatico" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "Definisci i giorni intercorrenti tra un backup automatico e l'altro" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 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:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 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:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 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:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "Codice a barre inserito scaduto" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "Tempo di ritardo di elaborazione codice a barre" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "Codice a Barre Supporto Webcam" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "Abilita il campo revisione per l'articolo" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/models.py:1417 +#: common/models.py:1454 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:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/models.py:1423 +#: common/models.py:1460 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:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/models.py:1429 +#: common/models.py:1466 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:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "Copia I Dati dell'Articolo Test" -#: common/models.py:1435 +#: common/models.py:1472 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:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Modello" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Assemblaggio" -#: common/models.py:1453 +#: common/models.py:1490 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:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Componente" -#: common/models.py:1459 +#: common/models.py:1496 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:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Acquistabile" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Vendibile" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Virtuale" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Mostra l'importazione nelle viste" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "Mostra la procedura guidata di importazione in alcune viste articoli" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Dati iniziali dello stock" -#: common/models.py:1501 +#: common/models.py:1538 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:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Dati iniziali del fornitore" -#: common/models.py:1508 +#: common/models.py:1545 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:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "Icona predefinita Categoria Articolo" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Usa Prezzi Fornitore" -#: common/models.py:1562 +#: common/models.py:1600 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:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Ignora la Cronologia Acquisti" -#: common/models.py:1570 +#: common/models.py:1608 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:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Utilizzare i prezzi degli articoli in stock" -#: common/models.py:1578 +#: common/models.py:1616 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:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Età dei prezzi degli articoli in stock" -#: common/models.py:1586 +#: common/models.py:1624 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:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Utilizza Variazione di Prezzo" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Solo Varianti Attive" -#: common/models.py:1601 +#: common/models.py:1639 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:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 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:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Sovrascrivi Prezzo Interno" -#: common/models.py:1624 +#: common/models.py:1662 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:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Abilita stampa etichette" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Abilita la stampa di etichette dall'interfaccia web" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "Etichetta Immagine DPI" -#: common/models.py:1638 +#: common/models.py:1676 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:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Abilita Rapporto di Prova" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Abilita generazione di stampe di prova" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Allega Rapporto di Prova" -#: common/models.py:1676 +#: common/models.py:1714 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:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "Seriali Unici Globali" -#: common/models.py:1683 +#: common/models.py:1721 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:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Auto Riempimento Numeri Seriali" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "Auto riempimento numeri nel modulo" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "Elimina scorte esaurite" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "Modello Codice a Barre" -#: common/models.py:1704 +#: common/models.py:1742 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:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Tempo di Scorta del Magazzino" -#: common/models.py:1723 +#: common/models.py:1761 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:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Crea giacenza scaduta" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "Permetti produzione con stock scaduto" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/models.py:1737 +#: common/models.py:1775 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:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "Icona Predefinita Ubicazione di Magazzino" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "Icona Predefinita Ubicazione di Magazzino (vuoto significa nessuna icona)" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Produzione" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di produzione" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1785 +#: common/models.py:1844 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1791 +#: common/models.py:1850 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1792 +#: common/models.py:1851 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1797 +#: common/models.py:1856 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1799 +#: common/models.py:1858 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1811 +#: common/models.py:1870 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1813 +#: common/models.py:1872 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Vendita" -#: common/models.py:1821 +#: common/models.py:1880 msgid "Required pattern for generating Sales Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di vendita" -#: common/models.py:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "Spedizione Predefinita Ordine Di Vendita" -#: common/models.py:1834 +#: common/models.py:1893 msgid "Enable creation of default shipment with sales orders" msgstr "Abilita la creazione di spedizioni predefinite con ordini di vendita" -#: common/models.py:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "Modifica Ordini Di Vendita Completati" -#: common/models.py:1841 +#: common/models.py:1900 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:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "Modello di Riferimento Ordine D'Acquisto" -#: common/models.py:1857 +#: common/models.py:1916 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di acquisto" -#: common/models.py:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "Modifica Ordini Di Acquisto Completati" -#: common/models.py:1871 +#: common/models.py:1930 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:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/models.py:1887 +#: common/models.py:1946 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/models.py:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/models.py:1893 +#: common/models.py:1952 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/models.py:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "Abilita registrazione SSO" -#: common/models.py:1906 +#: common/models.py:1965 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:1912 +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 msgid "Email required" msgstr "Email richiesta" -#: common/models.py:1913 +#: common/models.py:2004 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/models.py:1918 +#: common/models.py:2009 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/models.py:1920 +#: common/models.py:2011 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:1926 +#: common/models.py:2017 msgid "Mail twice" msgstr "Posta due volte" -#: common/models.py:1927 +#: common/models.py:2018 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:1932 +#: common/models.py:2023 msgid "Password twice" msgstr "Password due volte" -#: common/models.py:1933 +#: common/models.py:2024 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:1938 +#: common/models.py:2029 msgid "Allowed domains" msgstr "Domini consentiti" -#: common/models.py:1940 +#: common/models.py:2031 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1946 +#: common/models.py:2037 msgid "Group on signup" msgstr "Gruppo iscrizione" -#: common/models.py:1947 -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:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" -#: common/models.py:1952 +#: common/models.py:2045 msgid "Enforce MFA" msgstr "Applica MFA" -#: common/models.py:1953 +#: common/models.py:2046 msgid "Users must use multifactor security." msgstr "Gli utenti devono utilizzare la sicurezza a due fattori." -#: common/models.py:1958 +#: common/models.py:2051 msgid "Check plugins on startup" msgstr "Controlla i plugin all'avvio" -#: common/models.py:1960 +#: common/models.py:2053 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:1968 +#: common/models.py:2061 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1969 +#: common/models.py:2062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1975 +#: common/models.py:2068 msgid "Enable URL integration" msgstr "Abilita l'integrazione URL" -#: common/models.py:1976 +#: common/models.py:2069 msgid "Enable plugins to add URL routes" msgstr "Attiva plugin per aggiungere percorsi URL" -#: common/models.py:1982 +#: common/models.py:2075 msgid "Enable navigation integration" msgstr "Attiva integrazione navigazione" -#: common/models.py:1983 +#: common/models.py:2076 msgid "Enable plugins to integrate into navigation" msgstr "Abilita i plugin per l'integrazione nella navigazione" -#: common/models.py:1989 +#: common/models.py:2082 msgid "Enable app integration" msgstr "Abilita l'app integrata" -#: common/models.py:1990 +#: common/models.py:2083 msgid "Enable plugins to add apps" msgstr "Abilita plugin per aggiungere applicazioni" -#: common/models.py:1996 +#: common/models.py:2089 msgid "Enable schedule integration" msgstr "Abilita integrazione pianificazione" -#: common/models.py:1997 +#: common/models.py:2090 msgid "Enable plugins to run scheduled tasks" msgstr "Abilita i plugin per eseguire le attività pianificate" -#: common/models.py:2003 +#: common/models.py:2096 msgid "Enable event integration" msgstr "Abilita eventi integrati" -#: common/models.py:2004 +#: common/models.py:2097 msgid "Enable plugins to respond to internal events" msgstr "Abilita plugin per rispondere agli eventi interni" -#: common/models.py:2010 +#: common/models.py:2103 msgid "Enable project codes" msgstr "" -#: common/models.py:2011 +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "Funzionalità Dell'Inventario" -#: common/models.py:2018 +#: common/models.py:2111 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:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2026 +#: common/models.py:2119 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "Inventario periodico automatico" -#: common/models.py:2034 +#: common/models.py:2127 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:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2042 +#: common/models.py:2135 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:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 msgid "Settings key (must be unique - case insensitive" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole" -#: common/models.py:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "Nascondi Articoli Inattivi" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Mostra articoli sottoscritti" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Mostra gli articoli sottoscritti nella homepage" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Mostra le categorie sottoscritte" -#: common/models.py:2126 +#: common/models.py:2219 msgid "Show subscribed part categories on the homepage" msgstr "Mostra le categorie dei componenti sottoscritti nella homepage" -#: common/models.py:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Mostra ultimi articoli" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "Mostra gli ultimi articoli sulla homepage" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2138 +#: common/models.py:2231 msgid "Show BOMs that await validation on the homepage" msgstr "Mostra le distinte base che attendono la convalida sulla homepage" -#: common/models.py:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "Mostra le modifiche recenti alle giacenze" -#: common/models.py:2144 +#: common/models.py:2237 msgid "Show recently changed stock items on the homepage" msgstr "Mostra le giacenze modificate di recente nella homepage" -#: common/models.py:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Mostra disponibilità scarsa delle giacenze" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "Mostra disponibilità scarsa degli articoli sulla homepage" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "Mostra scorte esaurite" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "Mostra disponibilità scarsa delle scorte degli articoli sulla homepage" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Mostra scorte necessarie" -#: common/models.py:2162 +#: common/models.py:2255 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:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "Mostra scorte esaurite" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "Mostra gli articoli stock scaduti nella home page" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Mostra scorte obsolete" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "Mostra gli elementi obsoleti esistenti sulla home page" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Mostra produzioni in attesa" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Mostra produzioni in attesa sulla homepage" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Mostra produzioni in ritardo" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "Mostra produzioni in ritardo sulla home page" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "Mostra ordini di produzione inevasi" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "Mostra ordini di produzione inevasi sulla home page" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Mostra Ordini di Produzione in ritardo" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "Mostra Ordini di Produzione in ritardo sulla home page" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "Mostra Ordini di Vendita inevasi" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "Mostra Ordini di Vendita inevasi sulla home page" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Mostra Ordini di Vendita in ritardo" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "Mostra Ordini di Vendita in ritardo sulla home page" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Mostra Notizie" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Mostra notizie sulla home page" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:2229 +#: common/models.py:2322 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:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "Stampante per etichette predefinita" -#: common/models.py:2237 +#: common/models.py:2330 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:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:2245 +#: common/models.py:2338 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:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Cerca Articoli" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "Mostra articoli della ricerca nella finestra di anteprima" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" msgstr "Mostra articoli del fornitore nella finestra di anteprima" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "Cerca Articoli Produttore" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" msgstr "Mostra articoli del produttore nella finestra di anteprima" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Nascondi Articoli Inattivi" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" msgstr "Escludi articoli inattivi dalla finestra di anteprima della ricerca" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "Cerca Categorie" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" msgstr "Mostra categorie articolo nella finestra di anteprima di ricerca" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Cerca Giacenze" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "Mostra articoli in giacenza nella finestra di anteprima della ricerca" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Nascondi elementi non disponibili" -#: common/models.py:2289 +#: common/models.py:2382 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:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Cerca Ubicazioni" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "Mostra ubicazioni delle giacenze nella finestra di anteprima di ricerca" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Cerca Aziende" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "Mostra le aziende nella finestra di anteprima di ricerca" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Cerca Ordini Di Produzione" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "Mostra gli ordini di produzione nella finestra di anteprima di ricerca" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Cerca Ordini di Acquisto" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "Mostra gli ordini di acquisto nella finestra di anteprima di ricerca" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Escludi Ordini D'Acquisto Inattivi" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "Escludi ordini di acquisto inattivi dalla finestra di anteprima di ricerca" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Cerca Ordini Di Vendita" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "Visualizzazione degli ordini di vendita nella finestra di anteprima della ricerca" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "Escludi Ordini Di Vendita Inattivi" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" msgstr "Escludi ordini di vendita inattivi dalla finestra di anteprima di ricerca" -#: common/models.py:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "Cerca Ordini Di Reso" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "Risultati Dell'Anteprima Di Ricerca" -#: common/models.py:2357 +#: common/models.py:2450 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:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "Ricerca con regex" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "Mostra quantità nei moduli" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "Visualizzare la quantità di pezzi disponibili in alcuni moduli" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "Il tasto Esc chiude i moduli" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "Utilizzare il tasto Esc per chiudere i moduli modali" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Barra di navigazione fissa" -#: common/models.py:2388 +#: common/models.py:2481 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:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Formato Data" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "Formato predefinito per visualizzare le date" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Programmazione Prodotto" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "Mostra informazioni sulla pianificazione del prodotto" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventario Prodotto" -#: common/models.py:2415 +#: common/models.py:2508 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:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "Lunghezza Stringa Tabella" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" -msgstr "" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Utente" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Prezzo" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "Prezzo unitario in quantità specificata" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "Scadenza" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "Scadenza in cui questa notifica viene ricevuta" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "Nome per questa notifica" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Attivo" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "È questa notifica attiva" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "Token per l'accesso" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Segreto" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "Segreto condiviso per HMAC" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "ID Messaggio" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "Identificatore unico per questo messaggio" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "Host da cui questo messaggio è stato ricevuto" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Intestazione" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "Intestazione di questo messaggio" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Contenuto" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "Contenuto di questo messaggio" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "Scadenza in cui questo messaggio è stato ricevuto" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "Lavorato il" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "Il lavoro su questo messaggio è terminato?" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titolo" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Collegamento" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Pubblicato" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Riepilogo" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "Letto" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "Queste notizie sull'elemento sono state lette?" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "Queste notizie sull'elemento sono state lette?" msgid "Image" msgstr "Immagine" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "File immagine" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Allegato" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "File mancante" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Link esterno mancante" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Seleziona file da allegare" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Commento" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "Elemento ricevuto" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "Errore generato dal plugin" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Nome del file" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Un dominio vuoto non è consentito." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Nome dominio non valido: {domain}" @@ -3766,402 +4092,432 @@ msgstr "Articoli importati" msgid "Previous Step" msgstr "Passaggio Precedente" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Azienda" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Aziende" + +#: company/models.py:117 msgid "Company description" msgstr "Descrizione azienda" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "Descrizione dell'azienda" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Sito Web" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "Sito web aziendale" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Telefono" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Numero di telefono di contatto" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Indirizzo email" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Contatto" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Punto di contatto" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Collegamento alle informazioni aziendali esterne" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "è un cliente" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Vendi oggetti a questa azienda?" -#: company/models.py:171 -msgid "is supplier" -msgstr "è un fornitore" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Acquistate articoli da questa azienda?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "è un produttore" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Questa azienda produce articoli?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" 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:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Azienda" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Indirizzo" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Produttore" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2053 -msgid "MPN" -msgstr "Codice articolo produttore (MPN)" - -#: company/models.py:508 -msgid "Manufacturer Part Number" -msgstr "Codice articolo produttore" - -#: company/models.py:515 -msgid "URL for external manufacturer part link" -msgstr "URL dell'articolo del fornitore" - -#: company/models.py:524 -msgid "Manufacturer part description" -msgstr "Descrizione articolo costruttore" - -#: company/models.py:581 company/models.py:608 company/models.py:824 +#: company/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Articolo di base" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Seleziona articolo" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Produttore" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Seleziona Produttore" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "Codice articolo produttore (MPN)" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "URL dell'articolo del fornitore" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "Descrizione articolo costruttore" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "Nome parametro" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Valore" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Valore del parametro" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Unità" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Unità parametri" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Articolo Fornitore" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" -#: 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Fornitore" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Selezionare un produttore" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Nota" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "costo base" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2424 -msgid "Packaging" -msgstr "Confezionamento" - -#: company/models.py:866 +#: company/models.py:853 msgid "Part packaging" msgstr "Imballaggio del pezzo" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "Quantità Confezione" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "multiplo" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "Ordine multiplo" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "Quantità disponibile dal fornitore" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "Disponibilità Aggiornata" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "Valuta predefinita utilizzata per questo fornitore" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "Inattivo" @@ -4212,7 +4568,7 @@ msgstr "Elimina Azienda" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "Scarica immagine dall'URL" msgid "Delete image" msgstr "Elimina immagine" -#: 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Cliente" @@ -4249,19 +4605,12 @@ msgstr "Cliente" msgid "Uses default currency" msgstr "Valuta predefinita" -#: 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 "Indirizzo" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefono" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "Crea nuovo fornitore" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Nuovo fornitore articolo" @@ -4311,7 +4660,7 @@ msgstr "Articoli Produttore" msgid "Create new manufacturer part" msgstr "Crea nuovo articolo produttore" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Nuovo Produttore Articoli" @@ -4325,7 +4674,7 @@ msgstr "Giacenza Fornitore" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Nuovo Ordine di Acquisto" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ msgstr "Produttori" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Articoli ordinati" @@ -4435,7 +4784,8 @@ 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:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Articolo interno" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ msgstr "Fornitori" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametri" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nuovo Parametro" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "Elementi in Giacenza Impegnati" msgid "Contacts" msgstr "Contatti" -#: 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 "Articolo Fornitore" - #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4511,7 +4852,7 @@ msgstr "Azioni Articolo Fornitore" #: 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Ordine Articolo" @@ -4544,12 +4885,12 @@ msgstr "Elimina Articolo Fornitore" 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:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ 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:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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:207 -#: templates/js/translated/stock.js:537 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Nuovo Elemento in giacenza" @@ -4582,29 +4923,33 @@ msgstr "Informazioni Prezzi" msgid "Add Price Break" msgstr "Aggiungi riduzione prezzo" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Articoli in magazzino" @@ -4630,10 +4975,6 @@ msgstr "Clienti" msgid "New Customer" msgstr "Nuovo cliente" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Aziende" - #: company/views.py:52 msgid "New Company" msgstr "Nuova Azienda" @@ -4642,48 +4983,228 @@ msgstr "Nuova Azienda" msgid "Placed" msgstr "Inviato" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "Dati" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "Valido" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Sconosciuto" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Prezzo Totale" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Stato dell'ordine" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 msgid "No matching purchase order found" msgstr "Nessun ordine di acquisto corrispondente trovato" -#: 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Ordine" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 msgid "Purchase Order" msgstr "Ordine D'Acquisto" -#: 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "Restituisci ordine" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "Prezzo totale dell'ordine" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "Descrizione dell'ordine (opzionale)" msgid "Select project code for this order" msgstr "Seleziona il codice del progetto per questo ordine" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Collegamento a un sito web esterno" @@ -4854,534 +5371,578 @@ msgstr "Punto di contatto per questo ordine" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "Stato ordine d'acquisto" -#: order/models.py:487 +#: order/models.py:493 msgid "Company from which the items are being ordered" msgstr "Azienda da cui sono stati ordinati gli articoli" -#: order/models.py:498 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1702 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "Riferimento fornitore" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "Codice di riferimento ordine fornitore" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "ricevuto da" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Data di emissione" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "Data di emissione ordine" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "La quantità deve essere un numero positivo" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "Azienda da cui sono stati ordinati gli elementi" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "Riferimento Cliente " -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "Codice di riferimento Ordine del Cliente" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Data di spedizione" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "spedito da" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "Solo un ordine aperto può essere contrassegnato come completo" -#: order/models.py:1038 +#: order/models.py:1089 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:1043 +#: order/models.py:1094 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:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Quantità Elementi" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "Riferimento Linea Elemento" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "Note linea elemento" -#: order/models.py:1345 +#: order/models.py:1393 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:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "Contesto" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "Contesto aggiuntivo per questa voce" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "Prezzo unitario" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "L'articolo del fornitore deve corrispondere al fornitore" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "eliminato" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Ricevuto" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Prezzo di Acquisto" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "Prezzo di acquisto unitario" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "Dove l'Acquirente desidera che questo elemento venga immagazzinato?" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 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:1579 +#: order/models.py:1642 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:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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:1606 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Prezzo unitario di vendita" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "Quantità spedita" -#: order/models.py:1708 +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "Data di spedizione" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "Verificato Da" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "Spedizione" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "Numero di spedizione" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "Numero di monitoraggio" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "Informazioni di monitoraggio della spedizione" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "Numero Fattura" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "Numero di riferimento per la fattura associata" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "La spedizione è già stata spedita" -#: order/models.py:1772 +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "La spedizione non ha articoli di stock assegnati" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "L'elemento di magazzino non è stato assegnato" -#: order/models.py:1899 +#: order/models.py:1973 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:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "Impossibile allocare stock a una riga senza un articolo" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "L'ordine di vendita non corrisponde alla spedizione" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "La spedizione non corrisponde all'ordine di vendita" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "Linea" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "Riferimento della spedizione ordine di vendita" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Elemento" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "Seleziona elemento stock da allocare" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "Seleziona l'elemento da restituire dal cliente" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "Data di ricezione" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Risultati" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "Numero Dell'articolo Interno" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "L'elemento di riga non corrisponde all'ordine di acquisto" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "Deve essere fornita una quantità intera per gli articoli rintracciabili" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "I seguenti numeri di serie sono già assegnati" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Perso" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Reso" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "In corso" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Indietro" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Riparare" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Sostituire" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Rimborso" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Rifiuta" @@ -5426,87 +5987,93 @@ msgid "Edit order" msgstr "Modifica ordine" #: 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 "Annulla l'ordine" - -#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Duplica Ordine" -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Annulla l'ordine" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Completa l'ordine" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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:115 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Descrizione Dell'Ordine" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 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:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 msgid "Completed Line Items" msgstr "Elementi della linea completati" -#: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:167 -#: order/templates/order/sales_order_base.html:177 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Incompleto" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Emesso" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 msgid "Total cost" 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:243 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "Il costo totale non può essere calcolato" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "Duplica selezionati" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Elimina riga" @@ -5666,31 +6233,31 @@ msgstr "Stampa rapporto ordine di reso" msgid "Print packing list" msgstr "Stampa lista d'imballaggio" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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:239 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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:259 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "Dettagli dell'ordine" msgid "Print sales order report" msgstr "Stampa il rapporto dell'ordine delle vendite" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "Spedisci oggetti" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Completa Ordine Di Vendita" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 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:173 +#: order/templates/order/sales_order_base.html:176 #: 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:321 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "Spedizione in sospeso" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Azioni" @@ -5775,35 +6343,21 @@ 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:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "Codice Articolo" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Nome Articolo" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Descrizione Articolo" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Revisione" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Parole Chiave" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "Id Categoria" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "Nome Categoria" @@ -5827,11 +6382,11 @@ msgstr "Posizione Predefinita ID" msgid "Default Supplier ID" msgstr "ID Fornitore Predefinito" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variante Di" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Scorta Minima" @@ -5839,169 +6394,183 @@ msgstr "Scorta Minima" msgid "Used In" msgstr "Utilizzato In" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "In Costruzione" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "ID principale" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "Nome Principale" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "Percorso Categoria" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Articoli" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "Livello Distinta Base" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "ID Elemento Distinta Base" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "IPN Principale" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "IPN Articolo" +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "Ordine D'Acquisto In Arrivo" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "Ordine di Vendita in Uscita" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "Giacenza prodotta dall'Ordine di Costruzione" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "Giacenza richiesta per l'Ordine di Produzione" -#: part/api.py:887 -msgid "Valid" -msgstr "Valido" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "Questa opzione deve essere selezionata" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Categoria" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Posizione Predefinita" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Giacenze Totali" @@ -6010,1042 +6579,1144 @@ msgstr "Giacenze Totali" msgid "Input quantity for price calculation" msgstr "Digita la quantità per il calcolo del prezzo" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Categoria Articoli" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Posizione predefinita per gli articoli di questa categoria" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strutturale" -#: part/models.py:111 +#: part/models.py:115 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:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Keywords predefinite" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "Parole chiave predefinite per gli articoli in questa categoria" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "Icona" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "Icona (facoltativa)" -#: part/models.py:150 +#: part/models.py:178 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:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "Scelta non valida per l'articolo principale" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "Esiste già un elemento stock con questo numero seriale" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "Un articolo con questo Nome, IPN e Revisione esiste già." -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "Gli articoli non possono essere assegnati a categorie articolo principali!" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "È Template" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "Numero Dell'articolo Interno" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "Fornitore predefinito" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "Articolo fornitore predefinito" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:1036 +#: part/models.py:1129 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:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "Unita di misura per questo articolo" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "Questo articolo può essere costruito da altri articoli?" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "Questo articolo può essere utilizzato per costruire altri articoli?" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "Questo articolo ha il tracciamento per gli elementi unici?" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 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:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "Somma di controllo Distinta Base" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "Somma di controllo immagazzinata Distinta Base" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "Distinta Base controllata da" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "Data di verifica Distinta Base" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Creazione Utente" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "Ultimo Inventario" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Data" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "Note aggiuntive" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "Utente che ha eseguito questo inventario" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "File Report Inventario (generato internamente)" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "Conteggio Articolo" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "Numero di articoli oggetto d'inventario" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "Utente che ha richiesto questo report inventario" -#: part/models.py:3469 +#: part/models.py:3398 +msgid "Part Sale Price Break" +msgstr "" + +#: part/models.py:3510 +msgid "Part Test Template" +msgstr "" + +#: part/models.py:3536 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3490 part/models.py:3654 +#: part/models.py:3557 part/models.py:3726 msgid "Choices must be unique" msgstr "" -#: part/models.py:3501 +#: part/models.py:3568 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:3512 +#: part/models.py:3579 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3529 templates/js/translated/part.js:2880 +#: part/models.py:3596 templates/js/translated/part.js:2895 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3530 +#: part/models.py:3597 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3536 +#: part/models.py:3603 msgid "Test Key" msgstr "" -#: part/models.py:3537 +#: part/models.py:3604 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3544 +#: part/models.py:3611 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3545 +#: part/models.py:3612 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 msgid "Enabled" msgstr "Abilitato" -#: part/models.py:3549 +#: part/models.py:3616 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 msgid "Required" msgstr "Richiesto" -#: part/models.py:3555 +#: part/models.py:3622 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3560 templates/js/translated/part.js:2917 +#: part/models.py:3627 templates/js/translated/part.js:2932 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3561 +#: part/models.py:3628 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:3566 templates/js/translated/part.js:2924 +#: part/models.py:3633 templates/js/translated/part.js:2939 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3568 +#: part/models.py:3635 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:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "Il nome del modello del parametro deve essere univoco" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "Nome Parametro" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "Il nome del modello del parametro deve essere univoco" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "Nome Parametro" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "Descrizione del parametro" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "Articolo principale" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Modello Parametro" -#: part/models.py:3847 -msgid "Data" -msgstr "Dati" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "Valore del Parametro" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Valore Predefinito" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "ID articolo o nome articolo" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "Valore ID articolo univoco" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "Valore IPN articolo" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "Livello" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "Livello distinta base" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4117 +#: part/models.py:4259 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:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Eccedenza" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Quantità stimata scarti di produzione (assoluta o percentuale)" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 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:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "Consenti Le Varianti" - -#: part/models.py:4165 +#: part/models.py:4307 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:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4423 +#: part/models.py:4563 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:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4488 +#: part/models.py:4628 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:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Sottocategorie" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Copia parametri" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:492 +#: part/serializers.py:513 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:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "Duplica articolo" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "Copia i dati iniziali da un altro Articolo" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "Stock iniziale" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "Crea Articolo con quantità di scorta iniziale" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "Informazioni Fornitore" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "Copia Parametri Categoria" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "Copia i parametri dai modelli della categoria articolo selezionata" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "Duplica articolo" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "Copia i dati iniziali da un altro Articolo" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "Stock iniziale" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "Crea Articolo con quantità di scorta iniziale" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "Informazioni Fornitore" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "Copia Parametri Categoria" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "Copia i parametri dai modelli della categoria articolo selezionata" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 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:1139 +#: part/serializers.py:1202 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:1149 +#: part/serializers.py:1212 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:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "Genera Report" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "Genera file di report contenente dati di inventario calcolati" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "Aggiorna Articoli" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "Aggiorna gli articoli specificati con i dati calcolati di inventario" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "La funzione Inventario non è abilitata" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Puoi produrre" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "Cancella Distinta Base esistente" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "Rimuovi elementi distinta base esistenti prima del caricamento" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "Nessuna colonna articolo specificata" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "Trovati più articoli corrispondenti" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "Nessun articolo corrispondente trovato" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "L'articolo non è indicato come componente" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "Quantità non fornita" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "Quantità non valida" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "Almeno un elemento della distinta base è richiesto" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "Quantità Totale" @@ -7065,11 +7736,11 @@ msgstr "Report Inventario Disponibile" msgid "A new stocktake report is available for download" msgstr "Un nuovo report di inventario è disponibile per il download" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "Notifica di magazzino bassa" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Lo stock disponibile per {part.name} è sceso sotto il livello minimo configurato" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "Esegui inventario per questa categoria articolo" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "Sei iscritto alle notifiche di questa categoria" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "Sottoscrivi notifiche per questa categoria" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "Azioni Categoria" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Modifica categoria" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Modifica Categoria" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Elimina la categoria" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Cancella categoria" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "Categoria articolo di livello superiore" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Articoli (incluse le sottocategorie)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "Crea nuovo articolo" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Nuovo articolo" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Parametri articolo" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "Crea nuova categoria articoli" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Nuova categoria" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "Aggiungi informazioni inventario" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "Inventario" @@ -7209,101 +7880,105 @@ msgstr "Modelli Articoli Test" msgid "Add Test Template" msgstr "Aggiungi Modelli Test" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Assegnazione Ordine Di Vendita" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "Note Articolo" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "Varianti articolo" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "Crea nuova variante" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "Nuova variante" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "Aggiungi un nuovo parametro" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "Articoli correlati" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "Aggiungi Correlato" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Distinta base" -#: part/templates/part/detail.html:260 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "Esporta azioni" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Esporta Distinta Base" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "Stampa il report Distinta Base" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "Azioni Distinta Base" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "Carica Distinta Base" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "Valida Distinta Base" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Aggiungi elemento Distinta Base" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "Assembla" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "Articoli prodotti" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Costruisci le ubicazioni degli ordini" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "Fornitori articoli" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "Componenti Produttori" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ msgstr "Scarica il Modello Articolo Importato" #: 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 +#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 msgid "Format" msgstr "Formato" #: 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Seleziona il formato del file" @@ -7362,7 +8037,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 templates/js/translated/label.js:143 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Stampa Etichetta" @@ -7372,7 +8047,7 @@ msgstr "Mostra informazioni sui prezzi" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Azioni magazzino" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "Azioni articolo" @@ -7433,7 +8108,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:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "Mostra i Dettagli Articolo" @@ -7447,51 +8122,47 @@ msgstr "Assegnato agli Ordini di Produzione" msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Puoi produrre" - -#: part/templates/part/part_base.html:291 +#: part/templates/part/part_base.html:300 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:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Fascia di Prezzo" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "Ultimo Numero Di Serie" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Ricerca per numero seriale" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ msgid "Variants" msgstr "Varianti" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Magazzino" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Modifica" -#: part/templates/part/prices.html:28 stock/admin.py:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "Ultimo aggiornamento" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Nessuna giacenza" @@ -7749,7 +8420,7 @@ msgstr "Immagine articolo non trovata" msgid "Part Pricing" msgstr "Prezzo Articolo" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Nessuna azione specificata" msgid "No matching action found" msgstr "Nessuna azione corrispondente trovata" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Nessuna corrispondenza trovata per i dati del codice a barre" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Corrispondenza trovata per i dati del codice a barre" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "Il codice a barre corrisponde a un elemento esistente" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Scorte insufficienti disponibili" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "Stampa etichetta fallita" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "InvenTree Codice a Barre" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "Fornisce supporto nativo per codici a barre" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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 "Contributi d'InvenTree" +#: plugin/builtin/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "InvenTree Notifiche" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "Il plugin è attivo" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "Installato" @@ -8205,7 +8918,7 @@ msgstr "Plugin Integrato" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "Metodo" msgid "No author found" msgstr "Nessun autore trovato" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "Nessun oggetto valido fornito nel modello" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "Il file del modello '{template}' è mancante o non esiste" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Nome modello" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Formato del nome file" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Filtri" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Larghezza [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "Larghezza dell'etichetta, specificata in mm" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Altezza [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "Larghezza dell'etichetta, specificata in mm" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "Report file snippet" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "Descrizione file snippet" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "Risorsa" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "Report file risorsa" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "File risorsa descrizione" @@ -8588,10 +9297,10 @@ msgstr "Il fornitore è stato eliminato" #: 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Prezzo Unitario" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 msgid "Total" msgstr "Totale" -#: 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 "Numero Seriale" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "Risultati Test" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "Risultato" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "Passaggio" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "Fallito" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "Nessun risultato (richiesto)" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "Nessun risultato" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Elementi installati" -#: 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Seriale" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 msgid "Location ID" msgstr "ID Posizione" -#: stock/admin.py:54 stock/admin.py:176 -msgid "Location Name" -msgstr "Nome Ubicazione" - -#: stock/admin.py:64 stock/templates/stock/location.html:131 -#: stock/templates/stock/location.html:137 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "Percorso Ubicazione" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "ID Elemento Stock" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "Codici di stato" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "ID Articolo Fornitore" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "ID Fornitore" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "Nome Fornitore" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "ID Cliente" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Installato In" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "ID Costruttore" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "ID Ordine Vendita" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "ID Ordine D'acquisto" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "Revisione Necessaria" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "Elimina al esaurimento" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "Data di Scadenza" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Ubicazione Esterna" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Obsoleto" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "Deve essere fornita un articolo valido" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 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:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:124 stock/templates/stock/location.html:186 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Posizioni magazzino" -#: stock/models.py:166 stock/models.py:949 +#: stock/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Proprietario" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "Seleziona Owner" -#: stock/models.py:175 +#: stock/models.py:189 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:182 templates/js/translated/stock.js:2781 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Esterno" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "Si tratta di una posizione esterna al magazzino" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 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:643 +#: stock/models.py:664 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:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 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:700 +#: stock/models.py:721 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:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "L'elemento non può appartenere a se stesso" -#: stock/models.py:729 +#: stock/models.py:748 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:742 +#: stock/models.py:761 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:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "Elemento di magazzino principale" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di magazzino" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "Questo elemento è stato installato su un altro elemento?" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "Genera Costruzione" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "Costruisci per questo elemento di magazzino" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "Origina Ordine di Acquisto" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "Ordine d'acquisto per questo articolo in magazzino" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "Destinazione Ordine di Vendita" -#: stock/models.py:902 +#: stock/models.py:921 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:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "Cancella questo Elemento di Magazzino quando la giacenza è esaurita" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "Prezzo di acquisto unitario al momento dell’acquisto" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "Convertito in articolo" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "L'articolo non è impostato come tracciabile" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "La quantità deve essere un numero intero" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "I numeri di serie devono essere numeri interi" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "La quantità non corrisponde ai numeri di serie" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 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:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "L'elemento di magazzino è installato in un altro elemento" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "L'elemento di magazzino contiene altri elementi" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "L'elemento di magazzino è stato assegnato a un cliente" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "L'elemento di magazzino è attualmente in produzione" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo fornitore" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "I codici di stato dello stock devono corrispondere" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "Le giacenze non possono essere spostate perché non disponibili" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "Note d'ingresso" -#: stock/models.py:2394 +#: stock/models.py:2414 +msgid "Stock Item Test Result" +msgstr "" + +#: stock/models.py:2447 msgid "Value must be provided for this test" msgstr "Il valore deve essere fornito per questo test" -#: stock/models.py:2399 +#: stock/models.py:2452 msgid "Attachment must be uploaded for this test" msgstr "L'allegato deve essere caricato per questo test" -#: stock/models.py:2404 +#: stock/models.py:2457 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2428 +#: stock/models.py:2542 msgid "Test result" msgstr "Risultato Test" -#: stock/models.py:2435 +#: stock/models.py:2549 msgid "Test output value" msgstr "Test valore output" -#: stock/models.py:2443 +#: stock/models.py:2557 msgid "Test result attachment" msgstr "Risultato della prova allegato" -#: stock/models.py:2447 +#: stock/models.py:2561 msgid "Test notes" msgstr "Note del test" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "Il numero di serie è troppo grande" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Elemento principale" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Scaduto" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Elementi secondari" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "Inserisci il numero di elementi di magazzino da serializzare" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, 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:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "Inserisci i numeri di serie per i nuovi elementi" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "Note opzionali elemento" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "Numeri di serie non possono essere assegnati a questo articolo" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "Seleziona elementi di magazzino da installare" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "Aggiungi nota di transazione (opzionale)" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "Elemento di magazzino non disponibile" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "L'articolo selezionato non è nella Fattura dei Materiali" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "L'articolo selezionato non è una valida opzione per la conversione" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "Posizione di destinazione per l'elemento restituito" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "Note di fusione di magazzino" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "Consenti fornitori non corrispondenti" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 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:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "Consenti stato non corrispondente" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 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:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "Valore di chiave primaria StockItem" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "Note sugli spostamenti di magazzino" @@ -9375,7 +10117,7 @@ msgstr "In quarantena" msgid "Legacy stock tracking entry" msgstr "Voce di tracciamento stock preesistente" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Elemento stock creato" @@ -9431,7 +10173,7 @@ msgstr "Diviso dall'elemento genitore" msgid "Split child item" msgstr "Dividi elemento figlio" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Elemento stock raggruppato" @@ -9451,7 +10193,7 @@ msgstr "Build order output completato" msgid "Build order output rejected" msgstr "Ordine di costruzione rifiutato" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Impegnato dall'ordine di costruzione" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "Elimina Dati di Test" @@ -9512,15 +10254,15 @@ msgstr "Note Elemento di magazzino" msgid "Installed Stock Items" msgstr "Elementi di magazzino installati" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "Installa Elemento Magazzino" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 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:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "Scansiona nella posizione" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "Impostazioni di stampa" @@ -9543,17 +10285,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:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "Conta giacenza" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "Aggiungi giacenza" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "Rimuovi giacenza" @@ -9562,12 +10304,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:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "Trasferisci giacenza" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "Assegna al cliente" @@ -9608,14 +10350,10 @@ 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:2123 templates/navbar.html:38 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Produzione" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Elemento principale" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Nessun produttore impostato" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Non sei nell'elenco dei proprietari di questo elemento. Questo elemento di magazzino non può essere modificato." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "Sola lettura" @@ -9669,12 +10407,8 @@ msgstr "pagina successiva" msgid "Navigate to next serial number" msgstr "Vai al numero di serie successivo" -#: stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Quantità Disponibile" - #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2380 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Nessuna posizione impostata" @@ -9691,11 +10425,6 @@ msgstr "Questo elemento di magazzino non ha superato i test richiesti" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Questo Elemento Stock è scaduto il %(item.expiry_date)s" -#: stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:435 users/models.py:174 -msgid "Expired" -msgstr "Scaduto" - #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "Nessun inventario eseguito" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "Questa azione non può essere facilmente annullata" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "Crea elementi serializzati da questo elemento di magazzino." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Seleziona la quantità da serializzare e i numeri di serie univoci." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "Esegui inventario per questa ubicazione di magazzino" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "Individua ubicazione di magazzino" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "Scansiona gli elementi in magazzino in questa ubicazione" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "Scansiona Elementi Stock" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "Scansiona il contenitore magazzino in questa posizione" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "Scansiona container" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "Azioni posizione" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Modifica la posizione" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Elimina la posizione" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "Posizione stock di livello superiore" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "Proprietario Posizione" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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:176 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "Crea nuova posizione di magazzino" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Nuova Posizione" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "Rilevamento Stock" msgid "Allocations" msgstr "Assegnazioni" -#: stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Elementi secondari" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Permesso negato" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "Impostazioni articolo" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "Importa Articolo" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "Importa Articolo" @@ -10207,7 +10932,7 @@ msgstr "Percorso d'installazione" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "Integrato" @@ -10217,7 +10942,7 @@ msgstr "Questo è un plugin integrato che non può essere disabilitato" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "Esempio" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Elimina" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "Impostazioni Account" msgid "Change Password" msgstr "Modifica Password" -#: templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Nome utente" - -#: templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Nome" - -#: templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Cognome" - #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "I seguenti indirizzi email sono associati con il tuo account:" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "Invia Segnalazione Bug" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "copia negli appunti" @@ -10779,7 +11492,7 @@ msgstr "Conferma l'indirizzo e-mail" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Si prega di confermare che %(email)s è un indirizzo email per l'utente %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Conferma" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Quantità richiesta" @@ -11026,15 +11739,15 @@ 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:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "Quantità minima" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Scansiona codice a barre" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Esistono errori nel modulo" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Invia" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "Le notifiche verranno caricate qui" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Aggiungi" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "Impostazioni e-mail" msgid "Email settings not configured" msgstr "Impostazioni dell'email non configurate" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Si" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Impostazione autorizzazioni" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Gruppo" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Visualizza" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Autorizzazione a visualizzare gli articoli" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Autorizzazione ad aggiungere elementi" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Modificare" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Permessi per modificare gli elementi" -#: users/models.py:413 +#: users/models.py:408 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 0a3a8dbbca..462d19d395 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "APIエンドポイントが見つかりません" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "ユーザーにこのモデルを表示する権限がありません" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "エラーの詳細は管理者パネルで確認できます" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "日付を入力する" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "メモ" @@ -88,258 +92,270 @@ msgstr "値 '{name}' はパターン形式で表示されません" msgid "Provided value does not match required pattern: " msgstr "指定された値が必要なパターンと一致しません: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "パスワードを入力してください" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "新しいパスワードを入力してください。" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "パスワードの確認" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "新しいパスワードの確認" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "古いパスワード" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "メールアドレス(確認用)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "メールアドレスの確認" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "毎回同じメールアドレスを入力する必要があります。" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "指定されたプライマリEメールアドレスは無効です。" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "指定されたメールドメインは承認されていません。" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "数量コードが無効です" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "シリアル番号は空です" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "シリアル番号が見つかりません" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "この値からHTMLタグを削除" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "接続エラー" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "サーバは無効なステータスコードで応答しました" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "例外が発生しました" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "サーバーが無効なContent-Length値で応答しました" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "画像サイズが大きすぎます" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "画像のダウンロードが最大サイズを超えました" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "リモートサーバーが空のレスポンスを返しました" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "指定されたURLは有効な画像ファイルではありません" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 +msgid "Bulgarian" +msgstr "" + +#: InvenTree/locales.py:20 msgid "Czech" msgstr "チェコ語" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "ドイツ語" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "ギリシャ語" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "英語" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "スペイン語" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "スペイン語(メキシコ)" -#: InvenTree/locales.py:26 -msgid "Farsi / Persian" -msgstr "" - #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 +msgid "Farsi / Persian" +msgstr "" + +#: InvenTree/locales.py:29 +msgid "Finnish" +msgstr "" + +#: InvenTree/locales.py:30 msgid "French" msgstr "フランス語" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "ヘブライ語" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "ヒンディー語" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "ハンガリー語" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "イタリア語" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "日本語" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "韓国語" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "オランダ語" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "ノルウェー語" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "ポーランド語" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "ポルトガル語" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "ポルトガル語 (ブラジル)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "ロシア語" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "スロベニア語" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "スウェーデン語" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "タイ語" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "トルコ語" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "ベトナム語" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "プラグインメタデータ" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "外部プラグインで使用するためのJSONメタデータフィールド" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 "ファイル名に無効な文字'{c}'が含まれています" - -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "説明" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "親" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "マークダウンメモ (オプション)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "バーコード情報" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "サードパーティ製バーコードデータ" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "通貨" msgid "Select currency from available options" msgstr "利用可能なオプションから通貨を選択してください" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "このユーザのロールを変更する権限がありません" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "ファイル名" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "無効な値です。" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "データファイル" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "アップロードするファイルを選択" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "サポートされていないファイル形式" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "ファイルサイズが大きすぎます" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "ファイルに列が見つかりません" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "ファイルにデータ行がみつかりません" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "データが入力されていません" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "データ列が指定されていません" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "必須の列がありません: {name}" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "{col} 列が重複しています。" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "外部画像ファイルのURL" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "外部URLからの画像ダウンロードは許可されていません" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "バックグラウンドワーカーのチェックに失敗しました" @@ -702,27 +679,27 @@ msgstr "メールアドレスが未設定です" msgid "InvenTree system health checks failed" msgstr "InvenTree システムのヘルスチェックに失敗しました" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "システム情報" msgid "About InvenTree" msgstr "InvenTree について" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "オプション" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "組立注文" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "組立注文" msgid "Build Orders" msgstr "組立注文" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "パーツ" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "組立状況" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "作成日時" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "外部リンク" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "外部 サイト へのリンク" + +#: build/models.py:381 msgid "Build Priority" msgstr "組立優先度" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "数量" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "ステータス" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "シリアル番号" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "追跡可能" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "処理待ち" @@ -1540,15 +1677,21 @@ msgstr "処理待ち" msgid "Production" msgstr "生産" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "完了" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "組立をキャンセル" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "組立を削除" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "外部URLからの画像ダウンロードを許可する" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "外部URL画像の最大サイズ" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "テンプレート" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "アセンブリ" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "コンポーネント" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "購入可能" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "販売可能" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "デバッグモード" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "シリアル番号を自動入力" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" -msgstr "メールアドレスは必須です" - -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" -msgstr "" +msgid "Email required" +msgstr "メールアドレスは必須です" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" -msgstr "非アクティブな部品を非表示" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "購読中の部品を表示" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" -msgstr "購読中のカテゴリを表示" - -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" +msgstr "非アクティブな部品を非表示" + +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2212 +msgid "Show subscribed parts" +msgstr "購読中の部品を表示" + +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" +msgstr "購読中のカテゴリを表示" + +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" -msgstr "" - -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" - -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "ユーザー" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "リンク" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "添付ファイル" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "ファイルがありません" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "外部リンクが見つかりません。" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "添付ファイルを選択" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "コメント:" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "ファイル名" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "製造元" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "仕入先" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "顧客" @@ -4249,19 +4605,12 @@ msgstr "顧客" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "新しいサプライヤー・パーツを作成" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "新しいサプライヤー・パーツ" @@ -4311,7 +4660,7 @@ msgstr "メーカー・パーツ" msgid "Create new manufacturer part" msgstr "新しいメーカー・パーツを作成" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "新しいメーカ―・パーツ" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "パーツの注文" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "メーカー・パーツを削除" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "内部パーツ" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "パラメータ" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "在庫商品" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "設置済" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "外部ページへのリンク" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "購入金額" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "紛失" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "返品済" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "処理中" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "キーワード" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "カテゴリID" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "カテゴリ名" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "パーツ" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "カテゴリ" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "パーツカテゴリ" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "パーツカテゴリ" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "サブカテゴリ" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "カテゴリを選択" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "このカテゴリの通知を受け取る" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "カテゴリを編集" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "カテゴリを編集" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "カテゴリを削除" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "カテゴリを削除" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "トップレベルのパーツカテゴリ" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "パーツ (サブカテゴリを含む)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "新規パーツを作成" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "新規パーツ" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "パーツパラメータ" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "新しいパーツカテゴリを作成" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "新規カテゴリ" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "シリアル番号で検索" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "在庫" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "在庫切れ" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "アクションが指定されていません" msgid "No matching action found" msgstr "一致するアクションが見つかりませんでした" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "シリアル番号が既に存在します" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "シリアル番号が大きすぎます" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "期限切れ" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "パーツは販売可能でなければなりません" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "在庫商品を作成しました" @@ -9431,7 +10173,7 @@ msgstr "親アイテムから分割する" msgid "Split child item" msgstr "子項目を分割" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "商品在庫をマージしました" @@ -9451,7 +10193,7 @@ msgstr "組立注文の出力が完了しました" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "確認" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "このパーツを表示するには、次のリンクをクリックしてください" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "最小在庫" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "メール設定" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "パーミッション設定" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "グループ" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "表示" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "項目を表示する権限" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "項目を追加する権限" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "変更" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "項目を編集する権限" -#: users/models.py:413 +#: users/models.py:408 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 ab6fb8fd6d..30fdff362f 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 689d8be75d..fb3cdfa5ff 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API galapunkts nav atrasts" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Ievadiet datumu" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Piezīmes" @@ -88,258 +92,270 @@ msgstr "Vērtība '{name}' neparādās vajadzīgajā formātā" msgid "Provided value does not match required pattern: " msgstr "Norādītā vērtība neatbilst nepieciešamajam formātam: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Ievadiet paroli" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Ievadiet jaunu paroli" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Apstiprināt paroli" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Apstiprināt jauno paroli" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Vecā parole" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-pasts (vēlreiz)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "E-pasta adreses apstiprinājums" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Katru reizi jāievada viena un tā pati e-pasta adrese." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Norādītā primārā e-pasta adrese nav derīga." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Norādītais e-pasta domēns nav apstiprināts." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Reģistrācija ir izslēgta." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Norādītais daudzums nav derīgs" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Tukša sērijas numura rinda" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Atkārtojas sērijas numurs" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Nederīgs grupas diapazons: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grupas diapazons {group} pārsniedz pieļaujamo daudzumu ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Nederīga grupas secība: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Netika atrasts neviens sērijas numurs" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Unikālo sērijas numuru skaitam ({len(serials)}) jāatbilst daudzumam ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Noņemiet HTML tagus no šīs vērtības" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Savienojuma kļūda" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Serveris atbildēja ar nederīgu statusa kodu" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Radās izņēmums" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Serveris atbildēja ar nederīgu Content-Length vērtību" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Attēla izmērs ir pārāk liels" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Attēla lejupielāde pārsniedz maksimālo izmēru" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Attālais serveris atgrieza tukšu atbildi" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Norādītajā URL nav derīgs attēla fails" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgāru" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Čehu" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Dāņu" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Vācu" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Grieķu" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Angļu" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spāņu" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spāņu (Meksikāņu)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Persiešu" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Somu" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 755c8dfa59..698e228fce 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API eindpunt niet gevonden" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Gebruiker heeft geen rechten om dit model te bekijken" @@ -52,30 +52,34 @@ msgstr "Ongeldige hoeveelheid ingegeven ({exc})" msgid "Error details can be found in the admin panel" msgstr "Error details kunnen worden gevonden in het admin scherm" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Voer datum in" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Opmerkingen" @@ -88,258 +92,270 @@ msgstr "Waarde '{name}' verschijnt niet in patroonformaat" msgid "Provided value does not match required pattern: " msgstr "Opgegeven waarde komt niet overeen met vereist patroon: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Voer wachtwoord in" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Voer een nieuw wachtwoord in" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Wachtwoord bevestigen" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Nieuw wachtwoord bevestigen" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Oude wachtwoord" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-mailadres (opnieuw)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "E-mailadres bevestiging" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Er moet hetzelfde e-mailadres ingevoerd worden." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Het opgegeven primaire e-mailadres is ongeldig." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Het ingevoerde e-maildomein is niet goedgekeurd." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Registratie is uitgeschakeld." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Leeg serienummer" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Duplicaat serienummer" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Geen serienummers gevonden" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Verwijder HTML tags van deze waarde" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Verbindingsfout" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Server reageerde met ongeldige statuscode" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Uitzondering opgetreden" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Server reageerde met ongeldige Content-Length waarde" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Afbeeldingsformaat is te groot" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Beelddownload overschrijdt de maximale grootte" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Externe server heeft lege reactie teruggegeven" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgaars" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Tsjechisch" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Deens" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Duits" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Grieks" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Engels" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spaans" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spaans (Mexicaans)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Perzisch" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Fins" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Frans" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebreeuws" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Hongaars" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italiaans" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japans" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Koreaans" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Nederlands" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Noors" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Pools" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugees" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugees (Braziliaans)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Russisch" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Sloveens" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Servisch" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Zweeds" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Thais" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turks" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamees" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Chinees (vereenvoudigd)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Chinees (traditioneel)" @@ -348,257 +364,165 @@ msgstr "Chinees (traditioneel)" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metadata moeten een python dict object zijn" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadata veld, voor gebruik door externe plugins" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Onjuist opgemaakt patroon" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Onbekende opmaaksleutel gespecificeerd" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Vereiste opmaaksleutel ontbreekt" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Referentieveld mag niet leeg zijn" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Referentie moet overeenkomen met verplicht patroon" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Referentienummer is te groot" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Ontbrekend bestand" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Externe link ontbreekt" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Bijlage" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Bestand als bijlage selecteren" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Link naar externe URL" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Opmerking" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Bestand opmerking" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "uploaddatum" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Bestandsnaam mag niet leeg zijn" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Foute bijlagemap" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Bestandsnaam bevat illegale teken '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Bestandsnaam mist extensie" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Bijlage met deze bestandsnaam bestaat al" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Fout bij hernoemen bestand" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Dubbele namen kunnen niet bestaan onder hetzelfde bovenliggende object" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Omschrijving" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "bovenliggende" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Pad" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Markdown notitie (optioneel)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Streepjescode gegevens" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Streepjescode van derden" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Hash van Streepjescode" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Unieke hash van barcode gegevens" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Bestaande barcode gevonden" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Serverfout" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Valuta" msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Actief" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Bestandsnaam" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Ongeldige waarde" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Data bestand" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Selecteer een bestand om te uploaden" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Niet ondersteund bestandstype" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Bestand is te groot" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Geen kolommen gevonden in het bestand" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Geen data rijen gevonden in dit bestand" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Geen data rijen opgegeven" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Geen gegevenskolommen opgegeven" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Verplichte kolom ontbreekt: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dubbele kolom: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL van extern afbeeldingsbestand" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Achtergrondwerker check is gefaald" @@ -702,27 +679,27 @@ msgstr "E-mailbackend niet geconfigureerd" msgid "InvenTree system health checks failed" msgstr "InvenTree gezondsheidschecks mislukt" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Ongeldige fysieke eenheid" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Geen geldige valutacode" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Overschotwaarde mag niet negatief zijn" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Overschot mag niet groter zijn dan 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Ongeldige waarde voor overschot" @@ -750,62 +727,63 @@ msgstr "Systeeminformatie" msgid "About InvenTree" msgstr "Over InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Optioneel" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Beschikbaar" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Productieorder" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Productieorder" msgid "Build Orders" msgstr "Productieorders" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Ongeldige keuze voor bovenliggende productie" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referentie" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Korte beschrijving van de build (optioneel)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Bovenliggende Productie" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Productieorder waar deze productie aan is toegewezen" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Productieorder waar deze productie aan is toegewezen" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Onderdeel" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Selecteer onderdeel om te produceren" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Verkooporder Referentie" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Verkooporder waar deze productie aan is toegewezen" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Bronlocatie" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Bestemmings Locatie" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Productiehoeveelheid" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Aantal voorraaditems om te produceren" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Voltooide voorraadartikelen" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Aantal voorraadartikelen die zijn voltooid" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Productiestatus" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Verwachte opleveringsdatum" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Opleveringsdatum" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "voltooid door" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Uitgegeven door" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Verantwoordelijke" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externe Link" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Link naar externe URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "Bouw prioriteit" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Prioriteit van deze bouwopdracht" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Project code voor deze build order" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Productieorder {build} is voltooid" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Bouw object" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Bouw object" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Installeren in" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Onderdeel naam" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:279 +#: build/serializers.py:289 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:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Locatie" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:681 +#: build/serializers.py:718 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:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:713 +#: build/serializers.py:750 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:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:838 +#: build/serializers.py:878 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:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:907 +#: build/serializers.py:947 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:914 +#: build/serializers.py:954 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:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Fabrikant artikel nummer (MPN)" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "Onderdeel-id" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Onderdeel omschrijving" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Serienummer" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Volgbaar" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "In bestelling" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Beschikbare Voorraad" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Bezig" @@ -1540,15 +1677,21 @@ msgstr "Bezig" msgid "Production" msgstr "Productie" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Voltooid" @@ -1576,8 +1719,8 @@ msgstr "Miniatuurweergave van onderdeel" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Barcode acties" @@ -1588,7 +1731,7 @@ msgstr "Barcode acties" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR-code weergeven" @@ -1599,9 +1742,9 @@ msgstr "QR-code weergeven" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Barcode loskoppelen" @@ -1612,7 +1755,7 @@ msgstr "Barcode loskoppelen" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Koppel Barcode" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Bewerk Productie" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Annuleer Productie" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "Dupliceer Bouw" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Annuleer Productie" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Verwijder Productie" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Voltooi Productie" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Productiebeschrijving" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Er zijn geen productuitvoeren aangemaakt voor deze productieorder" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Productieorder is gereed om te markeren als voltooid" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Productieorder kan niet worden voltooid omdat er nog producties openstaan" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Vereiste Producthoeveelheid is nog niet bereikt" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 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/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Streefdatum" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Deze productie was verwacht op %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Achterstallig" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Voltooide Uitvoeren" -#: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Voltooide Uitvoeren" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Verkooporder" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Uitgegeven door" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Prioriteit" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Bestemming" @@ -1779,23 +1943,23 @@ msgstr "Bestemmingslocatie niet opgegeven" msgid "Allocated Parts" msgstr "Toegewezen Onderdelen" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Gecreëerd" @@ -1804,8 +1968,8 @@ msgid "No target date set" msgstr "Geen doeldatum ingesteld" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Voltooid" @@ -1813,13 +1977,13 @@ msgstr "Voltooid" msgid "Build not complete" msgstr "Productie niet compleet" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Onderliggende Productieorders" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Voorraad toewijzen aan Product" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Automatisch Toewijzen" msgid "Manually allocate stock to build" msgstr "Handmatig voorraad toewijzen aan productie" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Voorraad Toewijzen" @@ -1870,15 +2034,19 @@ msgstr "Nieuwe productieuitvoer aanmaken" msgid "New Build Output" msgstr "Nieuwe Productieuitvoer" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "Verbruikte voorraad" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Voltooide Productieuitvoeren" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Voltooide Productieuitvoeren" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Bijlagen" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Productie notities" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Nieuwe Productieorder" @@ -1914,10 +2082,37 @@ msgstr "Nieuwe Productieorder" msgid "Build Order Details" msgstr "Productieorderdetails" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Onvolledige Productieuitvoeren" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Geen plug-in gevonden" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Bestand" msgid "Select {name} file to upload" msgstr "Kies {name} bestand om te uploaden" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Bijgewerkt" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Tijdstempel van laatste update" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Unieke projectcode" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Projectbeschrijving" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig)" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "Instellingswaarde" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "Gekozen waarde is geen geldige optie" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Waarde moet een booleaanse waarde zijn" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Waarde moet een geheel getal zijn" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Geen groep" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Opnieuw opstarten vereist" -#: common/models.py:1214 +#: common/models.py:1233 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:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Migraties in behandeling" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "ID Serverinstantie" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "Stringbeschrijving voor de server instantie" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Gebruik de instantie naam" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "Gebruik de naam van de instantie in de titelbalk" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Tonen `over` beperken" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "Toon de `over` modal alleen aan superusers" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Bedrijfsnaam" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Interne bedrijfsnaam" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "Basis URL voor serverinstantie" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Standaard Valuta" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "Selecteer basisvaluta voor de berekening van prijzen" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "dagen" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Download van URL" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Download limiet" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "Maximale downloadgrootte voor externe afbeelding" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "User-agent gebruikt om te downloaden van URL" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Bevestiging vereist" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Vereis expliciete bevestiging van de gebruiker voor bepaalde actie." -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Boomstructuur Diepte" -#: common/models.py:1322 +#: common/models.py:1341 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:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Interval voor update" -#: common/models.py:1329 +#: common/models.py:1348 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:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Automatische backup" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "Automatische back-up van database- en mediabestanden inschakelen" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Automatische backup interval" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "Geef het aantal dagen op tussen geautomatiseerde backup" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "Interval Taak Verwijderen" -#: common/models.py:1350 +#: common/models.py:1369 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:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "Error Log Verwijderings Interval" -#: common/models.py:1359 +#: common/models.py:1378 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:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "Interval Verwijderen Notificatie" -#: common/models.py:1368 +#: common/models.py:1387 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:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Streepjescodeondersteuning" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "Barcode Invoer Vertraging" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "Barcode invoerverwerking vertraging" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "Barcode Webcam Ondersteuning" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode via webcam scannen in browser toestaan" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "Herzieningen onderdeel" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "Revisieveld voor onderdeel inschakelen" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Duplicaat IPN toestaan" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/models.py:1417 +#: common/models.py:1454 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:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Kopieer Onderdeel Stuklijstgegevens" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "Kopieer Onderdeel Parametergegevens" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "Kopieer Onderdeel Testdata" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Kopiëer Categorieparameter Sjablonen" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Sjabloon" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Samenstelling" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Koopbaar" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Verkoopbaar" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Onderdelen kunnen standaard verkocht worden" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Virtueel" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Onderdelen zijn standaard virtueel" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Toon Import in Weergaven" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "Toon de importwizard in sommige onderdelenweergaven" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Verwante onderdelen tonen" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Verwante onderdelen voor een onderdeel tonen" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Initiële voorraadgegevens" -#: common/models.py:1501 +#: common/models.py:1538 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:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Initiële leveranciergegevens" -#: common/models.py:1508 +#: common/models.py:1545 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:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Onderdelennaam Weergaveopmaak" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Opmaak om de onderdeelnaam weer te geven" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "Standaardicoon voor onderdeel catagorie" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "Standaardicoon voor onderdeel catagorie (leeg betekent geen pictogram)" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "Forceer Parameter Eenheden" -#: common/models.py:1528 +#: common/models.py:1566 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:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "Minimaal aantal prijs decimalen" -#: common/models.py:1536 +#: common/models.py:1574 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:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "Maximum prijs decimalen" -#: common/models.py:1549 +#: common/models.py:1587 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:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Gebruik leveranciersprijzen" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Prijsvoordelen leveranciers opnemen in de totale prijsberekening" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Aankoopgeschiedenis overschrijven" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische order prijzen overschrijven de prijzen van de leverancier" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Gebruik voorraaditem prijzen" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Gebruik prijzen van handmatig ingevoerde voorraadgegevens voor prijsberekeningen" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Voorraad artikelprijs leeftijd" -#: common/models.py:1586 +#: common/models.py:1624 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:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Gebruik variantprijzen" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenprijzen opnemen in de totale prijsberekening" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Alleen actieve varianten" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "Gebruik alleen actieve variantonderdelen voor het berekenen van variantprijzen" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "Prijzen Herbouw interval" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "Aantal dagen voordat de prijzen voor onderdelen automatisch worden bijgewerkt" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Interne prijs overschrijven" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijsbereik" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/models.py:1638 +#: common/models.py:1676 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:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Paginagrootte" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Activeer Testrapporten" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Activeer het genereren van testrapporten" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Testrapporten Toevoegen" -#: common/models.py:1676 +#: common/models.py:1714 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:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "Globaal unieke serienummers" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummers voor voorraaditems moeten globaal uniek zijn" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Serienummers automatisch invullen" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "Automatisch invullen van serienummer in formulieren" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "Verwijder uitgeputte voorraad" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/models.py:1723 +#: common/models.py:1761 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:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "Voorraadlocatie standaard icoon" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "Standaard locatie pictogram (leeg betekent geen icoon)" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "Geïnstalleerde voorraad items weergeven" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "Geïnstalleerde voorraadartikelen in voorraadtabellen tonen" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1785 +#: common/models.py:1844 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1791 +#: common/models.py:1850 msgid "Enable Return Orders" msgstr "Retourorders inschakelen" -#: common/models.py:1792 +#: common/models.py:1851 msgid "Enable return order functionality in the user interface" msgstr "Retourorder functionaliteit inschakelen in de gebruikersinterface" -#: common/models.py:1797 +#: common/models.py:1856 msgid "Return Order Reference Pattern" msgstr "Retourorder referentie patroon" -#: common/models.py:1799 +#: common/models.py:1858 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1811 +#: common/models.py:1870 msgid "Edit Completed Return Orders" msgstr "Bewerk voltooide retourorders" -#: common/models.py:1813 +#: common/models.py:1872 msgid "Allow editing of return orders after they have been completed" msgstr "Bewerken van retourorders toestaan nadat deze zijn voltooid" -#: common/models.py:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "Verkooporderreferentiepatroon" -#: common/models.py:1821 +#: common/models.py:1880 msgid "Required pattern for generating Sales Order reference field" msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld" -#: common/models.py:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "Standaard Verzending Verkooporder" -#: common/models.py:1834 +#: common/models.py:1893 msgid "Enable creation of default shipment with sales orders" msgstr "Aanmaken standaard verzending bij verkooporders inschakelen" -#: common/models.py:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "Bewerk voltooide verkooporders" -#: common/models.py:1841 +#: common/models.py:1900 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:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/models.py:1857 +#: common/models.py:1916 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/models.py:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "Bewerk voltooide verkooporders" -#: common/models.py:1871 +#: common/models.py:1930 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:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/models.py:1887 +#: common/models.py:1946 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/models.py:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/models.py:1893 +#: common/models.py:1952 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/models.py:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "Schakel gebruikersregistratie met SSO in" -#: common/models.py:1906 +#: common/models.py:1965 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:1912 +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/models.py:1913 +#: common/models.py:2004 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/models.py:1918 +#: common/models.py:2009 msgid "Auto-fill SSO users" msgstr "SSO-gebruikers automatisch invullen" -#: common/models.py:1920 +#: common/models.py:2011 msgid "Automatically fill out user-details from SSO account-data" msgstr "Gebruikersdetails van SSO-accountgegevens automatisch invullen" -#: common/models.py:1926 +#: common/models.py:2017 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/models.py:1927 +#: common/models.py:2018 msgid "On signup ask users twice for their mail" msgstr "Bij inschrijving gebruikers twee keer om hun e-mail vragen" -#: common/models.py:1932 +#: common/models.py:2023 msgid "Password twice" msgstr "Wachtwoord tweemaal" -#: common/models.py:1933 +#: common/models.py:2024 msgid "On signup ask users twice for their password" msgstr "Laat gebruikers twee keer om hun wachtwoord vragen tijdens het aanmelden" -#: common/models.py:1938 +#: common/models.py:2029 msgid "Allowed domains" msgstr "Toegestane domeinen" -#: common/models.py:1940 +#: common/models.py:2031 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Inschrijven beperken tot bepaalde domeinen (komma-gescheiden, beginnend met @)" -#: common/models.py:1946 +#: common/models.py:2037 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" -msgstr "Groep waaraan nieuwe gebruikers worden toegewezen bij registratie" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" -#: common/models.py:1952 +#: common/models.py:2045 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/models.py:1953 +#: common/models.py:2046 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/models.py:1958 +#: common/models.py:2051 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/models.py:1960 +#: common/models.py:2053 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:1968 +#: common/models.py:2061 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1969 +#: common/models.py:2062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1975 +#: common/models.py:2068 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/models.py:1976 +#: common/models.py:2069 msgid "Enable plugins to add URL routes" msgstr "Plugins toestaan om URL-routes toe te voegen" -#: common/models.py:1982 +#: common/models.py:2075 msgid "Enable navigation integration" msgstr "Activeer navigatie integratie" -#: common/models.py:1983 +#: common/models.py:2076 msgid "Enable plugins to integrate into navigation" msgstr "Plugins toestaan om te integreren in navigatie" -#: common/models.py:1989 +#: common/models.py:2082 msgid "Enable app integration" msgstr "Activeer app integratie" -#: common/models.py:1990 +#: common/models.py:2083 msgid "Enable plugins to add apps" msgstr "Activeer plug-ins om apps toe te voegen" -#: common/models.py:1996 +#: common/models.py:2089 msgid "Enable schedule integration" msgstr "Activeer planning integratie" -#: common/models.py:1997 +#: common/models.py:2090 msgid "Enable plugins to run scheduled tasks" msgstr "Activeer plugin om periodiek taken uit te voeren" -#: common/models.py:2003 +#: common/models.py:2096 msgid "Enable event integration" msgstr "Activeer evenement integratie" -#: common/models.py:2004 +#: common/models.py:2097 msgid "Enable plugins to respond to internal events" msgstr "Activeer plugin om op interne evenementen te reageren" -#: common/models.py:2010 +#: common/models.py:2103 msgid "Enable project codes" msgstr "Activeer project codes" -#: common/models.py:2011 +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "Activeer project codes voor het bijhouden van projecten" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "Voorraadcontrole functionaliteit" -#: common/models.py:2018 +#: common/models.py:2111 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:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "Externe locaties uitsluiten" -#: common/models.py:2026 +#: common/models.py:2119 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Voorraadartikelen op externe locaties uitsluiten van voorraadberekeningen" -#: common/models.py:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "Automatische Voorraadcontrole Periode" -#: common/models.py:2034 +#: common/models.py:2127 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:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "Rapport Verwijdering Interval" -#: common/models.py:2042 +#: common/models.py:2135 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Voorraadrapportage zal worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 msgid "Settings key (must be unique - case insensitive" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig" -#: common/models.py:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "Inactieve Onderdelen Verbergen" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Verberg inactieve delen bij items op de homepage" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Toon geabonneerde onderdelen" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Toon geabonneerde onderdelen op de homepage" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Toon geabonneerde categorieën" -#: common/models.py:2126 +#: common/models.py:2219 msgid "Show subscribed part categories on the homepage" msgstr "Toon geabonneerde onderdeel categorieën op de startpagina" -#: common/models.py:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Toon laatste onderdelen" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "Toon laatste onderdelen op de startpagina" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2138 +#: common/models.py:2231 msgid "Show BOMs that await validation on the homepage" msgstr "Laat BOMs zien die wachten op validatie op de startpagina" -#: common/models.py:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "Toon recente voorraadwijzigingen" -#: common/models.py:2144 +#: common/models.py:2237 msgid "Show recently changed stock items on the homepage" msgstr "Toon recent aangepaste voorraadartikelen op de startpagina" -#: common/models.py:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Toon lage voorraad" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "Toon lage voorraad van artikelen op de startpagina" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "Toon lege voorraad" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "Toon lege voorraad van artikelen op de startpagina" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Toon benodigde voorraad" -#: common/models.py:2162 +#: common/models.py:2255 msgid "Show stock items needed for builds on the homepage" msgstr "Toon benodigde voorraad van artikelen voor productie op de startpagina" -#: common/models.py:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "Toon verlopen voorraad" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "Toon verlopen voorraad van artikelen op de startpagina" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Toon verouderde voorraad" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "Toon verouderde voorraad van artikelen op de startpagina" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Toon openstaande producties" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Toon openstaande producties op de startpagina" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Toon achterstallige productie" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "Toon achterstallige producties op de startpagina" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "Toon uitstaande PO's" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "Toon uitstaande PO's op de startpagina" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Toon achterstallige PO's" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "Toon achterstallige PO's op de startpagina" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "Toon uitstaande SO's" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "Toon uitstaande SO's op de startpagina" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Toon achterstallige SO's" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "Toon achterstallige SO's op de startpagina" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "Toon in behandeling SO verzendingen" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "Toon in behandeling zijnde SO verzendingen op de startpagina" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Nieuws tonen" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Nieuws op de startpagina weergeven" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "Inline labelweergave" -#: common/models.py:2229 +#: common/models.py:2322 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:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "Standaard label printer" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" msgstr "Instellen welke label printer standaard moet worden geselecteerd" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "Inline rapport weergeven" -#: common/models.py:2245 +#: common/models.py:2338 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:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Zoek Onderdelen" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "Onderdelen weergeven in zoekscherm" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "Zoek leveranciersonderdelen" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" msgstr "Leveranciersonderdelen weergeven in zoekscherm" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "Fabrikant onderdelen zoeken" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" msgstr "Fabrikant onderdelen weergeven in zoekscherm" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Inactieve Onderdelen Verbergen" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" msgstr "Inactieve verkooporders weglaten in het zoekvenster" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "Zoek categorieën" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" msgstr "Toon onderdeelcategorieën in zoekvenster" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Zoek in Voorraad" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "Toon voorraad items in zoekvenster" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Verberg niet beschikbare voorraad items" -#: common/models.py:2289 +#: common/models.py:2382 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:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Locaties doorzoeken" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "Toon voorraadlocaties in zoekvenster" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Zoek bedrijven" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "Toon bedrijven in zoekvenster" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Zoek Bouworders" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "Toon bouworders in zoekvenster" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Inkooporders Zoeken" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "Toon inkooporders in het zoekvenster" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Inactieve Inkooporders Weglaten" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inactieve inkooporders weglaten in het zoekvenster" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Verkooporders zoeken" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "Toon verkooporders in het zoekvenster" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "Inactieve Verkooporders Weglaten" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" msgstr "Inactieve verkooporders weglaten in het zoekvenster" -#: common/models.py:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "Zoek retourorders" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "Toon bouworders in zoekvenster" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "Inactieve retourbestellingen weglaten" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "Inactieve retourorders uitsluiten in zoekvenster" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "Zoekvoorbeeld resultaten" -#: common/models.py:2357 +#: common/models.py:2450 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:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "Regex zoeken" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "Schakel reguliere expressies in zoekopdrachten in" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "Hele woorden zoeken" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "Zoekopdrachten geven resultaat voor hele woord overeenkomsten" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "Toon hoeveelheid in formulieren" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "Hoeveelheid beschikbare onderdelen in sommige formulieren weergeven" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "Escape-toets sluit formulieren" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "Gebruik de Escape-toets om standaard formulieren te sluiten" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Vaste navigatiebalk" -#: common/models.py:2388 +#: common/models.py:2481 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:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Datum formaat" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "Voorkeursindeling voor weergave van datums" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Onderdeel planning" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "Toon informatie voor het plannen van onderdelen" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Voorraadcontrole onderdeel" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Toon voorraadinformatie van onderdeel (als voorraadcontrole functionaliteit is ingeschakeld)" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "Tabel tekenreekslengte" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" -msgstr "Standaard sjabloon product onderdeel" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "Het onderdeellabelsjabloon dat automatisch wordt geselecteerd" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "Standaard sjabloon voorraad onderdeel" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "Standaard label van voorraadlocatie" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "Foutrapportages ontvangen" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "Meldingen ontvangen van systeemfouten" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Gebruiker" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Prijs" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "Eindpunt" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "Eindpunt waarop deze webhook wordt ontvangen" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "Naam van deze webhook" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Actief" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "Is deze webhook actief" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Geheim" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "Gedeeld geheim voor HMAC" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Koptekst" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "Aan gewerkt" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titel" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Gepubliceerd" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Samenvatting" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "Gelezen" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "Afbeelding" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "Afbeelding" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Symbool" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definitie" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Bijlage" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Ontbrekend bestand" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Externe link ontbreekt" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Bestand als bijlage selecteren" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Opmerking" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Bestandsnaam" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Een leeg domein is niet toegestaan." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Ongeldige domeinnaam: {domain}" @@ -3766,402 +4092,432 @@ msgstr "Geïmporteerde onderdelen" msgid "Previous Step" msgstr "Vorige Stap" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Bedrijf" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Bedrijven" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "URL bedrijfswebsite" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Telefoonnummer" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Telefoonnummer voor contact" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Contact e-mailadres" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Contactpunt" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Link naar externe bedrijfsinformatie" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "is klant" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" -msgstr "is leverancier" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "is fabrikant" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Fabriceert dit bedrijf onderdelen?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" 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:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Bedrijf" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Adres" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Fabrikant" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: 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 "Fabrikant artikel nummer (MPN)" - -#: company/models.py:515 -msgid "URL for external manufacturer part link" -msgstr "URL voor externe link van het fabrikant onderdeel" - -#: company/models.py:524 -msgid "Manufacturer part description" -msgstr "Omschrijving onderdeel fabrikant" - -#: company/models.py:581 company/models.py:608 company/models.py:824 +#: company/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Basis onderdeel" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Onderdeel selecteren" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Fabrikant" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Fabrikant selecteren" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "URL voor externe link van het fabrikant onderdeel" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "Omschrijving onderdeel fabrikant" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "Parameternaam" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Waarde" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Parameterwaarde" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Eenheden" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Parameter eenheden" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Leveranciersonderdeel" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" -#: 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Leverancier" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Selecteer fabrikant onderdeel" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Opmerking" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "basisprijs" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "meerdere" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "Order meerdere" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "Bedrijf verwijderen" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "Afbeelding onderdeel" @@ -4231,17 +4587,17 @@ msgstr "Afbeelding downloaden van URL" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Klant" @@ -4249,19 +4605,12 @@ msgstr "Klant" msgid "Uses default currency" msgstr "Gebruik standaard valuta" -#: 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 "Adres" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefoon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Nieuw leveranciers onderdeel" @@ -4311,7 +4660,7 @@ msgstr "Fabrikant onderdelen" msgid "Create new manufacturer part" msgstr "Maak nieuw fabrikant onderdeel" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Nieuw fabrikant onderdeel" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Nieuwe Inkooporder" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ msgstr "Fabrikanten" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Order onderdeel" @@ -4435,7 +4784,8 @@ 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:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Intern onderdeel" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ msgstr "Leveranciers" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nieuwe Parameter" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "Toegewezen Voorraadartikelen" 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 "Leveranciersonderdeel" - #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Order Onderdeel" @@ -4544,12 +4885,12 @@ msgstr "Verwijder leveranciers onderdeel" 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:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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:207 -#: templates/js/translated/stock.js:537 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Nieuw Voorraadartikel" @@ -4582,29 +4923,33 @@ msgstr "Prijsinformatie" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Voorraadartikelen" @@ -4630,10 +4975,6 @@ msgstr "Klanten" msgid "New Customer" msgstr "Nieuwe Klant" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Bedrijven" - #: company/views.py:52 msgid "New Company" msgstr "Nieuw Bedrijf" @@ -4642,48 +4983,228 @@ msgstr "Nieuw Bedrijf" msgid "Placed" msgstr "Geplaatst" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Totaalprijs" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 msgid "Purchase Order" msgstr "Inkooporder" -#: 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Link naar externe pagina" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Orderreferentie" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "Inkooporder status" -#: order/models.py:487 +#: order/models.py:493 msgid "Company from which the items are being ordered" msgstr "Bedrijf waar de artikelen van worden besteld" -#: order/models.py:498 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1702 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "Leveranciersreferentie" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "Order referentiecode van leverancier" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "ontvangen door" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Datum van uitgifte" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "Order uitgegeven op datum" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "Order voltooid op datum" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "Hoeveelheid moet een positief getal zijn" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "Bedrijf waaraan de artikelen worden verkocht" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "Klantreferentie " -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "Klant order referentiecode" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Verzenddatum" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "verzonden door" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 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:1043 +#: order/models.py:1094 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:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Hoeveelheid artikelen" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "Artikelregel referentie" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "Artikel notities" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "Additionele context voor deze regel" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "Stukprijs" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "Leveranciersonderdeel moet overeenkomen met leverancier" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "verwijderd" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "Leveranciersonderdeel" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Ontvangen" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Inkoopprijs" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "Aankoopprijs per stuk" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "Waar wil de inkoper dat dit artikel opgeslagen wordt?" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtueel onderdeel kan niet worden toegewezen aan een verkooporder" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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:1606 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Prijs per stuk" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "Verzonden hoeveelheid" -#: order/models.py:1708 +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "Datum van verzending" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "Gecontroleerd door" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "Zending" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "Zendingsnummer" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "Volgnummer" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "Zending volginformatie" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "Factuurnummer" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "Referentienummer voor bijbehorende factuur" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "Verzending is al verzonden" -#: order/models.py:1772 +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "Zending heeft geen toegewezen voorraadartikelen" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "Voorraadartikel is niet toegewezen" -#: order/models.py:1899 +#: order/models.py:1973 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:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "Verkooporder komt niet overeen met zending" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "Verzending komt niet overeen met verkooporder" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "Regel" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "Verzendreferentie verkooporder" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Artikel" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "Selecteer voorraadartikel om toe te wijzen" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "Voer voorraadtoewijzingshoeveelheid in" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "Intern Onderdeelnummer" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "De volgende serienummers zijn al toegewezen" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Kwijt" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Retour" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "In Behandeling" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Retour" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Herstel" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Vervangen" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Restitutie" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Afwijzen" @@ -5426,87 +5987,93 @@ msgid "Edit order" msgstr "Order bewerken" #: 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 annuleren" - -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Order annuleren" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Order Voltooien" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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:115 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Order Beschrijving" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "Geen leveranciersinformatie beschikbaar" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 msgid "Completed Line Items" msgstr "Afgeronde artikelen" -#: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:167 -#: order/templates/order/sales_order_base.html:177 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Incompleet" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Uitgegeven" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 msgid "Total cost" 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:243 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "Totale kosten konden niet worden berekend" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Rij verwijderen" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "Pakbon afdrukken" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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:239 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "Print verkooporderrapport" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Voltooi Verkooporder" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "Deze Verkooporder is niet volledig toegewezen" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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:321 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "Verzendingen in behandeling" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Acties" @@ -5775,35 +6343,21 @@ 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:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "Onderdeel-id" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Onderdeel naam" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Onderdeel omschrijving" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Onderdelen" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "Binnenkomende Inkooporder" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "Uitgaande Verkooporder" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "Geproduceerde voorraad door Productieorder" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "Voorraad vereist voor Productieorder" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Standaard locatie" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Totale Voorraad" @@ -6010,1042 +6579,1144 @@ msgstr "Totale Voorraad" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Onderdeel Categorie" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: 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:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Standaard locatie voor onderdelen in deze categorie" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 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:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Onderdeel naam" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "Intern Onderdeelnummer" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "Standaardleverancier" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "Eenheden voor dit onderdeel" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Datum" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "Aantal onderdelen" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Ingeschakeld" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "Ingeschakeld" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "De template van de parameter moet uniek zijn" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "Parameternaam" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "De template van de parameter moet uniek zijn" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "Parameternaam" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "Parameterwaarde" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "Geen onderdelen geselecteerd" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Parameters kopiëren" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "Ongeldige hoeveelheid" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Categorie bewerken" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Categorie bewerken" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Categorie verwijderen" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Categorie verwijderen" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Onderdeel Parameters" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Nieuwe Categorie" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Verkoopordertoewijzingen" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "Een parameter toevoegen" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "Assemblages" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Productieordertoewijzingen" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "Onderdeelfabrikanten" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 msgid "Format" msgstr "Formaat" #: 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Selecteer bestandsindeling" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Label afdrukken" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Voorraad acties" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "Toegewezen aan Productieorder" msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/templates/part/part_base.html:291 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Voorraad" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "Afbeelding van onderdeel niet gevonden" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Geen actie gespecificeerd" msgid "No matching action found" msgstr "Geen overeenkomende actie gevonden" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Geen overeenkomst gevonden voor streepjescodegegevens" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Overeenkomst gevonden voor streepjescodegegevens" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Onvoldoende voorraad beschikbaar" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Bestandsnaam Patroon" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Breedte [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "Label breedte, gespecificeerd in mm" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Hoogte [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "Label hoogte, gespecificeerd in mm" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Stukprijs" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 msgid "Total" msgstr "Totaal" -#: 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 "Serienummer" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:124 stock/templates/stock/location.html:186 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Voorraadlocaties" -#: stock/models.py:166 stock/models.py:949 +#: stock/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "Inkooporder Bron" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "Bestemming Verkooporder" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sublocaties" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "In quarantaine geplaatst" msgid "Legacy stock tracking entry" msgstr "Verouderde volgcode" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Voorraaditem gemaakt" @@ -9431,7 +10173,7 @@ msgstr "Splits van bovenliggend item" msgid "Split child item" msgstr "Splits onderliggende item" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Samengevoegde voorraadartikelen" @@ -9451,7 +10193,7 @@ msgstr "Product voltooid" msgid "Build order output rejected" msgstr "Build order uitvoer afgewezen" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Verbruikt door productieorder" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "Scan naar Locatie" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "Voorraad tellen" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "Voorraad overzetten" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Product" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Geen fabrikant geselecteerd" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "volgende pagina" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Geen locatie ingesteld" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "Locatie acties" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Bewerk locatie" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Verwijder locatie" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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:176 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "Maak nieuwe voorraadlocatie" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Nieuwe Locatie" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Verwijderen" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "Startpagina" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Bevestigen" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Vereiste Hoeveelheid" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 0001549987..288012230c 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:46\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -21,14 +21,14 @@ msgstr "" msgid "API endpoint not found" msgstr "API-endepunkt ikke funnet" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Brukeren har ikke rettigheter til å se denne modellen" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "Ugyldig enhet angitt ({unit})" #: InvenTree/conversion.py:177 msgid "No value provided" @@ -52,30 +52,34 @@ msgstr "Ugyldig mengde oppgitt ({exc})" msgid "Error details can be found in the admin panel" msgstr "Feildetaljer kan finnes i admin-panelet" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Oppgi dato" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Notater" @@ -88,258 +92,270 @@ msgstr "Verdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Angitt verdi samsvarer ikke med påkrevd mønster: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Oppgi passord" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Oppgi nytt passord" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Bekreft passord" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Bekreft nytt passord" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Gammelt passord" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-post (gjenta)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Bekreft e-postaddresse" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Du må angi samme e-post hver gang." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Den oppgitte primære e-postadressen er ikke gyldig." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Det oppgitte e-postdomenet er ikke godkjent." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Registrering er deaktivert." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Tom serienummerstreng" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Duplisert serienummer" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Ugyldig gruppesekvens: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppesekvens {group} overskrider tillatt antall ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Ugyldig gruppesekvens: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Ingen serienummer funnet" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Antall unike serienumre ({len(serials)}) må samsvare med antallet ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tagger fra denne verdien" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Tilkoblingsfeil" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Serveren svarte med ugyldig statuskode" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Det har oppstått et unntak" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarte med ugyldig \"Content-Length\"-verdi" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Bildestørrelsen er for stor" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Bildenedlasting overskred maksimal størrelse" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Ekstern server returnerte tomt svar" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Angitt URL er ikke en gyldig bildefil" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "Arabisk" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgarsk" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Tsjekkisk" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Dansk" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Tysk" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Gresk" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Engelsk" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spansk" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spansk (Meksikansk)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "Estisk" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Persisk" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finsk" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Fransk" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" -msgstr "" +msgstr "Hindi" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Ungarsk" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italiensk" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japansk" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Koreansk" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" -msgstr "" +msgstr "Latvisk" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Nederlandsk" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polsk" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugisisk" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugisisk (Brasil)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Rumensk" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Russisk" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Slovakisk" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slovensk" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Serbisk" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Svensk" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" -msgstr "" +msgstr "Ukrainsk" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Kinesisk (forenklet)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Kinesisk (tradisjonell)" @@ -348,257 +364,165 @@ msgstr "Kinesisk (tradisjonell)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Logg inn på appen" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-post" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Feil under validering av utvidelse" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metadata må være et python dict-objekt" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Utvidelse-metadata" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "JSON-metadatafelt, for bruk av eksterne utvidelser" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Uriktig formatert mønster" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Ukjent formatnøkkel spesifisert" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Mangler nødvendig formatnøkkel" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Referansefeltet kan ikke være tomt" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Referansen må samsvare påkrevd mønster" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Referansenummeret er for stort" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Fil mangler" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Mangler eksternlenke" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Vedlegg" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Velg fil å legge ved" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Lenke til ekstern URL" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Kommentar" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Kommentar til fil" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "opplastet dato" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Filnavn kan ikke være tomt" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Ugyldig vedleggskatalog" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Filnavn inneholder ugyldig tegn '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Filnavn mangler filtype" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Vedlegg med dette filnavnet finnes allerede" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Feil ved endring av filnavn" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikatnavn kan ikke eksistere under samme overordnede" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "overkategori" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Markdown-notater (valgfritt)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Strekkodedata" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Tredjeparts strekkodedata" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Strekkode-hash" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Unik hash av strekkodedata" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Eksisterende strekkode funnet" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Serverfeil" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "En feil har blitt logget av serveren." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Valuta" msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Brukernavn" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Fornavn" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "Fornavn på brukeren" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Etternavn" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "Etternavn på brukeren" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "E-postadressen til brukeren" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "Personale" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "Har denne brukeren personelltillatelser" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "Superbruker" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "Er denne brukeren en superbruker" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Aktiv" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "Er denne brukerkontoen aktiv" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Du har ikke tillatelse til å endre denne brukerrollen." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Bare superbrukere kan opprette nye brukere" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Din konto er opprettet." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Vennligst bruk funksjonen for å tilbakestille passord for å logge inn" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Filnavn" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Ugyldig verdi" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Datafil" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Velg datafil for opplasting" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Filtypen støttes ikke" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Filen er for stor" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Ingen kolonner funnet i filen" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Ingen datarader funnet i fil" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Ingen datarader oppgitt" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Ingen datakolonner angitt" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Mangler påkrevd kolonne: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dupliaktkolonne: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Eksternt bilde" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URLtil ekstern bildefil" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Sjekk av bakgrunnsarbeider mislyktes" @@ -702,27 +679,27 @@ msgstr "E-post backend ikke konfigurert" msgid "InvenTree system health checks failed" msgstr "InvenTree's-systemets helsesjekker mislyktes" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Ukjent database" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Ugyldig fysisk enhet" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Svinn-verdien kan ikke være negativ" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Svinn kan ikke overstige 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Ugyldig verdi for svinn" @@ -750,62 +727,63 @@ msgstr "Systeminformasjon" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Spores" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Tilgjengelig" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Produksjonsordre" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Produksjonsordre" msgid "Build Orders" msgstr "Produksjonsordrer" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "Sammenstillings-BOMen er ikke godkjent" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "Produksjonsordre kan ikke opprettes for en inaktiv del" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "Produksjonsordre kan ikke opprettes for en ulåst del" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Ugyldig valg for overordnet produksjon" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "Ansvarlig bruker eller gruppe må spesifiseres" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Produksjonsordrens del kan ikke endres" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referanse" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Kort beskrivelse av produksjonen (valgfritt)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Overordnet produksjon" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Produksjonsordre som denne produksjonen er tildelt" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Produksjonsordre som denne produksjonen er tildelt" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Del" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Velg del å produsere" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Salgsordrereferanse" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Salgsordren denne produksjonen er tildelt til" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Kildeplassering" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Fullført plassering" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Velg plassering der fullførte artikler vil bli lagret" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Produksjonsmengde" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Antall lagervarer å produsere" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Fullførte artikler" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Antall lagervarer som er fullført" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Produksjonsstatus" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Batchkode" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Opprettelsesdato" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Forventet sluttdato" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Fullført dato" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "fullført av" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Utstedt av" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Brukeren som utstedte denne produksjonsordren" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Bruker eller gruppe ansvarlig for produksjonsordren" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ekstern lenke" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Lenke til ekstern URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "Produksjonsprioritet" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Produksjonsordrens prioritet" msgid "Project Code" msgstr "Prosjektkode" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Prosjektkode for denne produksjonsordren" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" -msgstr "" +msgstr "Kunne ikke delegere bort oppgaven for å fullføre tildelinger" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Produksjonsordre {build} er fullført" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Produksjonsartikkelen er allerede fullført" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "" +msgstr "Produksjonsartikkel {serial} har ikke bestått alle påkrevde tester" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" -msgstr "" +msgstr "Produksjonsartikkel" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Produksjonsobjekt" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Produksjonsobjekt" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Antall" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må være 1 for serialisert lagervare" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Monteres i" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Lagervare for montering" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Delnavn" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "Etikett for prosjektkode" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Denne produksjonsartikkelen er ikke fullt tildelt" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Plassering" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" -msgstr "" +msgstr "Lagerplassering for produksjonsartikkel" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummer" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" -msgstr "" +msgstr "Serienumre må angis for sporbare deler" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" -msgstr "" +msgstr "Status" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" -msgstr "" +msgstr "Bruk tildelt lagerbeholdning" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" -msgstr "" +msgstr "Bruk all lagerbeholdning som allerede er tildelt denne produksjonen" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle produksjonsartikler som ikke er fullført" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:681 +#: build/serializers.py:718 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:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:713 +#: build/serializers.py:750 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:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:838 +#: build/serializers.py:878 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:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" +msgstr "Kunne ikke starte auto-tideling" + +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "Leverandørens delnummer" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Produsentens varenummer" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "Plasseringsnavn" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "Produksjonsreferanse" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "BOM-referanse" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Emballasje" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "Del-ID" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "Del -IPN" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Delbeskrivelse" + +#: build/serializers.py:1187 +msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Serienummer" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "Tildelt antall" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Tilgjengelig antall" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "Delkategori-ID" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "Delkategorinavn" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Sporbar" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "Nedarvet" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "Tillat Varianter" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Tildelt lagerbeholdning" -#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "I bestilling" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "Tilgjengelige erstatningsvarer" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "Tilgjengelige variantvarer" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "Totalt tilgjengelig lagerbeholdning" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External Stock" +msgstr "Ekstern lagerbeholdning" + #: 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Ventende" @@ -1540,15 +1677,21 @@ msgstr "Ventende" msgid "Production" msgstr "Produksjon" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Fullført" @@ -1576,8 +1719,8 @@ msgstr "Miniatyrbilde for del" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Strekkodehandlinger" @@ -1588,7 +1731,7 @@ msgstr "Strekkodehandlinger" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Vis QR-kode" @@ -1599,9 +1742,9 @@ msgstr "Vis QR-kode" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Fjern strekkodekobling" @@ -1612,7 +1755,7 @@ msgstr "Fjern strekkodekobling" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Koble mot strekkode" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Rediger Produksjon" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Kanseller produksjon" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "Dupliser Produksjon" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Kanseller produksjon" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Slett Produksjon" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Fullfør Produksjon" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Produksjonsbeskrivelse" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Ingen produksjonsartikler har blitt opprettet for produksjonsordren" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Produksjonsordren er klar til å merkes som fullført" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Produksjonsordren kan ikke fullføres på grunn av utestående artikler" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Nødvendig produksjonsantall er ikke oppnådd enda" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 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/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Måldato" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Denne produksjonsordren forfalt %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Forfalt" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Fullførte byggeresultater" -#: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Fullførte byggeresultater" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Salgsordre" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Utstedt av" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Prioritet" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "Slett Produksjonsordre" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "Produksjonsordrens QR-kode" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "Koble Strekkode til Produksjonsordre" @@ -1766,8 +1930,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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Destinasjon" @@ -1779,23 +1943,23 @@ msgstr "Målplassering er ikke spesifisert" msgid "Allocated Parts" msgstr "Tildelte deler" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" -msgstr "" +msgstr "Parti" #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Opprettet" @@ -1804,8 +1968,8 @@ msgid "No target date set" msgstr "Ingen måldato satt" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Fullført" @@ -1813,13 +1977,13 @@ msgstr "Fullført" msgid "Build not complete" msgstr "Produksjon ikke fullført" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Underordnede Produksjonsordrer" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Tildel Lagerbeholdning til Produksjon" +msgid "Build Order Line Items" +msgstr "Produksjonsartikkel" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Automatisk tildeling" msgid "Manually allocate stock to build" msgstr "Manuelt tildel lagerbeholdning til produksjon" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Tildel lagerbeholdning" @@ -1856,7 +2020,7 @@ msgstr "Bestill deler" #: build/templates/build/detail.html:205 msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "" +msgstr "Tilgjengelig lagerbeholdning er filtrert basert på angitt kildeplassering for denne produksjonsordren" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" @@ -1870,15 +2034,19 @@ msgstr "Opprett ny produksjonsartikkel" msgid "New Build Output" msgstr "Ny Produksjonsartikkel" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "Brukt lagerbeholdning" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Fullførte produksjonsartikkel" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Fullførte produksjonsartikkel" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Vedlegg" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Produksjonsnotater" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "Tildeling fullført" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "Alle linjer er fullt tildelt" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Ny produksjonsordre" @@ -1914,23 +2082,50 @@ msgstr "Ny produksjonsordre" msgid "Build Order Details" msgstr "Produksjonsordre-detaljer" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Ufullstendige artikler" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "Er lenke" + +#: common/api.py:700 +msgid "Is File" +msgstr "Er fil" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" + #: common/currency.py:132 msgid "Invalid currency code" -msgstr "" +msgstr "Ugyldig valutakode" #: common/currency.py:134 msgid "Duplicate currency code" -msgstr "" +msgstr "Valutakode eksisterer allerede" #: common/currency.py:139 msgid "No valid currency codes provided" -msgstr "" +msgstr "Ingen gyldige valutakoder angitt" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Ingen programtillegg" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Fil" msgid "Select {name} file to upload" msgstr "Velg {name} fil som skal lastes opp" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Oppdatert" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Tidsstempel for forrige oppdatering" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" -msgstr "" +msgstr "Nettstedets URL er låst av konfigurasjon" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Unik prosjektkode" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Prosjektbeskrivelse" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "Bruker eller gruppe ansvarlig for dette prosjektet" -#: common/models.py:764 +#: common/models.py:783 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:768 +#: common/models.py:787 msgid "Settings value" msgstr "Innstillings verdi" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "Valgt verdi er ikke et gyldig alternativ" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Verdien må være en boolsk verdi" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Verdien må være et heltall" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Nøkkelstreng må være unik" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Ingen gruppe" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Omstart kreves" -#: common/models.py:1214 +#: common/models.py:1233 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:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Ventende migrasjoner" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "Antall ventende databasemigreringer" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Navn på serverinstans" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "Strengbeskrivelse for serverinstansen" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Bruk instansnavn" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "Bruk instansnavnet på tittellinjen" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Begrens visning av 'om'" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "Vis `about`-modal kun til superbrukere" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Firmanavn" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Internt firmanavn" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Base-URL" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "Base-URL for serverinstans" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Standardvaluta" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "Velg grunnvalutaen for prisberegninger" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" -msgstr "" +msgstr "Støttede valutaer" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" -msgstr "" +msgstr "Liste over støttede valutakoder" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "Oppdateringsintervall for valuta" -#: common/models.py:1273 +#: common/models.py:1292 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:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "dager" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "Valutaoppdaterings-plugin" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "Valgt valutaoppdaterings-plugin" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Last ned fra URL" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Nedlastingsgrense" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "Maksimal tillatt nedlastingsstørrelse for eksternt bilde" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "User-Agent brukt for å laste ned fra URL" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "Streng URL-validering" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "Krev skjemaspesifikasjon ved validering av URLer" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Krev bekreftelse" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Krev eksplisitt brukerbekreftelse for visse handlinger." -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Tredybde" -#: common/models.py:1322 +#: common/models.py:1341 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:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Intervall for oppdateringssjekk" -#: common/models.py:1329 +#: common/models.py:1348 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:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Automatisk sikkerhetskopiering" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Automatisk sikkerhetskopieringsintervall" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "Angi antall dager mellom automatiske sikkerhetskopieringshendelser" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "Slettingsintervall for oppgaver" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "Bakgrunnsoppgaveresultater vil bli slettet etter antall angitte dager" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "Slettingsintervall for feillogg" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "Feilloggene vil bli slettet etter et angitt antall dager" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "Slettingsintervall for varsler" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "Brukervarsler slettes etter angitt antall dager" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Strekkodestøtte" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "Aktiver støtte for strekkodeleser i webgrensesnittet" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "Innlesingsforsinkelse for strekkode" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "Tidsforsinkelse for behandling av strekkode" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "Støtte for strekkodewebkamera" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "Tillat strekkodelesning via webkamera i nettleseren" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "Vis Strekkodedata" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "Vis strekkodedata som tekst" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "Delrevisjoner" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "Aktiver revisjonsfeltet for Del" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "IPN regex" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulært uttrykksmønster for matching av internt delnummer" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Tilat duplikat av internt delnummer" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "Tillat flere deler å dele samme interne delnummer" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "Tillat redigering av internt delnummer" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "Tillat endring av IPN-verdien mens du redigerer en del" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Kopier BOM-data fra del" -#: common/models.py:1423 +#: common/models.py:1460 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:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "Kopier parameterdata fra del" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopier parameterdata som standard ved duplisering av en del" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "Kopier testdata fra del" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "Kopier testdata som standard ved duplisering av en del" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Kopier designmaler for kategoriparametere" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "Kopier parametermaler for kategori ved oppretting av en del" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Mal" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "Deler er maler som standard" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Sammenstilling" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Komponent" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Kjøpbar" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Salgbar" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Deler er salgbare som standard" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Virtuelle" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Deler er virtuelle som standard" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Vis import i visninger" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "Vis importveiviseren i noen deler visninger" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Vis relaterte deler" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Vis relaterte deler i en del" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Innledende lagerbeholdningsdata" -#: common/models.py:1501 +#: common/models.py:1538 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:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Innledende leverandørdata" -#: common/models.py:1508 +#: common/models.py:1545 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:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Visningsformat for delnavn" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Format for å vise delnavnet" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "Standardikon for delkategorier" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "Standardikon for delkategorier (tomt betyr ingen ikon)" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "Tving parameterenheter" -#: common/models.py:1528 +#: common/models.py:1566 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:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "Minimum antall desimalplasser for priser" -#: common/models.py:1536 +#: common/models.py:1574 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:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalt antall desimalplasser for priser" -#: common/models.py:1549 +#: common/models.py:1587 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:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Bruk leverandørpriser" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inkluder leverandørprisbrudd i beregninger av totalpriser" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Innkjøpshistorikkoverstyring" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historiske innkjøpspriser overstyrer leverandørprisnivåer" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Bruk lagervarepriser" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Bruk priser fra manuelt innlagte lagervarer for prisberegninger" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Lagervare prisalder" -#: common/models.py:1586 +#: common/models.py:1624 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:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Bruk Variantpriser" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "Inkluder variantpriser i beregninger av totale priser" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Kun aktive varianter" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "Bruk kun aktive variantdeler til beregning av variantprising" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "Intervall for rekalkulering av priser" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "Antall dager før delpriser blir automatisk oppdatert" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Interne Priser" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Aktiver interne priser for deler" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Intern prisoverstyring" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "Hvis tilgjengelig, overstyrer interne priser kalkulering av prisområde" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Aktiver etikettutskrift" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Aktiver utskrift av etiketter fra nettleseren" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "Etikettbilde-DPI" -#: common/models.py:1638 +#: common/models.py:1676 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:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Aktiver Rapporter" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Aktiver generering av rapporter" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Feilsøkingsmodus" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Generer rapporter i feilsøkingsmodus (HTML-output)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Sidestørrelse" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Standard sidestørrelse for PDF-rapporter" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Aktiver Testrapporter" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Aktiver generering av testrapporter" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Legg ved testrapporter" -#: common/models.py:1676 +#: common/models.py:1714 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:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "Globalt Unike Serienummer" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummer for lagervarer må være globalt unike" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Automatisk tildeling av Serienummer" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "Aumatisk fyll ut serienummer i skjemaer" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "Slett oppbrukt lagerbeholdning" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "Batchkodemal" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "Mal for generering av standard batchkoder for lagervarer" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Lagerbeholdning utløper" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "Aktiver funksjonalitet for utløp av lagerbeholdning" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "Selg utløpt lagerbeholdning" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "Tillat salg av utgått lagerbeholdning" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Foreldet lagerbeholdning tidsintervall" -#: common/models.py:1723 +#: common/models.py:1761 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:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Produsér Utløpt Lagerbeholdning" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "Tillat produksjon med utløpt lagerbeholdning" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "Kontroll over eierskap av lagerbeholdning" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "Aktiver eierskap over lagerplasseringer og -varer" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "Lagerplassering standard ikon" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "Lagerplassering standard ikon (tomt betyr ingen ikon)" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "Vis installerte lagervarer" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "Vis installerte lagervarer i lagertabeller" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Produksjonsordre-referansemønster" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "Nødvendig mønster for å generere Produksjonsordre-referansefeltet" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1785 +#: common/models.py:1844 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1791 +#: common/models.py:1850 msgid "Enable Return Orders" msgstr "Aktiver returordrer" -#: common/models.py:1792 +#: common/models.py:1851 msgid "Enable return order functionality in the user interface" msgstr "Aktiver returordrefunksjonalitet i brukergrensesnittet" -#: common/models.py:1797 +#: common/models.py:1856 msgid "Return Order Reference Pattern" msgstr "Returordre-referansemønster" -#: common/models.py:1799 +#: common/models.py:1858 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1811 +#: common/models.py:1870 msgid "Edit Completed Return Orders" msgstr "Rediger fullførte returordrer" -#: common/models.py:1813 +#: common/models.py:1872 msgid "Allow editing of return orders after they have been completed" msgstr "Tillat redigering av returordrer etter de er fullført" -#: common/models.py:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "Salgsordre-referansemønster" -#: common/models.py:1821 +#: common/models.py:1880 msgid "Required pattern for generating Sales Order reference field" msgstr "Påkrevd mønster for å generere salgsordrereferansefelt" -#: common/models.py:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "Salgsordre standard fraktmetode" -#: common/models.py:1834 +#: common/models.py:1893 msgid "Enable creation of default shipment with sales orders" msgstr "Aktiver opprettelse av standard forsendelse med salgsordrer" -#: common/models.py:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "Rediger fullførte salgsordrer" -#: common/models.py:1841 +#: common/models.py:1900 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:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "Referansemønster for innkjøpsordre" -#: common/models.py:1857 +#: common/models.py:1916 msgid "Required pattern for generating Purchase Order reference field" msgstr "Obligatorisk mønster for generering av referansefelt for innkjøpsordre" -#: common/models.py:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "Rediger fullførte innkjøpsordre" -#: common/models.py:1871 +#: common/models.py:1930 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:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "Autofullfør innkjøpsordrer" -#: common/models.py:1879 +#: common/models.py:1938 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:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/models.py:1887 +#: common/models.py:1946 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/models.py:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/models.py:1893 +#: common/models.py:1952 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/models.py:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "Aktiver SSO-registrering" -#: common/models.py:1906 +#: common/models.py:1965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Aktiver selvregistrering via SSO for brukere på innloggingssiden" -#: common/models.py:1912 +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 msgid "Email required" msgstr "E-postadresse kreves" -#: common/models.py:1913 +#: common/models.py:2004 msgid "Require user to supply mail on signup" msgstr "Krevt at brukere angir e-post ved registrering" -#: common/models.py:1918 +#: common/models.py:2009 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO-brukere" -#: common/models.py:1920 +#: common/models.py:2011 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO-kontodata" -#: common/models.py:1926 +#: common/models.py:2017 msgid "Mail twice" msgstr "E-post to ganger" -#: common/models.py:1927 +#: common/models.py:2018 msgid "On signup ask users twice for their mail" msgstr "Spør brukeren om e-post to ganger ved registrering" -#: common/models.py:1932 +#: common/models.py:2023 msgid "Password twice" msgstr "Passord to ganger" -#: common/models.py:1933 +#: common/models.py:2024 msgid "On signup ask users twice for their password" msgstr "Spør brukeren om passord to ganger ved registrering" -#: common/models.py:1938 +#: common/models.py:2029 msgid "Allowed domains" msgstr "Tillatte domener" -#: common/models.py:1940 +#: common/models.py:2031 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Begrens registrering til bestemte domener (kommaseparert, begynner med @)" -#: common/models.py:1946 +#: common/models.py:2037 msgid "Group on signup" msgstr "Gruppe ved registrering" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" -msgstr "Gruppe nye brukere blir tilknyttet ved registrering" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" -#: common/models.py:1952 +#: common/models.py:2045 msgid "Enforce MFA" msgstr "Krev MFA" -#: common/models.py:1953 +#: common/models.py:2046 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/models.py:1958 +#: common/models.py:2051 msgid "Check plugins on startup" msgstr "Sjekk utvidelser ved oppstart" -#: common/models.py:1960 +#: common/models.py:2053 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:1968 +#: common/models.py:2061 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1969 +#: common/models.py:2062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1975 +#: common/models.py:2068 msgid "Enable URL integration" msgstr "Aktiver URL-integrasjon" -#: common/models.py:1976 +#: common/models.py:2069 msgid "Enable plugins to add URL routes" msgstr "Tillat utvidelser å legge til URL-ruter" -#: common/models.py:1982 +#: common/models.py:2075 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrasjon" -#: common/models.py:1983 +#: common/models.py:2076 msgid "Enable plugins to integrate into navigation" msgstr "Tillat utvidelser å integrere mot navigasjon" -#: common/models.py:1989 +#: common/models.py:2082 msgid "Enable app integration" msgstr "Aktiver app-integrasjon" -#: common/models.py:1990 +#: common/models.py:2083 msgid "Enable plugins to add apps" msgstr "Tillat utvidelser å legge til apper" -#: common/models.py:1996 +#: common/models.py:2089 msgid "Enable schedule integration" msgstr "Aktiver tidsplanintegrasjon" -#: common/models.py:1997 +#: common/models.py:2090 msgid "Enable plugins to run scheduled tasks" msgstr "Tillat utvidelser å kjøre planlagte oppgaver" -#: common/models.py:2003 +#: common/models.py:2096 msgid "Enable event integration" msgstr "Aktiver hendelsesintegrasjon" -#: common/models.py:2004 +#: common/models.py:2097 msgid "Enable plugins to respond to internal events" msgstr "Tillat utvidelser å reagere på interne hendelser" -#: common/models.py:2010 +#: common/models.py:2103 msgid "Enable project codes" msgstr "Aktiver prosjektkoder" -#: common/models.py:2011 +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "Aktiver prosjektkoder for å spore prosjekter" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "Varetellingsfunksjonalitet" -#: common/models.py:2018 +#: common/models.py:2111 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:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "Ekskluder eksterne plasseringer" -#: common/models.py:2026 +#: common/models.py:2119 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Eksluder lagervarer i eksterne plasseringer fra varetellinger" -#: common/models.py:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "Automatisk varetellingsperiode" -#: common/models.py:2034 +#: common/models.py:2127 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:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "Rapportslettingsintervall" -#: common/models.py:2042 +#: common/models.py:2135 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Varetellingsrapporter vil slettes etter angitt antall dager" -#: common/models.py:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "Vis brukernes fulle navn" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" msgstr "Vis brukernes fulle navn istedet for brukernavn" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 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:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "Skjul inaktive elementer" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Skjul inaktive deler i resultater som vises på hjemmesiden" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Vis abonnerte deler" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Vis abonnerte deler på startsiden" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Vis abonnerte kategorier" -#: common/models.py:2126 +#: common/models.py:2219 msgid "Show subscribed part categories on the homepage" msgstr "Vis abonnerte delkatekorier på startsiden" -#: common/models.py:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Vis nyeste deler" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "Vis nyeste deler på startsiden" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2138 +#: common/models.py:2231 msgid "Show BOMs that await validation on the homepage" msgstr "Vis stykklister som venter på validering på startsiden" -#: common/models.py:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "Vis nylige lagerendringer" -#: common/models.py:2144 +#: common/models.py:2237 msgid "Show recently changed stock items on the homepage" msgstr "Vis nylig endrede lagervarer på startsiden" -#: common/models.py:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Vis lav lagerbeholdning" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "Vis lave lagervarer på startsiden" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "Vis tomme lagervarer" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "Vis tom lagerbeholdning på startsiden" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Vis nødvendig lagerbeholdning" -#: common/models.py:2162 +#: common/models.py:2255 msgid "Show stock items needed for builds on the homepage" msgstr "Vis lagervarer som trengs for produksjon på startsiden" -#: common/models.py:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "Vis utløpt lagerbeholdning" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "Vis utløpte lagervarer på startsiden" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Vis foreldet lagerbeholdning" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "Vis foreldet lagerbeholdning på startsiden" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Vis ventende produksjoner" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Vi ventende produksjoner på startsiden" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Vis forfalte produksjoner" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "Vis forfalte produksjoner på startsiden" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "Vis utestående Innkjøpsordrer" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "Vis utestående Innkjøpsordrer på startsiden" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Vis forfalte Innkjøpsordrer" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "Vis forfalte Innkjøpsordrer på startsiden" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "Vis utestående Salgsordrer" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "Vis utestående Salgsordrer på startsiden" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Vis forfalte SOer" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "Vis forfalte SOer på startsiden" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "Vis ventende SO-forsendelser" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "Vis ventende SO-forsendelser på startsiden" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Vis Nyheter" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Vis nyheter på startsiden" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "Innebygd etikettvisning" -#: common/models.py:2229 +#: common/models.py:2322 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:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "Standard etikettskriver" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" msgstr "Konfigurer hvilken etikettskriver som skal være valgt som standard" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "Innebygd rapportvisning" -#: common/models.py:2245 +#: common/models.py:2338 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:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Søk i Deler" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "Vis deler i forhåndsvsningsvinduet for søk" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "Søk i Leverandørdeler" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" msgstr "Vis leverandørdeler i forhåndsvisningsvinduet for søk" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "Søk i Produsentdeler" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" msgstr "Vis produsentdeler i forhåndsvisningsvinduet for søk" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Skjul Inaktive Deler" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" msgstr "Ekskluder inaktive deler fra forhåndsvisningsvinduet for søk" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "Søk i kategorier" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" msgstr "Vis delkategorier i forhåndsvisningsvinduet for søk" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Søk i lagerbeholdning" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "Vis lagervarer i forhåndsvisningsvinduet for søk" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Skjul utilgjengelige Lagervarer" -#: common/models.py:2289 +#: common/models.py:2382 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:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Søk i Plasseringer" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "Vis lagerplasseringer i forhåndsvisningsvinduet for søk" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Søk i Firma" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "Vis firma i forhåndsvsningsvinduet for søk" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Søk i Produksjonsordrer" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "Vis produksjonsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Søk i Innkjøpsordrer" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "Vis innkjøpsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Ekskluder inaktive Innkjøpsordrer" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "Ekskluder inaktive innkjøpsordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Søk i Salgsordrer" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "Vis salgsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "Ekskluder Inaktive Salgsordrer" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" msgstr "Ekskluder inaktive salgsordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "Søk i Returordrer" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "Vis returordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "Ekskluder Inaktive Returordrer" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "Ekskluder inaktive returordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "Forhåndsvisning av søkeresultater" -#: common/models.py:2357 +#: common/models.py:2450 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:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "Regex-søk" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "Aktiver regulære uttrykk i søkeord" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "Helordsøk" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "Søk returnerer resultater for treff med hele ord" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "Vis antall i skjemaer" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "Vis antall tilgjengelige deler i noen skjemaer" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "Escape-knappen lukker skjemaer" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "Bruk Escape-knappen for å lukke modal-skjemaer" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Fast navigasjonsbar" -#: common/models.py:2388 +#: common/models.py:2481 msgid "The navbar position is fixed to the top of the screen" msgstr "Navigasjonsbarens posisjon er fast på toppen av skjermen" -#: common/models.py:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Datoformat" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "Foretrukket format for å vise datoer" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Delplanlegging" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "Vis delplanleggingsinformasjon" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Lagertelling for Del" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Vis lagertellingsinformasjon for del (om lagertellingsfunksjonalitet er aktivert)" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "Tabellstrenglengde" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" msgstr "Maksimal lengdegrense for tekst vist i tabeller" -#: common/models.py:2429 -msgid "Default part label template" -msgstr "Standard etikettmal for del" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "Etikettmalen for del som velges automatisk" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "Standard etikettmal for lagervare" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "Etikettmalen for lagervare som velges automatisk" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "Standard etikettmal for lagerplassering" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "Etikettmalen for lagerplassering som velges automatisk" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "Motta feilrapporter" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "Motta varsler om systemfeil" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Bruker" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Pris" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "Enhetspris på spesifisert antall" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "Endepunkt" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "Endepunktet hvor denne webhooken er mottatt" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "Navn for webhooken" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Aktiv" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "Er webhooken aktiv" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "Sjetong" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "Vert" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "Verten denne meldingen ble mottatt fra" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Tittel" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Brødtekst" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "Innholdet i meldingen" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "Endepunktet meldingen ble mottatt fra" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Tittel" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Lenke" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Publisert" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Sammendrag" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "Les" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "Er dette nyhetselementet lest?" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "Er dette nyhetselementet lest?" msgid "Image" msgstr "Bilde" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "Bildefil" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "Enhetssymbolet må være unikt" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "Enhetsnavn må være en gyldig identifikator" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "Enhetsnavn" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" -msgstr "" +msgstr "Symbol" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "Valgfritt enhetssymbol" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definisjon" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "Enhetsdefinisjon" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Vedlegg" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Fil mangler" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Mangler eksternlenke" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Velg fil å legge ved" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Kommentar" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "Vedleggskommentar" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "Opplastet dato" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "Datoen som filen ble lastet opp" + +#: common/models.py:3293 +msgid "File size" +msgstr "Filstørrelse" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "Filstørrelse i byte" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "Ugyldig modelltype spesifisert for vedlegg" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,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:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "Artikler mottatt" @@ -3651,79 +3957,99 @@ msgstr "Artikler har blitt mottatt mot en returordre" msgid "Error raised by plugin" msgstr "Feil oppstått i utvidelse" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "Kjører" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "Ventende oppgaver" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "Planlagte oppgaver" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "Mislykkede oppgaver" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "Oppgave-ID" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "Unik oppgave-ID" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "Lås" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "Låsetidspunkt" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "Oppgavenavn" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "Funksjon" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "Funksjonsnavn" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "Argumenter" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "Oppgaveargumenter" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "Nøkkelordargumenter" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "Nøkkelordargumenter for oppgave" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Filnavn" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "Modelltype" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "Brukeren har ikke tillatelse tillatelse å opprette eller endre vedlegg for denne modellen" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "Ingen modelltype angitt for vedlegg" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "Ugyldig modelltype for vedlegg" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" -msgstr "" +msgstr "Minste antall plasser kan ikke være mer enn største antall plasser" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" -msgstr "" +msgstr "Største antall plasser kan ikke være mindre enn minste antall plasser" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Et tomt domene er ikke tillatt." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Ugyldig domenenavn: {domain}" @@ -3766,402 +4092,432 @@ msgstr "Deler importert" msgid "Previous Step" msgstr "Forrige trinn" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" -msgstr "" +msgstr "Delen er aktiv" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" -msgstr "" +msgstr "Leverandør er aktiv" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" -msgstr "" +msgstr "Leverandørdel er aktiv" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" -msgstr "" +msgstr "Intern del er aktiv" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" -msgstr "" +msgstr "Leverandør er aktiv" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Firma" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Firmaer" + +#: company/models.py:117 msgid "Company description" msgstr "Beskrivelse av firma" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "Beskrivelse av firmaet" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Nettside" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "Bedriftens nettside URL" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Telefonnummer" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Kontakt-telefonnummer" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Kontakt e-post" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Kontakt" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Kontaktpunkt" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Link til ekstern bedriftsinformasjon" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" -msgstr "" +msgstr "Er firmaet aktivt?" -#: company/models.py:165 -msgid "is customer" -msgstr "er kunde" +#: company/models.py:168 +msgid "Is customer" +msgstr "Er kunde" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Selger du varer til dette firmaet?" -#: company/models.py:171 -msgid "is supplier" -msgstr "er leverandør" +#: company/models.py:174 +msgid "Is supplier" +msgstr "Er leverandør" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Kjøper du varer fra dette firmaet?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "er produsent" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "Er produsent" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Produserer dette firmaet deler?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" 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:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Firma" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Adresse" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adresser" + +#: company/models.py:372 msgid "Select company" msgstr "Velg selskap" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "Adressetittel" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "Tittel som beskriver addressen" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "Hovedadresse" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "Sett som hovedadresse" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Linje 1" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "Adresselinje 1" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Linje 2" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "Adresselinje 2" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Postnummer" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "Poststed/område" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "Postnummerets by/område" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "Delstat/provins" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "Delstat eller provins" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "Land" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "Adressens land" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "Notater til transportør" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "Notater for transportør" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "Interne fraktnotater" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "Fraktnotater for internt bruk" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Produsent" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: 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 "Produsentens varenummer" - -#: company/models.py:515 -msgid "URL for external manufacturer part link" -msgstr "URL for ekstern produsentdel-lenke" - -#: company/models.py:524 -msgid "Manufacturer part description" -msgstr "Produsentens delbeskrivelse" - -#: company/models.py:581 company/models.py:608 company/models.py:824 +#: company/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Basisdel" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Velg del" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Produsent" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Velg produsent" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "MPN" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "URL for ekstern produsentdel-lenke" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "Produsentens delbeskrivelse" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "Produsentdel parameter" + +#: company/models.py:594 msgid "Parameter name" msgstr "Parameternavn" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Verdi" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Parameterverdi" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Enheter" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Parameterenheter" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Leverandørdel" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "Pakkeenhetene må være komptible med delens basisenhet" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "Pakkeenhet må være mer enn null" -#: company/models.py:753 +#: company/models.py:740 msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" -#: 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Leverandør" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" -msgstr "" +msgstr "Er denne leverandørdelen aktiv?" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Velg produsentdel" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "URL for ekstern leverandørdel-lenke" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Notat" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2424 -msgid "Packaging" -msgstr "Emballasje" - -#: company/models.py:866 +#: company/models.py:853 msgid "Part packaging" msgstr "Delemballasje" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "Pakkeantall" -#: company/models.py:873 +#: company/models.py:860 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:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "flere" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "Bestill flere" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "Antall tilgjengelig fra leverandør" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "Tilgjengelighet oppdatert" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "Dato for siste oppdatering av tilgjengelighetsdata" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "Leverandørens prisbrudd" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "Standardvaluta brukt for denne leverandøren" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "Bedriftsnavn" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "Inaktiv" @@ -4212,7 +4568,7 @@ msgstr "Slett Firma" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "Bilde av del" @@ -4231,17 +4587,17 @@ msgstr "Last ned bilde fra URL" msgid "Delete image" msgstr "Slett bilde" -#: 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Kunde" @@ -4249,42 +4605,35 @@ msgstr "Kunde" msgid "Uses default currency" msgstr "Bruker standardvaluta" -#: 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 "Adresse" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" -msgstr "" +msgstr "Fjern Bilde" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "" +msgstr "Fjern tilknyttet bilde fra dette firmaet" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" -msgstr "" +msgstr "Last opp bilde" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" -msgstr "" +msgstr "Last ned Bilde" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 @@ -4298,7 +4647,7 @@ msgstr "Opprett ny leverandørdel" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Ny leverandørdel" @@ -4311,7 +4660,7 @@ msgstr "Produsentdeler" msgid "Create new manufacturer part" msgstr "Opprett ny produsentdel" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Ny Produsentdel" @@ -4325,7 +4674,7 @@ msgstr "Leverandørs lagerbeholdning" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Ny innkjøpsordre" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ msgstr "Produsenter" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Bestill del" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "Slett produsentdel" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Intern del" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,21 +4804,25 @@ msgstr "Leverandører" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametere" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nytt Parameter" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "Notater for leverandørdel" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" -msgstr "" +msgstr "Legg til Parameter" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" @@ -4490,19 +4844,6 @@ msgstr "Tildelte lagervarer" msgid "Contacts" msgstr "Kontakter" -#: company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adresser" - -#: 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 "Leverandørdel" - #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4511,7 +4852,7 @@ msgstr "Handlinger for leverandørdeler" #: 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Bestill del" @@ -4544,12 +4885,12 @@ msgstr "Slett Leverandørdel" 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:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "SKU-kode" @@ -4558,13 +4899,13 @@ 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:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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:207 -#: templates/js/translated/stock.js:537 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Ny Lagervare" @@ -4582,29 +4923,33 @@ msgstr "Prisinformasjon" msgid "Add Price Break" msgstr "Legg til Prisbrudd" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "Notater for leverandørdeler" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Lagervarer" @@ -4630,10 +4975,6 @@ msgstr "Kunder" msgid "New Customer" msgstr "Ny Kunde" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Firmaer" - #: company/views.py:52 msgid "New Company" msgstr "Nytt Firma" @@ -4642,48 +4983,228 @@ msgstr "Nytt Firma" msgid "Placed" msgstr "Plassert" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "Gyldig" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Ukjent" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Total pris" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Ordrestatus" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 msgid "No matching purchase order found" msgstr "Ingen samsvarende innkjøpsordre funnet" -#: 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Ordre" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 msgid "Purchase Order" msgstr "Innkjøpsordre" -#: 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "Returordre" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "Total pris for denne ordren" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "Ordrevaluta" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)" @@ -4830,7 +5347,7 @@ msgstr "Ordrebeskrivelse (valgfritt)" msgid "Select project code for this order" msgstr "Velg prosjektkode for denne ordren" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Lenke til ekstern side" @@ -4854,534 +5371,578 @@ msgstr "Kontaktpunkt for denne ordren" msgid "Company address for this order" msgstr "Selskapsadresse for denne ordren" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Ordrereferanse" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "Status for innkjøpsordre" -#: order/models.py:487 +#: order/models.py:493 msgid "Company from which the items are being ordered" msgstr "Firma som varene blir bestilt fra" -#: order/models.py:498 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1702 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "Leverandørreferanse" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "Leverandørens ordrereferanse" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "mottatt av" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Sendt dato" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "Dato bestillingen ble sendt" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "Dato ordre ble fullført" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "Delleverandør må matche PO-leverandør" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "Mengde må være positiv" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "Firma som varene selges til" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "Kundereferanse " -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "Kundens ordrereferanse" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Forsendelsesdato" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "sendt av" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "Kun en åpen ordre kan merkes som fullført" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestillingen kan ikke fullføres da det finnes ufullstendige forsendelser" -#: order/models.py:1043 +#: order/models.py:1094 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:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Antall" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "Linjereferanse" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "Linjenotater" -#: order/models.py:1345 +#: order/models.py:1393 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:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "Linjeelementbeskrivelse (valgfritt)" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "Kontekst" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "Ytterligere kontekst for denne linjen" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "Enhetspris" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "Delens leverandør må samsvare med leverandør" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "slettet" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "Leverandørdel" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Mottatt" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Innkjøpspris" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "Enhet-innkjøpspris" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "Hvor vil innkjøper at artikkelen skal lagres?" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtuell del kan ikke tildeles salgsordre" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "Kun salgbare deler kan tildeles en salgsordre" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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:1606 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Enhets-salgspris" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "Sendt antall" -#: order/models.py:1708 +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "Dato for forsendelse" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Leveringsdato" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "Dato for levering av forsendelse" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "Sjekket Av" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "Forsendelse" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "Forsendelsesnummer" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "Sporingsnummer" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "Sporingsinformasjon for forsendelse" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "Referansenummer for tilknyttet faktura" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "Forsendelsen er allerede sendt" -#: order/models.py:1772 +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "Forsendelsen har ingen tildelte lagervarer" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "Lagervarer er ikke blitt tildelt" -#: order/models.py:1899 +#: order/models.py:1973 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:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "Kan ikke tildele lagerbeholdning til en linje uten en del" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "Salgsordre samsvarer ikke med forsendelse" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "Forsendelsen samsvarer ikke med salgsordre" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "Linje" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "Forsendelsesreferanse for salgsordre" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Artikkel" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "Velg lagervare å tildele" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "Angi lagertildelingsmengde" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "Returordre-referanse" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "Firmaet delen skal returneres fra" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "Returordrestatus" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "Kun serialiserte artikler kan tilordnes en Returordre" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "Velg artikkel som skal returneres fra kunde" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "Mottatt Dato" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "Datoen denne returartikkelen ble mottatt" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Utfall" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "Utfall for dette linjeelementet" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "Kostnad forbundet med retur eller reparasjon for dette linjeelementet" -#: order/serializers.py:81 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/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "Internt delnummer" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "Linjeelementet samsvarer ikke med innkjøpsordre" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "Heltallsverdi må angis for sporbare deler" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "Følgende serienummer er allerede tildelt" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:1689 +#: order/serializers.py:1785 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:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "Valuta for linje" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Tapt" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Returnert" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Pågående" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Retur" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Reparasjon" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Erstatt" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Refusjon" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Avvis" @@ -5426,87 +5987,93 @@ msgid "Edit order" msgstr "Rediger ordre" #: 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 "Kanseller ordre" - -#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Dupliser ordre" -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Kanseller ordre" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "Send ordre" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Fullfør ordre" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 msgid "Supplier part thumbnail" 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:110 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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:115 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Ordrebeskrivelse" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "Ingen leverandørinformasjon tilgjengelig" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 msgid "Completed Line Items" msgstr "Fullførte elementer" -#: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:167 -#: order/templates/order/sales_order_base.html:177 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Ufullstendig" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Utstedt" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 msgid "Total cost" 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:243 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "Total kostnad kunne ikke beregnes" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "Duplikatvalg" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Fjern rad" @@ -5666,31 +6233,31 @@ msgstr "Skriv ut returordrerapport" msgid "Print packing list" msgstr "Skriv ut pakkeliste" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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:239 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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:259 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "Ordredetaljer" msgid "Print sales order report" msgstr "Skriv ut salgsordrerapport" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "Send artikler" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Fullfør Salgsordre" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "Salgsordren er ikke fullstendig tildelt" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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:321 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "Ventende forsendelser" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Handlinger" @@ -5775,35 +6343,21 @@ 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:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "Del-ID" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Delnavn" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Delbeskrivelse" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Revisjon" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Nøkkelord" @@ -5815,7 +6369,8 @@ msgstr "Del-bilde" msgid "Category ID" msgstr "Kategori-ID" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "Kategorinavn" @@ -5827,11 +6382,11 @@ msgstr "Standard plasserings-ID" msgid "Default Supplier ID" msgstr "Standard leverandør-ID" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variant av" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" @@ -5839,169 +6394,183 @@ msgstr "Minimal lagerbeholdning" msgid "Used In" msgstr "Brukt i" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "Produseres" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "Overordnet ID" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "Overordnet navn" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "Sti til kategori" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Deler" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "BOM-nivå" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "BOM artikkel-ID" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "Overodnet IPN" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "Del -IPN" +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Minstepris" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Makspris" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "Innkommende innkjøpsordre" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "Utgående salgsordre" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "Lagervarer produsert av en produksjonsordre" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "Lagervarer påkrevd for produksjonsordre" -#: part/api.py:887 -msgid "Valid" -msgstr "Gyldig" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "Dette alternativet må være valgt" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Kategori" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Standard plassering" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Total lagerbeholdning" @@ -6010,1042 +6579,1144 @@ msgstr "Total lagerbeholdning" msgid "Input quantity for price calculation" msgstr "Sett inn antall for prisberegning" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Delkategori" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Delkategorier" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Standardplassering for deler i denne kategorien" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strukturell" -#: part/models.py:111 +#: part/models.py:115 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:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Standard nøkkelord" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "Standard nøkkelord for deler i denne kategorien" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "Ikon" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "Ikon (valgfritt)" -#: part/models.py:150 +#: part/models.py:178 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:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "Ugyldig valg for overordnet del" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, 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:595 +#: part/models.py:631 #, 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:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN må samsvare med regex-mønsteret {pattern}" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "Lagervare med dette serienummeret eksisterer allerede" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplikat av internt delnummer er ikke tillatt i delinnstillinger" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "Del med dette Navnet, internt delnummer og Revisjon eksisterer allerede." -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "Deler kan ikke tilordnes strukturelle delkategorier!" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Delnavn" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "Er Mal" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "Er delen en maldel?" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "Er delen en variant av en annen del?" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "Delbeskrivelse (valgfritt)" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "Delkategori" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "Internt delnummer" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "Delrevisjon eller versjonsnummer" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "Hvor er denne artikkelen vanligvis lagret?" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "Standard leverandør" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "Standard leverandørdel" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "Standard utløp" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "Minimum tillatt lagernivå" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "Måleenheter for denne delen" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "Kan denne delen bygges fra andre deler?" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "Kan denne delen brukes til å bygge andre deler?" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "Har denne delen sporing av unike artikler?" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "Kan denne delen kjøpes inn fra eksterne leverandører?" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "Kan denne delen selges til kunder?" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Er denne delen aktiv?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 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:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "Kontrollsum for BOM" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "Lagret BOM-kontrollsum" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "Stykkliste sjekket av" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "Stykkliste sjekket dato" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Opprettingsbruker" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "Siste lagertelling" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "Antall" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Dato" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "Flere notater" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "Bruker som utførte denne lagertellingen" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "Rapport" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "Lagertellingsrapportfil (generert internt)" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "Antall deler" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "Antall deler dekket av varetellingen" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "Bruker som forespurte varetellingsrapporten" -#: part/models.py:3469 +#: part/models.py:3398 +msgid "Part Sale Price Break" +msgstr "" + +#: part/models.py:3510 +msgid "Part Test Template" +msgstr "" + +#: part/models.py:3536 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3490 part/models.py:3654 +#: part/models.py:3557 part/models.py:3726 msgid "Choices must be unique" msgstr "Valg må være unike" -#: part/models.py:3501 +#: part/models.py:3568 msgid "Test templates can only be created for trackable parts" msgstr "Testmaler kan bare bli opprettet for sporbare deler" -#: part/models.py:3512 +#: part/models.py:3579 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3529 templates/js/translated/part.js:2880 +#: part/models.py:3596 templates/js/translated/part.js:2895 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3530 +#: part/models.py:3597 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3536 +#: part/models.py:3603 msgid "Test Key" msgstr "" -#: part/models.py:3537 +#: part/models.py:3604 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3544 +#: part/models.py:3611 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3545 +#: part/models.py:3612 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 msgid "Enabled" msgstr "Aktivert" -#: part/models.py:3549 +#: part/models.py:3616 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3555 +#: part/models.py:3622 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3560 templates/js/translated/part.js:2917 +#: part/models.py:3627 templates/js/translated/part.js:2932 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3561 +#: part/models.py:3628 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:3566 templates/js/translated/part.js:2924 +#: part/models.py:3633 templates/js/translated/part.js:2939 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3568 +#: part/models.py:3635 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:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "Valg" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 +#: part/models.py:3674 +msgid "Part Parameter Template" +msgstr "" + +#: part/models.py:3701 msgid "Checkbox parameters cannot have units" msgstr "Sjekkboksparameter kan ikke ha enheter" -#: part/models.py:3634 +#: part/models.py:3706 msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: part/models.py:3671 +#: part/models.py:3743 msgid "Parameter template name must be unique" msgstr "Navn på parametermal må være unikt" -#: part/models.py:3686 +#: part/models.py:3758 msgid "Parameter Name" msgstr "Parameternavn" -#: part/models.py:3693 +#: part/models.py:3765 msgid "Physical units for this parameter" msgstr "Fysisk enheter for denne parameteren" -#: part/models.py:3701 +#: part/models.py:3773 msgid "Parameter description" msgstr "Parameterbeskrivelse" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "Sjekkboks" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gyldige valg for denne parameteren (kommaseparert)" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "Overordnet del" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parametermal" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "Parameterverdi" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Standardverdi" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "Del-ID eller delnavn" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "Unik del-ID-verdi" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "Delens interne delnummerverdi" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "Nivå" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "BOM-nivå" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4117 +#: part/models.py:4259 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:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Svinn" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Forventet produksjonssvinn (absolutt eller prosent)" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "Tillat Varianter" - -#: part/models.py:4165 +#: part/models.py:4307 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:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4488 +#: part/models.py:4628 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:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "Ingen deler valgt" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "Velg kategori" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Kopier parametere" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:492 +#: part/serializers.py:513 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:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:841 -msgid "External Stock" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" -#: part/serializers.py:843 +#: part/serializers.py:906 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:909 msgid "Variant Stock" msgstr "" -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:877 +#: part/serializers.py:940 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:883 templates/js/translated/part.js:102 +#: part/serializers.py:946 templates/js/translated/part.js:103 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:884 +#: part/serializers.py:947 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:890 +#: part/serializers.py:953 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:891 +#: part/serializers.py:954 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:899 +#: part/serializers.py:962 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:900 +#: part/serializers.py:963 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:905 +#: part/serializers.py:968 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:906 +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1129 +#: part/serializers.py:1192 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:1139 +#: part/serializers.py:1202 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:1149 +#: part/serializers.py:1212 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:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "Ekskluder ekstern lagerbeholdning" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "Ekskluder lagervarer i eksterne lokasjoner" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "Generer rapport" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "Genererer rapport som inneholder beregnede lagerdata" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "Oppdater deler" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "Oppdater spesifiserte deler med beregnede lagerbeholdningsdata" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "Lagerbeholdningsfunksjonalitet er ikke aktivert" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, 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:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Kan Produsere" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "Nullstill eksisterende BOM" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "Fjern eksisterende BOM-artikler før opplastning" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "Ingen del-kolonne angitt" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "Flere samsvarende deler funnet" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "Ingen samsvarende del funnet" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "Delen er ikke betegnet som en komponent" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "Antall ikke oppgitt" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "Ugyldig antall" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "Minst en BOM-artikkel kreves" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "Totalt Antall" @@ -7065,11 +7736,11 @@ msgstr "Lagertellingsrapport tilgjengelig" msgid "A new stocktake report is available for download" msgstr "En ny lagertellingsrapport er tilgjengelig for nedlasting" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "Varsel om lav lagerbeholdning" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Tilgjengelig lagerbeholdning for {part.name} har falt under det konfigurerte minimumsnivået" @@ -7091,65 +7762,65 @@ msgstr "Denne BOMen ble sist sjekket av %(checker)s den %(check_date)s" msgid "This BOM has not been validated." msgstr "Denne BOMen er ikke godkjent." -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "Utfør lagertelling for denne delkategorien" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "Du abonnerer på varsler for denne kategorien" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "Abonner på varsler for denne kategorien" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "Kategorihandlinger" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Rediger kategori" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Rediger Kategori" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Slett kategori" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Slett Kategori" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "Toppnivå delkategori" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Deler (inkludert underkategorier)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "Opprett ny del" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Ny Del" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Delparametere" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "Opprett ny delkategori" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Ny Kategori" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "Legg til lagertellingsinformasjon" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "Lagertelling" @@ -7209,101 +7880,105 @@ msgstr "Deltestmaler" msgid "Add Test Template" msgstr "Legg til Testmal" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Salgsordretildelinger" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "Delnotater" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "Delvarianter" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "Opprett ny variant" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "Ny Variant" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "Legg til ny parameter" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "Relaterte Deler" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "Legg til relatert" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Stykkliste (BOM)" -#: part/templates/part/detail.html:260 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "Eksporthandlinger" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Eksporter BOM" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "Skriv ut BOM-rapport" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "BOM-handlinger" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "Last opp BOM" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "Godkjenn BOM" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Legg til BOM-artikkel" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "Sammenstillinger" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "Del-produksjoner" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Produksjonsordre-tildelinger" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "Deleleverandører" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "Deleprodusenter" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ msgstr "Last ned importmal for del" #: 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Velg filformat" @@ -7362,7 +8037,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 templates/js/translated/label.js:143 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Skriv ut etikett" @@ -7372,7 +8047,7 @@ msgstr "Vis prisinformasjon" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Lagerhandlinger" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "Delhandlinger" @@ -7433,7 +8108,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:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "Vis detaljer for del" @@ -7447,51 +8122,47 @@ msgstr "Tildelt til produksjonsordrer" msgid "Allocated to Sales Orders" msgstr "Tildelt til Salgsordrer" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Kan Produsere" - -#: part/templates/part/part_base.html:291 +#: part/templates/part/part_base.html:300 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:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Prisområde" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "Siste serienummer" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Søk etter serienummer" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ msgid "Variants" msgstr "Varianter" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Lagerbeholdning" @@ -7587,17 +8258,17 @@ msgstr "Overstyr delprising" #: 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/helpers.js:103 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Rediger" -#: part/templates/part/prices.html:28 stock/admin.py:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "Sist oppdatert" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Ingen lagerbeholdning" @@ -7749,7 +8420,7 @@ msgstr "Bilde for del ikke funnet" msgid "Part Pricing" msgstr "Delprising" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Ingen handling spesifisert" msgid "No matching action found" msgstr "Ingen samsvarende handling funnet" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Ingen treff funnet for strekkodedata" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Treff funnet for strekkodedata" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "Strekkode samsvarer med ekisterende element" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "Ingen samsvarende del-data funnet" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "Finner ingen matchende leverandørdeler" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "Flere samsvarende leverandørdeler funnet" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "Fant leverandørdel" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "Artikkelen er allerede mottatt" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "Ingen treff for leverandørstrekkode" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "Flere samsvarende elementer funnet" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "Ingen samsvarende element funnet" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "Strekkoden samsvarer ikke med eksisterende lagervare" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 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:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Utilstrekkelig lagerbeholdning" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "Lagervaren er tildelt en salgsordre" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "Ikke nok informasjon" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "Fant flere leverandørdeler for strekkoden" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "Fant flere innkjøpsordrer som samsvarer med '{order}'" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "Ingen samsvarende innkjøpsordre for '{order}'" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "Innkjøpsordre stemmer ikke med leverandør" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "Fant ikke ventende artikkel for leverandørdel" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "Mer informasjon nødvendig for å motta artikkelen" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "Mottok ordreartikkelen" @@ -7862,55 +8541,63 @@ msgstr "Mottok ordreartikkelen" msgid "Scanned barcode data" msgstr "Skannet strekkodedata" -#: plugin/base/barcodes/serializers.py:81 +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 msgid "Purchase Order to allocate items against" msgstr "Innkjøpsordre å tildele artikler mot" -#: plugin/base/barcodes/serializers.py:87 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order is not pending" msgstr "Innkjøpsordre er ikke ventende" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:129 msgid "PurchaseOrder to receive items against" msgstr "Innkjøpsordre å motta artikler mot" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "Innkjøpsordren har ikke blitt sendt" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "Plassering å motta deler til" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "Kan ikke velge en strukturell plassering" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "Salgsordre å tildele artikler mot" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "Salgsordre er ikke ventende" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "Salgsordrelinje å tildele artikler mot" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "Salgsordre-forsendelse å tildele artikler mot" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "Forsendelsen er allerede levert" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "Antall å tildele" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "Utskrift av etikett mislyktes" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "InvenTree-strekkoder" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "Gir innebygd støtte for strekkoder" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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 "InvenTree-bidragsytere" +#: plugin/builtin/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "InvenTree-varsler" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "Gir innebygd støtte for å skrive ut PDF-etiketter" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "Feilsøkingsmodus" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Aktiver feilsøkingsmodus - returnerer rå HTML i stedet for PDF" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "Sidestørrelse på etikett-arket" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "Hopp over etiketter" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "Hopp over dette antallet etiketter når det skrives ut etiketterark" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "Kantlinjer" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 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:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "Liggende" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "Skriv ut etikett-arket i liggende modus" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "InvenTree etikett-ark skriver" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "Sprer ut flere etiketter på ett enkelt ark" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "Etiketten er for stor for sidestørrelse" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "Ingen etiketter ble generert" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "Er utvidelsen aktiv" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "Installert" @@ -8205,7 +8918,7 @@ msgstr "Innebygd utvidelse" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "Metode" msgid "No author found" msgstr "Ingen forfatter funnet" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, 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:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Utvidelsen krever minst versjon {v}" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Utvidelsen krever maks versjon {v}" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "Ingen gyldige objekter angitt for mal" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "Malfil '{template}' mangler eller eksisterer ikke" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Malnavn" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Filnavnmønster" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Filtre" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "Sidestørrelse for PDF-rapporter" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "Generer rapport i landskapsorientering" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Bredde [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "Etikettbredde, spesifisert i mm" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Høyde [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "Etiketthøyde, spesifisert i mm" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "Snutt" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "Rapportsnuttfil" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "Filbeskrivelse for snutt" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "Ressurs" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "Rapportressursfil" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "Ressursfilbeskrivelse" @@ -8588,10 +9297,10 @@ msgstr "Leverandør ble slettet" #: 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Enhetspris" @@ -8604,26 +9313,13 @@ msgstr "Ekstra linjeelementer" #: 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "Serienummer" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "Artikler ved lagerplassering" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "Testresultater" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "Resultat" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "Bestått" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "Mislykket" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "Ingen resultat (obligatorisk)" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "Ingen resultat" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Installerte artikler" -#: 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Serienummer" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "Asset-filen eksisterer ikke" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "Bildefil ikke funnet" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "part_image-taggen krever en Part-instans" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "company_image-taggen krever en Company-instans" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 msgid "Location ID" msgstr "Plasserings-ID" -#: stock/admin.py:54 stock/admin.py:176 -msgid "Location Name" -msgstr "Plasseringsnavn" - -#: stock/admin.py:64 stock/templates/stock/location.html:131 -#: stock/templates/stock/location.html:137 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "Plasserings-sti" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "Lagervare-ID" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "Statuskode" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "Leverandørdel-ID" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "Leverandør-ID" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "Leverandørnavn" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "Kunde-ID" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Installert i" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "Produksjons-ID" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "Salgsordre-ID" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "Innkjøpsordre-ID" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "Gjennomgang kreves" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "Slett når oppbrukt" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "Utløpsdato" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Ekstern plassering" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "Del-tre" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "Utløpsdato før" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "Utløpsdato etter" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Foreldet" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "Antall kreves" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "Gyldig del må oppgis" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "Oppgitt leverandørdel eksisterer ikke" -#: stock/api.py:974 +#: stock/api.py:976 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:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienumre kan ikke angis for en ikke-sporbar del" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "Lagerplasseringstype" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "Lagerplasseringstyper" -#: stock/models.py:86 +#: stock/models.py:91 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:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Lagerplassering" -#: stock/models.py:124 stock/templates/stock/location.html:186 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Lagerplasseringer" -#: stock/models.py:166 stock/models.py:949 +#: stock/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Eier" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "Velg eier" -#: stock/models.py:175 +#: stock/models.py:189 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:182 templates/js/translated/stock.js:2781 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Ekstern" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "Dette er en ekstern lagerplassering" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Plasseringstype" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "Lagerplasseringstype for denne plasseringen" -#: stock/models.py:262 +#: stock/models.py:279 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:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagervarer kan ikke plasseres i strukturelle plasseringer!" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "Lagervare kan ikke opprettes for virtuelle deler" -#: stock/models.py:687 +#: stock/models.py:708 #, 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:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 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:700 +#: stock/models.py:721 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:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "Elementet kan ikke tilhøre seg selv" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "Elementet må ha en produksjonsrefereanse om is_building=True" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "Produksjonsreferanse peker ikke til samme del-objekt" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "Overordnet lagervare" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "Basisdel" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "Er denne artikkelen montert i en annen artikkel?" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "Lagerantall" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "Kildeproduksjon" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "Produksjon for denne lagervaren" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Brukt av" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "Produksjonsordren som brukte denne lagervaren" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "Kildeinnkjøpsordre" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "Innkjøpsordre for denne lagervaren" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "Tildelt Salgsordre" -#: stock/models.py:902 +#: stock/models.py:921 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:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "Slett når oppbrukt" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "Slett lagervaren når beholdningen er oppbrukt" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "Innkjøpspris per enhet på kjøpstidspunktet" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "Konvertert til del" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "Delen er ikke angitt som sporbar" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "Antall må være heltall" -#: stock/models.py:1504 +#: stock/models.py:1525 #, 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:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "Serienumre må være en liste over tall" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "Antallet stemmer ikke overens med serienumrene" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "Seriernummer eksisterer allerede" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "Lagervare har blitt tildelt en salgsordre" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "Lagervare er montert i en annen artikkel" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "Lagervare inneholder andre artikler" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "Lagervare har blitt tildelt til en kunde" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "Lagervare er for tiden i produksjon" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "Duplisert lagervare" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "Lagervarer må referere til samme del" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "Lagervarer må referere til samme leverandørdel" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "Lagerstatuskoder må være like" -#: stock/models.py:1905 +#: stock/models.py:1960 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:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "Oppføringsnotater" -#: stock/models.py:2394 +#: stock/models.py:2414 +msgid "Stock Item Test Result" +msgstr "" + +#: stock/models.py:2447 msgid "Value must be provided for this test" msgstr "Verdi må angis for denne testen" -#: stock/models.py:2399 +#: stock/models.py:2452 msgid "Attachment must be uploaded for this test" msgstr "Vedlegg må lastes opp for denne testen" -#: stock/models.py:2404 +#: stock/models.py:2457 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2428 +#: stock/models.py:2542 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:2435 +#: stock/models.py:2549 msgid "Test output value" msgstr "Testens verdi" -#: stock/models.py:2443 +#: stock/models.py:2557 msgid "Test result attachment" msgstr "Vedlegg til testresultat" -#: stock/models.py:2447 +#: stock/models.py:2561 msgid "Test notes" msgstr "Testnotater" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "Serienummeret er for høyt" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Overodnet element" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 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:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Utløpt" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Underordnede artikler" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "Angi antall lagervarer som skal serialiseres" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "Angi serienummer for nye artikler" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "Til Lagerplassering" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "Valgfritt notatfelt" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummer kan ikke tilordnes denne delen" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "Velg lagervare å montere" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "Antall å installere" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "Angi antallet elementer som skal installeres" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "Legg til transaksjonsnotat (valgfritt)" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "Antall å installere må være minst 1" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "Lagervaren er utilgjengelig" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "Valgt del er ikke i stykklisten" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "Antall å installere må ikke overskride tilgjengelig antall" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "Lagerplassering for den avinstallerte artikkelen" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "Velg del å konvertere lagervare til" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "Valgt del er ikke et gyldig alternativ for konvertering" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "Lagerplassering for returnert artikkel" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "Velg lagervarer for å endre status" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "Ingen lagervarer valgt" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Underplasseringer" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "Delen må være salgbar" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "Artikkelen er tildelt en salgsordre" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "Artikkelen er tildelt en produksjonsordre" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "Kunde å tilordne lagervarer" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "Valgt firma er ikke en kunde" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "Lagervare-tildelignsnotater" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "En liste av lagervarer må oppgis" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "Notater om lagersammenslåing" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "Tillat forskjellige leverandører" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "Tillat forskjellig status" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "Minst to lagervarer må oppgis" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "Lagervare primærnøkkel verdi" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "Lagervare statuskode" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "Lager transaksjonsnotater" @@ -9375,7 +10117,7 @@ msgstr "I Karantene" msgid "Legacy stock tracking entry" msgstr "Gammel lagervare sporingsoppføring" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Lagevare opprettet" @@ -9431,7 +10173,7 @@ msgstr "Skill ut fra overordnet artikkel" msgid "Split child item" msgstr "Skill ut fra underartikkel" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Sammenslåtte lagervarer" @@ -9451,7 +10193,7 @@ msgstr "Produksjonsartikkel fullført" msgid "Build order output rejected" msgstr "Produksjonsartikkel avvist" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Brukt av produksjonsordre" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "Slett testdata" @@ -9512,15 +10254,15 @@ msgstr "Notater for lagervare" msgid "Installed Stock Items" msgstr "Installerte lagervarer" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "Installer lagervare" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 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:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "Skann til plassering" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "Utskriftshandlinger" @@ -9543,17 +10285,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:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "Tell beholdning" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "Legg til lagerbeholdning" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "Fjern lagerbeholdning" @@ -9562,12 +10304,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:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "Overfør lagerbeholdning" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "Tilordne til kunde" @@ -9608,14 +10350,10 @@ msgid "Delete stock item" msgstr "Slett lagervare" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2123 templates/navbar.html:38 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Produksjon" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Overodnet element" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Ingen produsent valgt" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Du er ikke i eierlisten til dette elementet. Denne lagervaren kan ikke redigeres." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "Kun lesetilgang" @@ -9669,12 +10407,8 @@ msgstr "neste side" msgid "Navigate to next serial number" msgstr "Gå til neste serienummer" -#: stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Tilgjengelig antall" - #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2380 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Ingen plassering satt" @@ -9691,11 +10425,6 @@ msgstr "Denne lagervaren har ikke bestått alle påkrevde tester" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Denne lagervaren utløp %(item.expiry_date)s" -#: stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:435 users/models.py:174 -msgid "Expired" -msgstr "Utløpt" - #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "Ingen lagertelling utført" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "Denne handlingen er vanskelig å omgjøre" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "Opprett serialiserte artikler for denne lagervaren." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Velg antall å serialisere, og unike serienummer." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "Utfør lagertelling for denne lagerplasseringen" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "Finn lagerplassering" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "Skann lagervarer til denne plasseringen" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "Skann inn Lagervarer" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "Skann lagerbeholder til denne plasseringen" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "Skann inn beholder" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "Skriv ut plasseringsrapport" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "Plasseringshandlinger" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Rediger plassering" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Slett plassering" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "Toppnivå-lagerplassering" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "Plasseringens Eier" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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:176 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "Opprett ny lagerplassering" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Ny plassering" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "Sporing av lager" msgid "Allocations" msgstr "Tildelinger" -#: stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Underordnede artikler" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Tilgang nektet" @@ -10097,11 +10822,11 @@ msgstr "URL-segment" msgid "Part Settings" msgstr "Innstillinger for del" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "Import av Del" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "Importér Del" @@ -10207,7 +10932,7 @@ msgstr "Installasjonssti" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "Innebygd" @@ -10217,7 +10942,7 @@ msgstr "Dette er en innebygd utvidelse som ikke kan deaktiveres" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "Eksempel" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Slett" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "Ny plasseringstype" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "Startside" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "Kontoinnstillinger" msgid "Change Password" msgstr "Endre passord" -#: templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Brukernavn" - -#: templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Fornavn" - -#: templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Etternavn" - #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Følgende e-postadresser er tilknyttet din konto:" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "Send feilrapport" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "kopier til utklippstavle" @@ -10779,7 +11492,7 @@ msgstr "Bekreft e-postadresse" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Vennligst bekreft at %(email)s er ne e-postadresse for bruker %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Bekreft" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Antall som kreves" @@ -11026,15 +11739,15 @@ 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:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "Minimum antall" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Skann strekkode" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Skjemafeil eksisterer" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Send" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "Varsler lastes inn her" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Legg til" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "E-Post-Innstillinger" msgid "Email settings not configured" msgstr "E-postinnstillinger ikke konfigurert" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Ja" @@ -14359,35 +15153,34 @@ msgstr "Sist gang tokenet ble brukt" msgid "Revoked" msgstr "Tilbakekalt" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Tillatelse satt" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Gruppe" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Visning" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Tillatelse til å se elementer" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Tillatelse til å legge til elementer" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Endre" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Tillatelse til å endre elementer" -#: users/models.py:413 +#: users/models.py:408 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 c96dcf7066..e8d295ec12 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "Nie znaleziono punktu końcowego API" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu" @@ -52,30 +52,34 @@ msgstr "Niepoprawna ilość ({exc})" msgid "Error details can be found in the admin panel" msgstr "Szczegóły błędu można znaleźć w panelu administracyjnym" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Wprowadź dane" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Uwagi" @@ -88,258 +92,270 @@ msgstr "Wartość '{name}' nie pojawia się w formacie wzoru" msgid "Provided value does not match required pattern: " msgstr "Podana wartość nie pasuje do wymaganego wzoru: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Wprowadź hasło" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Wprowadź nowe hasło" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Potwierdź hasło" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Potwierdź nowe hasło" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Stare hasło" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Adres email (ponownie)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Potwierdzenie adresu email" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Należy ponownie wpisać ten sam adres e-mail." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Podany podstawowy adres e-mail jest nieprawidłowy." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Podany e-mail domeny nie został zatwierdzony." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Rejestracja jest wyłączona." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Pusty ciąg numeru seryjnego" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Podwójny numer seryjny" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Nieprawidłowy zakres grupy: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Zakres grupy {group} przekracza dozwoloną ilość ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Nieprawidłowa kolejność grup: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Nie znaleziono numerów seryjnych" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Liczba unikalnych numerów seryjnych ({len(serials)}) musi odpowiadać ilości ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Usuń znaczniki HTML z tej wartości" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Błąd połączenia" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Serwer odpowiedział z nieprawidłowym kodem statusu" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Wystąpił wyjątek" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Serwer odpowiedział z nieprawidłową wartością Content-Length" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Rozmiar obrazu jest zbyt duży" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Przekroczono maksymalny rozmiar pobieranego obrazu" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Zdalny serwer zwrócił pustą odpowiedź" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "bułgarski" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Czeski" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Duński" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Niemiecki" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Grecki" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Angielski" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Hiszpański" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Hiszpański (Meksyk)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Perski" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "fiński" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Francuski" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebrajski" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "hinduski" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Węgierski" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Włoski" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japoński" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Koreański" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" -msgstr "" +msgstr "Łotewski" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Holenderski" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norweski" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polski" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugalski" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugalski (Brazylijski)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Rumuński" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Rosyjski" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Słowacki" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Słoweński" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "serbski" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Szwedzki" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Tajski" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turecki" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" -msgstr "" +msgstr "Ukraiński" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Wietnamski" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "chiński (uproszczony)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "chiński (tradycyjny)" @@ -348,257 +364,165 @@ msgstr "chiński (tradycyjny)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Logowanie do aplikacji" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Adres E-Mail" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Błąd podczas walidacji wtyczki" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metadane muszą być obiektem typu dict w Python" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Wtyczka Metadane" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "Pole metadanych JSON, do użycia przez wtyczki zewnętrzne" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Nieprawidłowo sformatowany wzór" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Określono nieznany format klucza" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Brak wymaganego formatu klucza" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Pole odniesienia nie może być puste" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Odniesienie musi być zgodne z wymaganym wzorem" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Numer odniesienia jest zbyt duży" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Brak pliku" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Brak zewnętrznego odnośnika" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Załącznik" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Wybierz plik do załączenia" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Link do zewnętrznego adresu URL" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Komentarz" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Komentarz pliku" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "data przesłania" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Nazwa pliku nie może być pusta" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Nieprawidłowy katalog załącznika" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Nazwa pliku zawiera niedozwolony znak '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Brak rozszerzenia w nazwie pliku" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Załącznik o tej nazwie już istnieje" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Błąd zmiany nazwy pliku" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikaty nazw nie mogą istnieć pod tym samym rodzicem" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "nadrzędny" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Ścieżka" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Notatki Markdown (opcjonalne)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Dane kodu kreskowego" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Dane kodu kreskowego stron trzecich" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Hasz kodu kreskowego" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Unikalny hasz danych kodu kreskowego" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Znaleziono istniejący kod kreskowy" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Błąd serwera" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Waluta" msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Aktywny" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Nie masz uprawnień do zmiany tej roli użytkownika." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Tylko superużytkownicy mogą tworzyć nowych użytkowników" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Twoje konto zostało utworzone." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Zresetuj hasło" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Witamy w InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Nazwa pliku" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Nieprawidłowa wartość" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Plik danych" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Wybierz plik danych do przesłania" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Nieobsługiwany typ pliku" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Plik jest zbyt duży" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Nie znaleziono kolumn w pliku" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Nie znaleziono wierszy danych w pliku" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Nie podano wierszy danych" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Nie podano kolumn danych" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Brakuje wymaganej kolumny: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Zduplikowana kolumna: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Obrazek zewnętrzny" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "Adres URL zdalnego pliku obrazu" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Sprawdzenie robotnika w tle nie powiodło się" @@ -702,27 +679,27 @@ msgstr "Nie skonfigurowano backendu e-mail" msgid "InvenTree system health checks failed" msgstr "Sprawdzanie poziomu zdrowia InvenTree nie powiodło się" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Nieznana baza danych" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Niewłaściwa jednostka fizyczna" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Wartość przedawnienia nie może być ujemna" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Przedawnienie nie może przekroczyć 100 %" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Nieprawidłowa wartość przedawnienia" @@ -750,62 +727,63 @@ msgstr "Informacja systemowa" msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:255 +#: build/api.py:247 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:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Śledzony" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Dostępne" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Zlecenie Budowy" msgid "Build Orders" msgstr "Zlecenia budowy" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Nieprawidłowy wybór kompilacji nadrzędnej" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "Odpowiedzialny użytkownik lub grupa muszą być określone" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Nie można zmienić elementu kompletacji" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referencja" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Krótki opis produkcji (opcjonalny)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Zamówienie budowy, do którego budowa jest przypisana" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Zamówienie budowy, do którego budowa jest przypisana" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Komponent" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Wybierz część do budowy" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Odwołanie do zamówienia sprzedaży" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Lokalizacja źródła" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Lokalizacja docelowa" -#: build/models.py:270 +#: build/models.py:302 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:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Ilość do stworzenia" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Ilość przedmiotów do zbudowania" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Ukończone elementy" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Ilość produktów magazynowych które zostały ukończone" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Status budowania" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Docelowy termin zakończenia" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Data zakończenia" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Wydany przez" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Odpowiedzialny" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Link do zewnętrznego adresu URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "Priorytet budowy" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Priorytet tego zamówienia produkcji" msgid "Project Code" msgstr "Kod projektu" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Kod projektu dla tego zlecenia produkcji" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Kolejność kompilacji {build} została zakończona" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, 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:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Zbuduj obiekt" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Zbuduj obiekt" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Ilość" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" +msgstr "Przydzielona ilość ({q}) nie może przekraczać dostępnej ilości zapasów magazynowych ({a})" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Ilość zapasów do przydzielenia do produkcji" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Nazwa komponentu" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Lokalizacja" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Automatycznie przydzielaj numery seryjne" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "Usuń produkcje, które nie zostały zakończone" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" -msgstr "" +msgstr "Zaakceptuj nieprzydzielone" -#: build/serializers.py:697 +#: build/serializers.py:734 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" +msgstr "Zaakceptuj, że przedmioty magazynowe nie zostały w pełni przypisane do tego zlecenia budowy" -#: build/serializers.py:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" -msgstr "" +msgstr "Wymagany stan nie został w pełni przypisany" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Numer producenta komponentu" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Opakowanie" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "ID komponentu" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "IPN komponentu" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Numer Seryjny" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Możliwość śledzenia" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "Zezwalaj na warianty" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "W Zamówieniu" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Dostępna ilość" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "W toku" @@ -1540,15 +1677,21 @@ msgstr "W toku" msgid "Production" msgstr "Produkcja" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Zakończono" @@ -1576,8 +1719,8 @@ msgstr "Miniaturka przedmiotu" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Akcje kodów kreskowych" @@ -1588,7 +1731,7 @@ msgstr "Akcje kodów kreskowych" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Pokaż Kod QR" @@ -1599,9 +1742,9 @@ msgstr "Pokaż Kod QR" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Odłącz Kod Kreskowy" @@ -1612,7 +1755,7 @@ msgstr "Odłącz Kod Kreskowy" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Połącz Kod Kreskowy" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Edytuj Budowę" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Anuluj Budowę" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Anuluj Budowę" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Data docelowa" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Zaległe" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Zamówienie zakupu" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Dodane przez" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Priorytet" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Przeznaczenie" @@ -1779,23 +1943,23 @@ msgstr "Nie określono lokalizacji docelowej" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" 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:190 -#: templates/js/translated/build.js:2199 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Utworzony" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Zakończone" @@ -1813,13 +1977,13 @@ msgstr "Zakończone" msgid "Build not complete" msgstr "Budowa niezakończona" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Przydziel zapasy do budowy" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Automatyczne przypisywanie" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Przydziel zapasy" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Załączniki" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Notatki tworzenia" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Nowe zlecenie budowy" @@ -1914,10 +2082,37 @@ msgstr "Nowe zlecenie budowy" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Brak wtyczki" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Plik" msgid "Select {name} file to upload" msgstr "Wybierz plik {name} do przesłania" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Zaktualizowany" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Data ostatniej aktualizacji" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Unikalny kod projektu" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Opis projektu" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter)" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "Ustawienia wartości" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "Wybrana wartość nie jest poprawną opcją" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Wartość musi być wartością binarną" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Wartość musi być liczbą całkowitą" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Ciąg musi być unikatowy" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Brak grupy" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Wymagane ponowne uruchomienie" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "Zmieniono ustawienie, które wymaga restartu serwera" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Oczekujące migracje" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "Liczba oczekujących migracji bazy danych" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Nazwa instancji serwera" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Użyj nazwy instancji" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Nazwa firmy" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Wewnętrzna nazwa firmy" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Bazowy URL" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "Bazowy adres URL dla instancji serwera" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Domyślna waluta" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "Interwał aktualizacji waluty" -#: common/models.py:1273 +#: common/models.py:1292 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:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "dni" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "Wtyczka aktualizacji waluty" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Pobierz z adresu URL" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Limit rozmiaru pobierania" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "Ścisła weryfikacja adresu URL" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "Wymagaj specyfikacji schematu podczas sprawdzania poprawności adresów URL" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Wymagaj potwierdzenia" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Wymagaj wyraźnego potwierdzenia dla określonych działań." -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Głębokość drzewa" -#: common/models.py:1322 +#: common/models.py:1341 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:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Częstotliwość sprawdzania aktualizacji" -#: common/models.py:1329 +#: common/models.py:1348 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:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Automatyczna kopia zapasowa" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "Włącz automatyczną kopię zapasową bazy danych i plików multimedialnych" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Interwał automatycznego tworzenia kopii zapasowych" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "Określ liczbę dni między zdarzeniami automatycznej kopii zapasowej" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "Interwał usuwania zadań" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Szablon" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Złożenie" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Komponent" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Wirtualny" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" -msgstr "" +msgstr "Pokaż powiązane części" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" -msgstr "" +msgstr "Użyj cennika dostawcy" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" -msgstr "" +msgstr "Nadpisanie historii zakupów" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Rozmiar strony" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Włącz generowanie raportów testów" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 +msgid "Block Until Tests Pass" +msgstr "" + +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" +msgstr "" + +#: common/models.py:1850 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1856 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1870 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" +msgstr "" + +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1892 +msgid "Sales Order Default Shipment" +msgstr "" + +#: common/models.py:1893 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1841 +#: common/models.py:1900 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1857 +#: common/models.py:1916 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1871 +#: common/models.py:1930 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "Automatycznie wypełniaj zlecenia zakupu" -#: common/models.py:1879 +#: common/models.py:1938 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:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/models.py:1887 +#: common/models.py:1946 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/models.py:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/models.py:1893 +#: common/models.py:1952 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:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1906 +#: common/models.py:1965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1912 -msgid "Email required" -msgstr "Adres e-mail jest wymagany" - -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" -msgstr "Autouzupełnianie użytkowników SSO" - -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" -msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" - -#: common/models.py:1926 -msgid "Mail twice" -msgstr "E-mail dwa razy" - -#: common/models.py:1927 -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:1932 -msgid "Password twice" -msgstr "Hasło dwukrotnie" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" -msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" - -#: common/models.py:1938 -msgid "Allowed domains" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1946 -msgid "Group on signup" -msgstr "Grupuj przy rejestracji" - -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1952 -msgid "Enforce MFA" -msgstr "Wymuś MFA" - -#: common/models.py:1953 -msgid "Users must use multifactor security." -msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." - -#: common/models.py:1958 -msgid "Check plugins on startup" -msgstr "Sprawdź wtyczki przy starcie" - -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" - -#: common/models.py:1968 -msgid "Check for plugin updates" -msgstr "" - -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/models.py:1975 -msgid "Enable URL integration" -msgstr "Włącz integrację URL" - -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" -msgstr "Włącz wtyczki, aby dodać ścieżki URL" - -#: common/models.py:1982 -msgid "Enable navigation integration" -msgstr "" - -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" -msgstr "Włącz integrację z aplikacją" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "Włącz wtyczki, aby dodać aplikacje" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 +msgid "Email required" +msgstr "Adres e-mail jest wymagany" + +#: common/models.py:2004 +msgid "Require user to supply mail on signup" +msgstr "" + +#: common/models.py:2009 +msgid "Auto-fill SSO users" +msgstr "Autouzupełnianie użytkowników SSO" + +#: common/models.py:2011 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" + +#: common/models.py:2017 +msgid "Mail twice" +msgstr "E-mail dwa razy" + +#: common/models.py:2018 +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:2023 +msgid "Password twice" +msgstr "Hasło dwukrotnie" + +#: common/models.py:2024 +msgid "On signup ask users twice for their password" +msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" + +#: common/models.py:2029 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "" + +#: common/models.py:2037 +msgid "Group on signup" +msgstr "Grupuj przy rejestracji" + +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" + +#: common/models.py:2045 +msgid "Enforce MFA" +msgstr "Wymuś MFA" + +#: common/models.py:2046 +msgid "Users must use multifactor security." +msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." + +#: common/models.py:2051 +msgid "Check plugins on startup" +msgstr "Sprawdź wtyczki przy starcie" + +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:2061 +msgid "Check for plugin updates" +msgstr "" + +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "Włącz integrację URL" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "Włącz wtyczki, aby dodać ścieżki URL" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "Włącz integrację z aplikacją" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "Włącz wtyczki, aby dodać aplikacje" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/models.py:2003 +#: common/models.py:2096 msgid "Enable event integration" msgstr "" -#: common/models.py:2004 +#: common/models.py:2097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2010 +#: common/models.py:2103 msgid "Enable project codes" msgstr "" -#: common/models.py:2011 +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2018 +#: common/models.py:2111 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2026 +#: common/models.py:2119 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2034 +#: common/models.py:2127 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2042 +#: common/models.py:2135 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 msgid "Settings key (must be unique - case insensitive" msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter" -#: common/models.py:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Pokaż obserwowane części" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Pokaż obserwowane części na stronie głównej" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Pokaż obserwowane kategorie" -#: common/models.py:2126 +#: common/models.py:2219 msgid "Show subscribed part categories on the homepage" msgstr "Pokaż obserwowane kategorie części na stronie głównej" -#: common/models.py:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Pokaż najnowsze części" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "Pokaż najnowsze części na stronie głównej" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2138 +#: common/models.py:2231 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2144 +#: common/models.py:2237 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Pokaż niski stan magazynowy" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "Pokaż elementy o niskim stanie na stronie głównej" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Pokaż wymagany stan zapasów" -#: common/models.py:2162 +#: common/models.py:2255 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "" -#: common/models.py:2229 +#: common/models.py:2322 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "" -#: common/models.py:2245 +#: common/models.py:2338 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Szukaj części" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Ukryj nieaktywne części" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2289 +#: common/models.py:2382 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Wyszukaj zlecenia zakupu" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Wyklucz nieaktywne zlecenia zakupu" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "" -#: common/models.py:2357 +#: common/models.py:2450 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "Pokaż ilość w formularzach" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Stały pasek nawigacyjny" -#: common/models.py:2388 +#: common/models.py:2481 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Format daty" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "Preferowany format wyświetlania dat" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Planowanie komponentów" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" -msgstr "" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Użytkownik" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Cena" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Aktywny" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Sekret" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Nagłówek" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Zawartość" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Łącze" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "Obraz" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Załącznik" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Brak pliku" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Brak zewnętrznego odnośnika" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Wybierz plik do załączenia" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Komentarz" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" -msgstr "" +msgstr "Jest uruchomiony" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" -msgstr "" +msgstr "Oczekujce zadania" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" -msgstr "" +msgstr "Zaplanowane zadania" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" -msgstr "" +msgstr "Zadania zakończone błędem" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" -msgstr "" +msgstr "ID zadania" -#: common/serializers.py:399 +#: common/serializers.py:408 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 "" +msgstr "Unikalny identyfikator zadania" #: common/serializers.py:410 +msgid "Lock" +msgstr "Blokada" + +#: common/serializers.py:410 +msgid "Lock time" +msgstr "Czas blokady" + +#: common/serializers.py:412 +msgid "Task name" +msgstr "Nazwa zadania" + +#: common/serializers.py:414 +msgid "Function" +msgstr "Funkcja" + +#: common/serializers.py:414 +msgid "Function name" +msgstr "Nazwa funkcji" + +#: common/serializers.py:416 +msgid "Arguments" +msgstr "Argumenty" + +#: common/serializers.py:416 +msgid "Task arguments" +msgstr "Argumenty zadania" + +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Nazwa pliku" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Pusta domena nie jest dozwolona." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Niepoprawna nazwa domeny: {domain}" @@ -3753,7 +4079,7 @@ msgstr "" #: common/views.py:464 msgid "Parts imported" -msgstr "" +msgstr "Komponenty zaimportowane" #: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "Poprzedni krok" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" -msgstr "" +msgstr "Komponent jest aktywny" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" -msgstr "" +msgstr "Producent jest aktywny" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Firma" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Firmy" + +#: company/models.py:117 msgid "Company description" msgstr "Opis firmy" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "Opis firmy" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Strona WWW" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "Witryna internetowa firmy" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Numer telefonu" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Numer telefonu kontaktowego" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Kontaktowy adres e-mail" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Kontakt" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Punkt kontaktowy" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Link do informacji o zewnętrznym przedsiębiorstwie" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "jest klientem" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Czy sprzedajesz produkty tej firmie?" -#: company/models.py:171 -msgid "is supplier" -msgstr "jest dostawcą" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Czy kupujesz przedmioty od tej firmy?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "jest producentem" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Czy to przedsiębiorstwo produkuje części?" -#: company/models.py:186 +#: company/models.py:189 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 "Firma" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Adres" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" -msgstr "" +msgstr "Kod pocztowy miasto/region" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" -msgstr "" +msgstr "Stan/Województwo" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" -msgstr "" +msgstr "Stan lub województwo" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" -msgstr "" +msgstr "Kraj" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" -msgstr "" +msgstr "Notatki przewozowe kuriera" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" -msgstr "" +msgstr "Notatki dla kuriera" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" -msgstr "" +msgstr "Wewnętrzne notatki przewozowe" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" -msgstr "" +msgstr "Notatki wysyłkowe do użytku wewnętrznego" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Producent" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: 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 "Numer producenta komponentu" - -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 -msgid "Parameter name" +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Część bazowa" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Wybierz część" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Producent" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Wybierz producenta" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 +msgid "Parameter name" +msgstr "Nazwa parametru" + +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Wartość" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" -msgstr "" +msgstr "Wartość parametru" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Jednostki" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Jednostki parametru" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Dostawca" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Uwaga" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2424 -msgid "Packaging" -msgstr "Opakowanie" - -#: company/models.py:866 +#: company/models.py:853 msgid "Part packaging" msgstr "Opakowanie części" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" -msgstr "" +msgstr "Ilość w opakowaniu" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "wielokrotność" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" -msgstr "" +msgstr "Zamów wiele" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" -msgstr "" +msgstr "Dostępność zaktualizowana" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "Domyślna waluta używana dla tego dostawcy" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "Nieaktywny" @@ -4212,9 +4568,9 @@ msgstr "Usuń firmę" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" -msgstr "" +msgstr "Obraz części" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:12 @@ -4229,19 +4585,19 @@ msgstr "Pobierz obraz z adresu URL" #: company/templates/company/company_base.html:66 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "" +msgstr "Usuń obraz" -#: 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Klient" @@ -4249,42 +4605,35 @@ msgstr "Klient" msgid "Uses default currency" msgstr "Używa domyślnej waluty" -#: 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 "Adres" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" -msgstr "" +msgstr "Usuń obraz" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "" +msgstr "Usuń przypisany obraz z tej firmy" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" -msgstr "" +msgstr "Usuń" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" -msgstr "" +msgstr "Prześlij obraz" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" -msgstr "" +msgstr "Pobierz obraz" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 @@ -4298,7 +4647,7 @@ msgstr "Utwórz nowego dostawcę części" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Nowy dostawca części" @@ -4311,7 +4660,7 @@ msgstr "Części producenta" msgid "Create new manufacturer part" msgstr "Utwórz nową część producenta" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Nowa część producenta" @@ -4325,7 +4674,7 @@ msgstr "Zapasy dostawcy" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Nowe zamówienie zakupu" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4402,16 +4751,16 @@ msgstr "" #: company/templates/company/detail.html:187 #: company/templates/company/detail.html:188 msgid "Add Contact" -msgstr "" +msgstr "Dodaj kontakt" #: company/templates/company/detail.html:206 msgid "Company addresses" -msgstr "" +msgstr "Adres firmy" #: company/templates/company/detail.html:210 #: company/templates/company/detail.html:211 msgid "Add Address" -msgstr "" +msgstr "Dodaj adres" #: company/templates/company/manufacturer_part.html:15 company/views.py:37 #: templates/InvenTree/search.html:180 templates/navbar.html:49 @@ -4420,7 +4769,7 @@ msgstr "Producenci" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Zamów komponent" @@ -4435,7 +4784,8 @@ 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:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Komponent wewnętrzny" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ msgstr "Dostawcy" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametry" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nowy parametr" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Zamów komponent" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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:207 -#: templates/js/translated/stock.js:537 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Nowy towar" @@ -4582,29 +4923,33 @@ msgstr "Informacja cenowa" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Towary" @@ -4630,10 +4975,6 @@ msgstr "Klienci" msgid "New Customer" msgstr "Nowy klient" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Firmy" - #: company/views.py:52 msgid "New Company" msgstr "Nowa firma" @@ -4642,70 +4983,250 @@ msgstr "Nowa firma" msgid "Placed" msgstr "Umieszczony" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "Dane" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "Ważny" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" -msgstr "" +msgstr "Kopie" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" -msgstr "" +msgstr "Liczba kopii do wydrukowania dla każdej etykiety" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" -msgstr "" +msgstr "Połączono" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" +msgstr "Nieznany" + +#: machine/machine_types/label_printer.py:233 +msgid "Printing" +msgstr "Drukowanie" + +#: machine/machine_types/label_printer.py:234 +msgid "No media" +msgstr "Brak mediów" + +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" 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 "" +msgstr "Rozłączono" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" -msgstr "" +msgstr "Drukarka etykiet" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." -msgstr "" +msgstr "Bezpośrednio wydrukuj etykiety dla różnych elementów." -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" -msgstr "" +msgstr "Lokalizacja drukarki" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" #: machine/models.py:25 msgid "Name of machine" -msgstr "" +msgstr "Nazwa maszyny" #: machine/models.py:29 msgid "Machine Type" -msgstr "" +msgstr "Typ maszyny" #: machine/models.py:29 msgid "Type of machine" -msgstr "" +msgstr "Typ maszyny" #: machine/models.py:34 machine/models.py:146 msgid "Driver" -msgstr "" +msgstr "Sterownik" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "" +msgstr "Sterownik użyty dla tego urządzenia" #: machine/models.py:39 msgid "Machines can be disabled" @@ -4717,15 +5238,11 @@ msgstr "" #: machine/models.py:100 msgid "No errors" -msgstr "" +msgstr "Brak błędów" #: machine/models.py:105 msgid "Initialized" -msgstr "" - -#: machine/models.py:110 -msgid "Errors" -msgstr "" +msgstr "Zainicjalizowany" #: machine/models.py:117 msgid "Machine status" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Cena całkowita" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Status zamówienia" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" -msgstr "" +msgstr "Posiada ceny" -#: order/api.py:240 +#: order/api.py:228 msgid "No matching purchase order found" msgstr "Nie znaleziono pasującego zlecenia zakupu" -#: 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Zamówienie" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 msgid "Order Pending" -msgstr "" +msgstr "Zamówienie oczekujące" -#: order/api.py:1509 order/models.py:380 order/models.py:1432 -#: order/models.py:1541 order/templates/order/order_base.html:9 +#: order/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "Status zamówienia zakupu" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "odebrane przez" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Data wydania" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "Data wystawienia zamówienia" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Odebrane" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "Gdzie kupujący chce przechowywać ten przedmiot?" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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:1606 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "Wysłana ilość" -#: order/models.py:1708 +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "Data wysyłki" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "Sprawdzone przez" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "Przesyłka" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "Numer przesyłki" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "Numer śledzenia" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "Informacje o śledzeniu przesyłki" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "Przesyłka została już wysłana" -#: order/models.py:1772 +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "Linia" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Komponent" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "Pozycja nie pasuje do zlecenia zakupu" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Zagubiono" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Zwrócone" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "W trakcie" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Zwrot" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Naprawa" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Wymiana" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Zwrot pieniędzy" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Odrzuć" @@ -5426,87 +5987,93 @@ msgid "Edit order" msgstr "Edytuj zamówienie" #: 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 "Anuluj zamówienie" - -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Anuluj zamówienie" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Kompletne zamówienie" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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:115 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Opis zamówienia" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Niekompletny" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Wydany" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "Duplikuj wybrane" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Usuń wiersz" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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:259 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "Oczekujące przesyłki" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Akcje" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "ID komponentu" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Nazwa komponentu" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Wersja" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Słowa kluczowe" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "ID kategorii" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Wariant" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" @@ -5839,169 +6394,183 @@ msgstr "Minimalny stan magazynowy" msgid "Used In" msgstr "Użyte w" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "Ścieżka kategorii" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Części" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "IPN komponentu" +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "Nadchodzące zlecenie zakupu" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "Ważny" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "Ta opcja musi być zaznaczona" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Kategoria" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Domyślna lokalizacja" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Kategoria komponentu" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: 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:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Domyślna lokalizacja dla komponentów w tej kategorii" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Domyślne słowa kluczowe" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "Nieprawidłowy wybór dla części nadrzędnej" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:1067 +#: part/models.py:1160 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:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 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:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "Ostatnia inwentaryzacja" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Data" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "Nazwa testu" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 +msgid "Invalid template name - must include at least one alphanumeric character" +msgstr "" + +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "Nazwa testu" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 msgid "Test Key" msgstr "" -#: part/models.py:3537 +#: part/models.py:3604 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3544 +#: part/models.py:3611 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3545 +#: part/models.py:3612 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 msgid "Enabled" msgstr "Aktywne" -#: part/models.py:3549 +#: part/models.py:3616 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 msgid "Required" msgstr "Wymagane" -#: part/models.py:3555 +#: part/models.py:3622 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3560 templates/js/translated/part.js:2917 +#: part/models.py:3627 templates/js/translated/part.js:2932 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3561 +#: part/models.py:3628 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3566 templates/js/translated/part.js:2924 +#: part/models.py:3633 templates/js/translated/part.js:2939 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3568 +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "Część nadrzędna" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "Dane" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "Wartość parametru" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Wartość domyślna" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "Unikalny wartość ID komponentu" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "Wartość IPN części" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "Poziom" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "Zezwalaj na warianty" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Kopiuj parametry" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "Duplikuj część" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "Duplikuj część" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "Wyczyść istniejący BOM" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "Nie podano ilości" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "Nieprawidłowa ilość" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "Masz włączone powiadomienia dla tej kategorii" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "Włącz powiadomienia dla tej kategorii" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "Akcje kategorii" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Edytuj kategorię" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Edytuj kategorię" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Usuń kategorię" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Usuń kategorię" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "Kategoria najwyższego poziomu" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Części (w tym podkategorie)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "Utwórz nową część" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Nowy komponent" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Parametry części" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "Stwórz nową kategorię komponentów" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Nowa kategoria" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "Warianty Części" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "Utwórz nowy wariant" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "Nowy wariant" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "Powiązane części" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "Dodaj powiązane" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Zestawienie materiałowe" -#: part/templates/part/detail.html:260 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "Akcje eksportu" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Eksportuj BOM" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "Drukuj raport BOM" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "Wgraj BOM" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "Weryfikuj BOM" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Dodaj część do BOM" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "Złożenia" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "Dostawcy Części" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "Producenci części" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Wybierz format pliku" @@ -7362,7 +8037,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 templates/js/translated/label.js:143 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Drukuj etykietę" @@ -7372,7 +8047,7 @@ msgstr "Pokaż informacje o cenach" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Akcje magazynowe" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,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:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "Przypisane do zamówień sprzedaży" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/templates/part/part_base.html:291 +#: part/templates/part/part_base.html:300 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:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "Ostatni numer seryjny" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Szukaj numeru seryjnego" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ msgid "Variants" msgstr "Warianty" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Stan" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "Ostatnia aktualizacja" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Brak w magazynie" @@ -7749,7 +8420,7 @@ msgstr "Nie znaleziono obrazka części" msgid "Part Pricing" msgstr "Cennik części" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Nie określono działania" msgid "No matching action found" msgstr "Nie znaleziono pasującej akcji" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Nie znaleziono wyników dla danych kodu kreskowego" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Znaleziono wyniki dla danych kodu kreskowego" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "Kod kreskowy pasuje do istniejącego elementu" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "Brak dopasowania dla kodu kreskowego dostawcy" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "Kod kreskowy nie pasuje do istniejących pozycji magazynowych" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "Znaleziono wiele zleceń zakupu pasujących do '{order}'" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "Nie znaleziono pasującego zlecenia zakupu dla '{order}'" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "Zlecenie zakupu nie pasuje do dostawcy" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "Nie znaleziono pozycji oczekującej dla części od dostawcy" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "Dalsze informacje wymagane do odbioru pozycji" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "Otrzymana pozycja zlecenia zakupu" @@ -7862,55 +8541,63 @@ msgstr "Otrzymana pozycja zlecenia zakupu" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:87 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order is not pending" msgstr "Zlecenie zakupu nie jest oczekujące" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:129 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "Zlecenie zakupu nie zostało złożone" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "Czy wtyczka jest aktywna" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "Zainstalowane" @@ -8205,7 +8918,7 @@ msgstr "Wtyczka wbudowana" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "Metoda" msgid "No author found" msgstr "Nie znaleziono autora" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "Brak prawidłowych obiektów do szablonu" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "Plik szablonu '{template}' jest brakujący lub nie istnieje" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Nazwa szablonu" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Wzór nazwy pliku" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Filtry" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "Renderuj raport w orientacji poziomej" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Szerokość [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Wysokość [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "Wycinek" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Cena jednostkowa" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 msgid "Total" msgstr "Razem" -#: 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 "Numer Seryjny" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "Wynik" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "Zaliczone" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "Niezaliczone" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Zainstalowane elementy" -#: 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Numer seryjny" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 msgid "Location ID" msgstr "ID lokalizacji" -#: 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "Ścieżka lokalizacji" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "ID części dostawcy" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Zainstalowane w" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "ID zlecenia zakupu" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "Data ważności" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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:166 stock/models.py:949 +#: stock/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Właściciel" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "Wybierz właściciela" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "Nadrzędny towar" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "Wybierz pasującą część dostawcy dla tego towaru" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "Wyszukaj zlecenie zakupu" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "Zlecenie zakupu dla tego towaru" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "Usuń po wyczerpaniu" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "Notatki do wpisu" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "Należy podać wartość dla tego testu" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "Wynik testu" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "Należy podać wartość dla tego testu" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "Wynik testu" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Element nadrzędny" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Termin minął" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Elementy podrzędne" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "Poddany kwarantannie" msgid "Legacy stock tracking entry" msgstr "Starsze śledzenie wpisów stanu magazynowego" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Utworzono element magazynowy" @@ -9431,7 +10173,7 @@ msgstr "Podziel z pozycji nadrzędnej" msgid "Split child item" msgstr "Podziel element podrzędny" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Scalone przedmioty magazynowe" @@ -9451,7 +10193,7 @@ msgstr "Dane wyjściowe kolejności kompilacji ukończone" msgid "Build order output rejected" msgstr "Odrzucono wynik zlecenia produkcji" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Zużyte przez kolejność kompilacji" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "Skanuj do lokacji" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "Akcje druku" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "Przelicz stan magazynowy" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "Usuń stan magazynowy" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "Przenieś stan magazynowy" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Budowa" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Element nadrzędny" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Nie ustawiono producenta" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "Tylko do odczytu" @@ -9669,12 +10407,8 @@ msgstr "następna strona" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Lokacje nie są ustawione" @@ -9691,11 +10425,6 @@ msgstr "" 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 "Termin minął" - #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Edytuj lokację" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Nowa lokalizacja" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" msgid "Allocations" msgstr "" -#: stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Elementy podrzędne" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Odmowa dostępu" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "Ustawienia części" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "Import części" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "Import części" @@ -10207,7 +10932,7 @@ msgstr "Ścieżka instalacji" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Usuń" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "Strona główna" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "Ustawienia konta" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "Prześlij raport o błędzie" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "skopiuj do schowka" @@ -10779,7 +11492,7 @@ msgstr "Potwierdź adres e-mail" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Proszę potwierdzić że %(email)s jest adresem e-mail dla użytkownika %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Potwierdź" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Wymagana ilość" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "Minimalna ilość" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Zeskanuj kod kreskowy" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Istnieją błędy formularza" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Zatwierdź" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Dodaj" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "Ustawienia e-maila" msgid "Email settings not configured" msgstr "Ustawienia e-mail nie zostały skonfigurowane" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Tak" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Uprawnienia nadane" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Grupa" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Widok" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Uprawnienie do wyświetlania przedmiotów" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Uprawnienie do dodawania przedmiotów" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Zmień" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Uprawnienie do edycji przedmiotów" -#: users/models.py:413 +#: users/models.py:408 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 e066ce1e6b..4c6cae4906 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index 686d6824f5..898f26a1c0 100644 --- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:48\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 0c8ff53bc2..d24175728b 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "Конечная точка API не обнаружена" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "У пользователя недостаточно прав для просмотра этой модели!" @@ -52,30 +52,34 @@ msgstr "Недопустимое количество ({exc})" msgid "Error details can be found in the admin panel" msgstr "Подробности об ошибке можно найти в панели администратора" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Введите дату" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Записи" @@ -88,258 +92,270 @@ msgstr "Значение '{name}' отсутствует в формате ша msgid "Provided value does not match required pattern: " msgstr "Предоставленное значение не соответствует требуемому формату: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Введите пароль" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Введите новый пароль" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Подтвердить пароль" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Подтвердите новый пароль" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Старый пароль" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (еще раз)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Подтверждение адреса электронной почты" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Вы должны вводить один и тот же адрес электронной почты." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Указанный основной адрес электронной почты неверен." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Указанный домен электронной почты не утверждён." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Регистрация отключена." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "недопустимое количество" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Пустая строка серийного номера" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Повторяющийся серийный номер" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Недопустимый диапазон группы: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Диапазон группы {group} превышает допустимое количество ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Неверная последовательность групп: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Серийных номеров не найдено" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Число уникальных серийных номеров ({s}) должно соответствовать количеству ({q})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Удалить HTML теги из этого значения" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Ошибка соединения" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Сервер ответил неверным кодом статуса" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Произошло исключение" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Сервер ответил неверным значением Контент-Длина" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Изображение слишком большое" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Загрузка изображения превышен максимальный размер" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Удаленный сервер вернул пустой ответ" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Предоставленный URL не является допустимым файлом изображения" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "Арабский" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Болгарский" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Чешский" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Датский" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Немецкий" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Греческий" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Английский" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Испанский" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Испанский (Мексика)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "Эстонский" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Фарси / Персидский" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Финский" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Французский" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Иврит" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Хинди" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Венгерский" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Итальянский" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Японский" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Корейский" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "Латышский" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Голландский" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Норвежский" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Польский" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Португальский" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Португальский (Бразильский диалект)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" -msgstr "" +msgstr "Румынский" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Русский" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Словацкий" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Словенский" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Сербский" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Шведский" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Тайский" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Турецкий" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "Украинский" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Вьетнамский" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Китайский (Упрощенный)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Китайский (Традиционный)" @@ -348,257 +364,165 @@ msgstr "Китайский (Традиционный)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Войти в приложение" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "EMail" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Ошибка запуска проверки плагина" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Метаданные должны быть объектом python dict" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Метаданные плагина" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "Поле метаданных JSON для использования внешними плагинами" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Неправильно отформатированный шаблон" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Указан неизвестный ключ формата" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Отсутствует требуемый ключ формата" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Ссылочный идентификатор не может быть пустым" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Ссылка должна соответствовать шаблону {pattern}" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Ссылка на внешний URL" - -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 "Имя файла содержит запрещенные символы '{c}'" - -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Повторяющиеся имена не могут существовать под одним и тем же родителем" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Название" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Описание" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "родитель" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Путь" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Записи о скидке (необязательно)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Данные штрих-кода" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Данные стороннего штрих-кода" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Хэш штрих-кода" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Уникальный хэш данных штрих-кода" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Обнаружен существующий штрих-код" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Ошибка сервера" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Сервер зарегистрировал ошибку." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Валюта" msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Имя пользователя" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Имя" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "Имя пользователя" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Фамилия" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "Фамилия пользователя" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "Электронный адрес пользователя" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "Персонал" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "Имеет ли этот пользователь права персонала" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "Суперпользователь" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "Это пользователь является суперпользователем" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Активный" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "Активна эта учетная запись" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "У вас недостаточно прав для изменения роли этого пользователя." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Только суперпользователи могут создавать новых пользователей" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Ваша учётная запись была успешно создана." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Пожалуйста, используйте функцию сброса пароля для входа" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Добро пожаловать в InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Имя файла" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Неверное значение" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Файл данных" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Выберите файл данных для загрузки" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Неподдерживаемый тип файла" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Файл слишком большой" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Столбцы в файле не найдены" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Строки данных в файле не найдены" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Строки данных в файле не найдены" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Столбцы данных не предоставлены" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Отсутствует обязательный столбец: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Повторяющийся столбец: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Удаленное изображение" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "ССЫЛКА файла изображения на удаленном сервере" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "Загрузка изображений с удаленного URL-адреса не включена" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Проверка фонового работника не удалась" @@ -702,27 +679,27 @@ msgstr "Сервер электронной почты не настроен" msgid "InvenTree system health checks failed" msgstr "Ошибка проверки состояния системы InvenTree" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Неизвестная база данных" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Неверная физическая единица" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Неверный код валюты" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Значение избытка не должно быть отрицательным" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Избыток не может превысить 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Неверное значение для избытка" @@ -750,62 +727,63 @@ msgstr "Информация о системе" msgid "About InvenTree" msgstr "О программе InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Расходники" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Необязательно" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Доступно" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Заказ на производство" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Заказ на производство" msgid "Build Orders" msgstr "Заказы на производство" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "Сборка BOM не подтверждена" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "Порядок сборки не может быть создан для неактивной части" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "Порядок сборки не может быть создан для разблокированной части" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Неверный выбор для родительской сборки" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "Должен быть указан ответственный пользователь или группа" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Деталь заказа на производства не может быть изменена" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Отсылка" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Краткое описание заказа на производство (необязательно)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Родительский заказ на производство" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Заказ на производство, которому принад #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Деталь" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Выберите деталь для производства" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Заказ на продажу, которому принадлежит этот заказ на производство" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Место хранения - источник" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Выберите место хранения для этого заказа на производство (оставьте пустым, чтобы взять с любого места на складе)" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Место хранения результата" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Выберите место хранения завершенных элементов" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Количество производимых деталей" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Количество складских позиций для производства" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Произведенные детали" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Количество складских позиций, которые были произведены" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Статус заказа на производство" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Целевая дата завершения" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Дата завершения" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "выполнено" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Создано" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Ответственный" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "Пользователь, ответственный за этот заказ на производство" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Ссылка на внешний URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "Приоритет производства" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Приоритет этого заказа на производство msgid "Project Code" msgstr "Код проекта" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Код проекта для этого заказа на производство" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "Не удалось выгрузить задачу для распределения на сборку" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Заказ на производство {build} был завершен" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Продукция не указана" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Продукция уже произведена" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" -msgstr "" +msgstr "Номер позиции для производства" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Объект производства" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Количество" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "Выбранная складская позиция не соответствует позиции в BOM" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Складская позиция" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Установить в" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Целевая складская позиция" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Наименование детали" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "Название кода проекта" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Расположение" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Автоматически выделить серийные номера" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "Для отслеживаемых частей должны быть указаны серийные номера" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Статус" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, если запасы не были полностью распределены" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Исключить место хранения" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Обменный остаток" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Заменить остатки" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Необязательные элементы" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" +msgstr "Не удалось запустить задачу автораспределения" + +#: build/serializers.py:1173 +msgid "Supplier Part Number" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Код производителя" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "Имя Места Хранения" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Упаковка" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "Код детали" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "IPN детали" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Описание детали" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Серийный номер" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "Зарезервированное количество" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Доступный запас" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Отслеживание" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "Унаследованные" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "Разрешить разновидности" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "В заказе" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Доступный запас" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Ожидаемый" @@ -1540,15 +1677,21 @@ msgstr "Ожидаемый" msgid "Production" msgstr "Продукция" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Готово" @@ -1576,8 +1719,8 @@ msgstr "Миниатюра детали" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Действия со штрих-кодом" @@ -1588,7 +1731,7 @@ msgstr "Действия со штрих-кодом" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Показать QR-код" @@ -1599,9 +1742,9 @@ msgstr "Показать QR-код" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Отвязать штрих-код" @@ -1612,7 +1755,7 @@ msgstr "Отвязать штрих-код" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Привязать штрих-код" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Отменить производство" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Удалить производство" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Завершить производство" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Описание производства" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Не указана продукция для этого заказа на производство" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Заказ на производство готов быть отмечен как выполненный" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Заказ на производство не может быть выполнен, так как осталась незавершенная продукция" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Требуемое кол-во не было произведено" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "Остатки не были полностью зарезервированы для этого заказа на производство" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Производство было просрочено на %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Просрочено" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Завершенная продукция" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Заказ на продажу" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Приоритет" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "Удалить заказ на производство" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "QR-код заказа на производство" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "Привязать штрих-код для заказа на производство" @@ -1766,8 +1930,8 @@ msgstr "Источник запаса" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Назначение" @@ -1779,23 +1943,23 @@ msgstr "Место назначения не указано" msgid "Allocated Parts" msgstr "Зарезервированные детали" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Создано" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Завершённые" @@ -1813,13 +1977,13 @@ msgstr "Завершённые" msgid "Build not complete" msgstr "Производство не завершено" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Дочерние заказы на производство" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Зарезервировать остатки для производства" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Автоматически Зарезервировать" msgid "Manually allocate stock to build" msgstr "Вручную зарезервировать остатки для производства" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Зарезервировать Остатки" @@ -1870,15 +2034,19 @@ msgstr "Создать выход производства" msgid "New Build Output" msgstr "Новая продукция" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "Поглощенные Остатки" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Завершенная продукция" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Завершенная продукция" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Файлы" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Записи производства" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "Резервирование Завершено" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "Все позиции были полностью зарезервированы" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Новый заказ на производство" @@ -1914,23 +2082,50 @@ msgstr "Новый заказ на производство" msgid "Build Order Details" msgstr "Подробности Заказа на Производство" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "Позиции" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Незавершенная продукция" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "Ссылка" + +#: common/api.py:700 +msgid "Is File" +msgstr "Файл" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "У пользователя нет прав на удаление этого вложения" + #: common/currency.py:132 msgid "Invalid currency code" -msgstr "" +msgstr "Неверный код валюты" #: common/currency.py:134 msgid "Duplicate currency code" -msgstr "" +msgstr "Код валюты дублируется" #: common/currency.py:139 msgid "No valid currency codes provided" -msgstr "" +msgstr "Не указаны действительные коды валют" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Нет плагина" @@ -1972,1606 +2167,1662 @@ msgstr "Файл {name.title()}" msgid "Select {name} file to upload" msgstr "Выберите {name} файл для загрузки" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Обновлено" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Временная метка последнего обновления" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "URL сайта заблокирован настройками" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Уникальный код проекта" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Описание проекта" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "Пользователь или группа, ответственные за этот проект" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "Ключ настроек (должен быть уникальным - не чувствителен к регистрам)" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "Значения настроек" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "Выбранное значение не является допустимым" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Значение должно быть булевым" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Значение должно быть целым числом" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Строка ключа должна быть уникальной" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Нет группы" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Требуется перезапуск" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "Настройки были изменены, что требует перезапуска сервера" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Ожидаемые миграции" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "Количество ожидаемых миграций базы данных" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Название сервера" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "Текстовое описание сервера" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Название инстанса" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "Имя сервера в заголовке" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Ограничить отображение `О...`" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "Показать `О...` только суперпользователям" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Название компании" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Внутреннее название компании" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Базовая ссылка" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "Базовая ссылка для экземпляра сервера" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Валюта по умолчанию" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "Выберите базовую валюту для расчета цены" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" -msgstr "" +msgstr "Поддерживаемые валюты" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" -msgstr "" +msgstr "Список поддерживаемых кодов валют" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "Интервал обновления курса валют" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Как часто обновлять курс валют (установите \"ноль\", чтобы выключить)" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "дней" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "Плагин обновления валют" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "Модуль обновления валюты" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Скачать по ссылке" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "Разрешить загрузку удаленных изображений и файлов по внешнему URL" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Ограничение размера загрузки" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "Максимально допустимый размер загрузки для удалённого изображения" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "User-Agent, используемый для загрузки из URL" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "Строгая проверка URL-адреса" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "Требуется спецификация схемы при проверке URL-адресов" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Требуется подтверждение" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Требовать явное подтверждение пользователя для определенного действия." -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Глубина дерева" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Глубина дерева по умолчанию для просмотра дерева. Глубокие уровни загружены по мере необходимости." -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Интервал проверки обновлений" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "Как часто проверять наличие обновлений (установите ноль чтобы выключить)" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Автоматическое резервное копирование" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "Включить автоматическое резервное копирование базы данных и медиа-файлов" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Интервал резервного копирования" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "Укажите количество дней между событиями автоматического резервного копирования" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "Интервал удаления задачи" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "Результаты фоновых задач будут удалены после указанного количества дней" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "Интервал удаления журнала ошибок" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "Журналы ошибок будут удалены после указанного количества дней" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "Интервал удаления уведомления" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "Уведомления пользователя будут удалены после указанного количества дней" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Поддержка штрих-кодов" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "Включить поддержку сканера штрих-кодов в веб-интерфейсе" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "Задержка сканирования штрих-кода" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "Время задержки обработки штрих-кода" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "Поддержка веб-камер штрих-кодов" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "Разрешить сканирование штрих-кода через веб-камеру в браузере" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "Отображать данные штрих-кода в браузере в виде текста" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "Плагин генерации штрих-кода" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "Ревизия детали" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "Включить поле ревизии для элемента" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" -msgstr "" +msgstr "Разрешить удаление из заказа" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" -msgstr "" +msgstr "Разрешить удаление частей, которые используются в заказе" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" -msgstr "" +msgstr "Регулярное выражение IPN" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "Шаблон регулярного выражения для сопоставления IPN детали" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Разрешить повторяющиеся IPN" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "Разрешить нескольким элементам использовать один и тот же IPN" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "Разрешить редактирование IPN" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "Разрешить изменение значения IPN при редактировании детали" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Скопировать данные BOM детали" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "Копировать данные BOM по умолчанию при дублировании детали" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "Скопировать данные параметров детали" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "Копировать данных параметров по умолчанию при дублировании детали" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "Скопировать данные тестирования детали" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "Копировать данные тестирования по умолчанию при дублировании детали" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Скопировать параметры по шаблону категории" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "Копировать параметры по шаблону категории при создании детали" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Шаблон" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Производимая деталь" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Компонент" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Можно купить" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Можно продавать" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Детали продаются по умолчанию" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Виртуальная" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Детали являются виртуальными по умолчанию" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Показать Импорт в просмотре" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" -msgstr "" +msgstr "Отобразить мастер импорта на некоторых видах деталей" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Показывать связанные детали" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Отображать связанные детали для элемента" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Начальные данные о запасах" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" -msgstr "" +msgstr "Разрешить создание начального запаса при добавлении новой детали" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Исходные данные о поставщике" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" +msgstr "Разрешить создание исходных данных о поставщике при добавлении новой детали" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Формат отображения детали" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Формат для отображения имени детали" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "Значок раздела по умолчанию" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "Значок категории по умолчанию (пустой означает отсутствие значка)" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" -msgstr "" +msgstr "Принудительное применение единиц измерения параметров" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "Если введены единицы, значения параметра должны соответствовать указанным единицам измерения" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "Минимальные Цены Десятичные Значки" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "Макс. Цены десятичные знаки" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Использовать цены поставщика" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Изменить историю покупки" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" +msgstr "Ценообразование по историческим заказам на поставку отменяет различия в ценах поставщиков" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Использовать цены из складских позиций" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Использовать расценки из ручного ввода данных о запасах для расчета цен" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Возраст цен складских позиций" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Исключить складские позиции старше указанного количества дней с расчёта цен" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Использовать варианты цен" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Только Активные Варианты" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "Использовать только активные запчасти для расчета стоимости варианта" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "Интервал пересчета цен" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "Количество дней до автоматического обновления цены" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Внутренние цены" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Разрешить внутренние цены для частей" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Переопределение внутренней цены" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "При наличии внутренних цен переопределить ценовой диапазон" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Включить печать этикеток" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Включить печать этикеток из веб-интерфейса" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "Изображение меток DPI" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Разрешение DPI при создании файлов изображений для печати этикеток плагинов" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Включить отчеты" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Включить генерацию отчетов" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Режим отладки" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Генерировать отчеты в режиме отладки (вывод HTML)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "Журнал ошибок отчета" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "Журнал ошибок, которые возникают при создании отчетов" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Размер страницы" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Размер страницы по умолчанию для PDF отчетов" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Включить отчеты" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Включить генерацию отчетов" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Прикрепить отчеты о тестах" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "При печати отчета о тестировании приложить копию тестового отчета к соответствующему складской позиции" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" -msgstr "" +msgstr "Глобально уникальные серийные номера" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "Серийные номера для складских позиций должны быть уникальными глобально" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" -msgstr "" +msgstr "Автоматическое заполнение серийных номеров" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" -msgstr "" +msgstr "Автоматическое заполнение серийных номеров в формах" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" -msgstr "" +msgstr "Удалить исчерпанный запас" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" -msgstr "" +msgstr "Определяет поведение по умолчанию, когда складская позиция заканчивается" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" -msgstr "" +msgstr "Код партии Шаблона" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "Шаблон для создания кодов партии по умолчанию для складских позиций" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Срок годности Запасов" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" -msgstr "" +msgstr "Включить функцию истечения срока годности" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" -msgstr "" +msgstr "Использовать просроченные остатки в производстве" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" -msgstr "" +msgstr "Разрешить продажу просроченных запасов" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Время Залежалости Запасов" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "Количество дней перед тем как складская единица будет считаться просроченной" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "Разрешить использовать просроченные остатки в производстве" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" -msgstr "" +msgstr "Контроль за собственными запасами" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" -msgstr "" +msgstr "Разрешить владельцу контролировать расположение складов и номенклатуры" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" -msgstr "" +msgstr "Значок местоположения по умолчанию" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" -msgstr "" +msgstr "Значок местоположения склада по умолчанию (пустой означает отсутствие значка)" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "Показать установленные складские позиции" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "Отображать установленные складские позиции в складских таблицах" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" -msgstr "" +msgstr "Проверять спецификацию при установке изделий" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" +msgstr "Установленные единица хранения должны присутствовать в спецификации для родительской детали" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" -msgstr "" +msgstr "Разрешить передачу товара, отсутствующего на складе" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" +msgstr "Разрешить перемещение товаров, которых нет на складе, между складами" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Паттерн ссылки заказа на производство" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "Поле требуемого паттерна для создания ссылки заказа на производство" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" -msgstr "" +msgstr "Требуется ответственный владелец" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" +msgstr "Ответственный владелец должен быть назначен для каждого заказа" + +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" -msgstr "Включить заказы на возврат" - -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" -msgstr "" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" +msgstr "Запретить вывод сборки до тех пор, пока не пройдут все необходимые тесты" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" +#: common/models.py:1850 +msgid "Enable Return Orders" +msgstr "Включить заказы на возврат" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" -msgstr "" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" +msgstr "Включите функцию заказа на возврат в пользовательском интерфейсе" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" -msgstr "" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" +msgstr "Шаблон заказа на возврат товара" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" -msgstr "Редактировать завершенные заказы на покупку" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" +msgstr "Необходимый шаблон для создания поля «Возврат заказа»" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" +msgstr "Редактировать завершенные возвратные заказы" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" -msgstr "" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" +msgstr "Разрешить редактирование возвращенных заказов после их завершения" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" +msgstr "Шаблон заказа на возврат товара" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" -msgstr "" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" +msgstr "Необходимый шаблон для создания поля «Возврат заказа»" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" -msgstr "Включить SSO" - -#: common/models.py:1899 -msgid "Enable SSO on the login pages" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" -msgstr "Необходимо указать EMail" - -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" -msgstr "Написать дважды" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" +msgstr "Редактировать завершенные заказы на покупку" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1932 -msgid "Password twice" -msgstr "Пароль дважды" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" -msgstr "Разрешенные домены" +msgid "Automatically mark purchase orders as complete when all line items are received" +msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" -msgstr "" +#: common/models.py:1951 +msgid "Enable registration" +msgstr "Разрешить регистрацию" #: common/models.py:1952 -msgid "Enforce MFA" -msgstr "Принудительное MFA" +msgid "Enable self-registration for users on the login pages" +msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." -msgstr "Пользователи должны использовать многофакторную безопасность." +#: common/models.py:1957 +msgid "Enable SSO" +msgstr "Включить SSO" #: common/models.py:1958 -msgid "Check plugins on startup" -msgstr "Проверять плагины при запуске" - -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" -msgstr "" +msgid "Email required" +msgstr "Необходимо указать EMail" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "" + +#: common/models.py:2017 +msgid "Mail twice" +msgstr "Написать дважды" + +#: common/models.py:2018 +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" +msgstr "Пароль дважды" + +#: common/models.py:2024 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:2029 +msgid "Allowed domains" +msgstr "Разрешенные домены" + +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "" + +#: common/models.py:2037 +msgid "Group on signup" +msgstr "" + +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" + +#: common/models.py:2045 +msgid "Enforce MFA" +msgstr "Принудительное MFA" + +#: common/models.py:2046 +msgid "Users must use multifactor security." +msgstr "Пользователи должны использовать многофакторную безопасность." + +#: common/models.py:2051 +msgid "Check plugins on startup" +msgstr "Проверять плагины при запуске" + +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:2061 +msgid "Check for plugin updates" +msgstr "" + +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2018 +#: common/models.py:2111 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2026 +#: common/models.py:2119 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Исключить складские позиции во внешних местах хранения из инвентаризации" -#: common/models.py:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" -msgstr "" +msgstr "Автоматический период инвентаризации" -#: common/models.py:2034 +#: common/models.py:2127 msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "" +msgstr "Количество дней между автоматической записью запасов (установите нулевое значение для отключения)" -#: common/models.py:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" -msgstr "" +msgstr "Интервал удаления журнала ошибок" -#: common/models.py:2042 +#: common/models.py:2135 msgid "Stocktake reports will be deleted after specified number of days" -msgstr "" +msgstr "Журналы ошибок будут удалены после указанного количества дней" -#: common/models.py:2049 +#: common/models.py:2142 msgid "Display Users full names" -msgstr "" +msgstr "Показывать полные имена пользователей" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" -msgstr "" +msgstr "Отображать полные имена пользователей вместо логинов" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" -msgstr "" +msgstr "Включить данные тестовой станции" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" -msgstr "" +msgstr "Включить сбор данных с тестовой станции для получения результатов тестирования" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 msgid "Settings key (must be unique - case insensitive" -msgstr "" +msgstr "Ключ настроек (должен быть уникальным - не чувствителен к регистру)" -#: common/models.py:2111 +#: common/models.py:2204 msgid "Hide inactive parts" -msgstr "" +msgstr "Скрыть неактивные детали" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" -msgstr "" +msgstr "Скрывать неактивные части в результатах, отображаемых на главной странице," -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Показывать детали, на которые включены уведомления" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Показывать детали, на которые включены уведомления, на главной странице" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Показывать категории, на которые включены уведомления" -#: common/models.py:2126 +#: common/models.py:2219 msgid "Show subscribed part categories on the homepage" msgstr "Показывать категории, на которые включены уведомления, на главной странице" -#: common/models.py:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Показывать последние детали" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "Показывать последние детали на главной странице" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" -msgstr "" +msgstr "Показывать недопустимые спецификации" -#: common/models.py:2138 +#: common/models.py:2231 msgid "Show BOMs that await validation on the homepage" msgstr "Показывать BOMы, ожидающие проверки, на главной странице" -#: common/models.py:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "Показывать изменившиеся складские запасы" -#: common/models.py:2144 +#: common/models.py:2237 msgid "Show recently changed stock items on the homepage" msgstr "Показывать складские позиции с недавно изменившимися запасами на главной странице" -#: common/models.py:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Показывать низкие складские запасы" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "Показывать складские позиции с низкими запасами на главной странице" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "Показывать закончившиеся складские позиции" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "Показывать закончившиеся складские позиции на главной странице" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Показывать требуемые складские позиции" -#: common/models.py:2162 +#: common/models.py:2255 msgid "Show stock items needed for builds on the homepage" msgstr "Показывать требуемые для производства складские позиции на главной странице" -#: common/models.py:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "Показывать складские позиции с истекшим сроком годности" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "Показывать складские позиции с истёкшим сроком годности на главной странице" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Показывать залежалые складские позиции" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "Показывать складские позиции с истекающим сроком годности на главной странице" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Показывать незавершённые производства" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Показывать незавершённые производства на главной странице" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Показывать просроченные производства" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "Показывать просроченные производства на главной странице" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" -msgstr "" +msgstr "Показать невыполненные заказы" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" -msgstr "" +msgstr "Покажите невыполненные заказы на покупку на главной странице" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Показать просроченные заказы на производство" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" -msgstr "" +msgstr "Показывать просроченные сборки на главной странице" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" -msgstr "" +msgstr "Показать невыполненные заказы" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" -msgstr "" +msgstr "Покажите невыполненные заказы на покупку на главной странице" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Показать просроченные заказы на продажу" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" -msgstr "" +msgstr "Показывать просроченные заказы на покупку на главной странице" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2216 +#: common/models.py:2309 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Показывать новости" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "" -#: common/models.py:2229 +#: common/models.py:2322 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" +msgstr "Отображение PDF-этикетки в браузере вместо загрузки в виде файла" -#: common/models.py:2235 +#: common/models.py:2328 msgid "Default label printer" -msgstr "" +msgstr "Принтер этикетки по умолчанию" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" -msgstr "" +msgstr "Настроить принтер этикеток по умолчанию" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" -msgstr "" +msgstr "Отображение встроенного отчета" -#: common/models.py:2245 +#: common/models.py:2338 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" +msgstr "Отображение PDF-этикетки в браузере вместо загрузки в виде файла" -#: common/models.py:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Поиск Деталей" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" -msgstr "" +msgstr "Отображение деталей в окне предварительного просмотра поиска" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" -msgstr "" +msgstr "Поиск деталей поставщика" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" -msgstr "" +msgstr "Отображение деталей поставщика в окне предварительного просмотра поиска" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" -msgstr "" +msgstr "Новая деталь производителя" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" -msgstr "" +msgstr "Отображение деталей поставщика в окне предварительного просмотра поиска" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" -msgstr "" +msgstr "Скрыть неактивные детали" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" -msgstr "" +msgstr "Исключить неактивные детали из окна предварительного просмотра поиска" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" -msgstr "" +msgstr "Категории поиска" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" -msgstr "" +msgstr "Отображение деталей в окне предварительного просмотра поиска" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Поиск Запасов" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "Отображать складские позиции в окне предварительного просмотра поиска" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Скрыть недоступные складские позиции" -#: common/models.py:2289 +#: common/models.py:2382 msgid "Exclude stock items which are not available from the search preview window" msgstr "Исключить недоступные складские позиции из окна предварительного просмотра поиска" -#: common/models.py:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Поиск мест хранения" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" -msgstr "" +msgstr "Отображать места хранения в окне предварительного просмотра поиска" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Поиск компаний" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Поиск заказов на производство" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "Отображать заказы на производство в окне предварительного просмотра поиска" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" -msgstr "" +msgstr "Поиск заказов на покупку" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Поиск заказов на продажу" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "Поиск заказов на возврат" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "" -#: common/models.py:2357 +#: common/models.py:2450 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "Поиск по Regex" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Фиксированная панель навигации" -#: common/models.py:2388 +#: common/models.py:2481 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Формат даты" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Планирование деталей" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Инвентаризация детали" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" -msgstr "" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "" - -#: common/models.py:2435 -msgid "Default stock item template" -msgstr "Шаблон складской позиции по умолчанию" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "Шаблон метки складской позиции для автоматического выбора" - -#: common/models.py:2443 -msgid "Default stock location label template" -msgstr "" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "" - -#: common/models.py:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Пользователь" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Цена" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "Конечная точка" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "Токен" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "Токен для доступа" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Секрет" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "ID Сообщения" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "Хост" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Заголовок" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Тело" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "Работал над" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "Код" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Заголовок" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Ссылка" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Опубликовано" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Итого" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "Читать" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "Изображение" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "Файл изображения" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "Название единицы" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Символ" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Определение" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Вложения" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Файл не найден" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Отсутствует внешняя ссылка" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Выберите файл для вложения" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Комментарий" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "Полученные элементы" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "Запущен" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "Ожидающие задачи" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "Запланированные задания" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "Невыполненные Задачи" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "Код задачи" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "Уникальный ID задачи" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "Заблокировать" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "Время блокировки" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "Название задачи" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "Функция" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "Имя функции" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "Аргументы" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "Аргументы задачи" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Имя файла" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Пустой домен не допускается." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Недопустимое доменное имя: {domain}" @@ -3766,402 +4092,432 @@ msgstr "Детали импортированы" msgid "Previous Step" msgstr "Предыдущий шаг" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Компания" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Компании" + +#: company/models.py:117 msgid "Company description" msgstr "Описание компании" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "Описание компании" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "Сайт компании" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Телефон" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Контактный телефон" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "Контактный EMail" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Контакт" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Контактное лицо" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Ссылка на описание компании" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "покупатель" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Вы продаёте детали этой компании?" -#: company/models.py:171 -msgid "is supplier" -msgstr "поставщик" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Вы закупаете детали у этой компании?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "производитель" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Является ли компания производителем деталей?" -#: company/models.py:186 +#: company/models.py:189 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:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Адрес" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Адреса" + +#: company/models.py:372 msgid "Select company" msgstr "Выберите компанию" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "Заголовок адреса" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Строка 1" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "Адресная строка 1" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Строка 2" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "Адресная строка 2" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Почтовый индекс" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "Город/Регион" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "Регион/Область" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "Страна" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "Страна адреса" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "Записи отправления" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "Записи для курьера" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "Внутренние записи отправления" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "Записи отправления для внутреннего пользования" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" -msgstr "" +msgstr "Ссылка на адресную информацию (внешняя)" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Базовая деталь" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Выберите деталь" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Производитель" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Выберите производителя" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "Ссылка на сайт производителя" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "Описание детали производителя" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "Наименование параметра" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Значение" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Значение параметра" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Ед.изм" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Единицы измерения параметра" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Деталь поставщика" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 msgid "Linked manufacturer part must reference the same base part" -msgstr "" +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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Поставщик" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "Код поставщика" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Выберите производителя части" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "Ссылка на сайт поставщика" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" -msgstr "" +msgstr "Описание детали поставщика" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Запись" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "Упаковка детали" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "Кол-во в упаковке" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "множественные" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "Кратность заказа" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "Валюта по умолчанию для этого поставщика" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "Неактивный" @@ -4212,7 +4568,7 @@ msgstr "Удалить компанию" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "Изображение детали" @@ -4231,17 +4587,17 @@ msgstr "Скачать изображение по ссылке" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Покупатель" @@ -4249,19 +4605,12 @@ msgstr "Покупатель" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "Удалить Изображение" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "Загрузить Изображение" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "Скачать изображение" @@ -4298,7 +4647,7 @@ msgstr "Создать новую деталь поставщика" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Новая деталь поставщика" @@ -4311,7 +4660,7 @@ msgstr "Детали производителя" msgid "Create new manufacturer part" msgstr "Создать новую деталь производителя" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Новая деталь производителя" @@ -4325,7 +4674,7 @@ msgstr "Склад поставщика" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Новый заказ на закупку" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Заказать деталь" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Внутренняя деталь" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Параметры" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "Добавить параметр" @@ -4490,19 +4844,6 @@ msgstr "Назначенные складские позиции" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Заказать Деталь" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Новая складская позиция" @@ -4582,29 +4923,33 @@ msgstr "Информация о цене" msgid "Add Price Break" msgstr "Добавить разрыв цен" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" -msgstr "" +msgstr "Привязать штрихкод к части поставщика" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Складские позиции" @@ -4630,10 +4975,6 @@ msgstr "Покупатели" 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 "Новая компания" @@ -4642,54 +4983,234 @@ msgstr "Новая компания" msgid "Placed" msgstr "Размещены" -#: machine/machine_types/label_printer.py:218 -msgid "Copies" +#: importer/mixins.py:263 +msgid "Invalid export format" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "Столбцы" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "Сопоставление столбцов должно быть связано с корректным сеансом импорта" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "Номер строки" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "Данные" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "Ошибки" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "Корректный" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "Строки" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "Инициализация" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 +msgid "Copies" +msgstr "Копии" + +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" -msgstr "" +msgstr "Подключен" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Неизвестно" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" -msgstr "" +msgstr "Печать" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" -msgstr "" +msgstr "Расположение принтера" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" #: machine/models.py:25 msgid "Name of machine" -msgstr "" +msgstr "Имя машины" #: machine/models.py:29 msgid "Machine Type" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Общая стоимость" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Статсу заказа" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "Имеет цену" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Заказ" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "Заказ на возврат" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "Валюта Заказа" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,9 +5347,9 @@ msgstr "Описание заказа (дополнительно)" msgid "Select project code for this order" msgstr "Выберите код проекта для этого заказа" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" -msgstr "" +msgstr "Ссылка на внешнюю страницу" #: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Ссылка на заказ" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "получил" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Дата создания" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "Компания, которой детали продаются" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Дата отгрузки" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "Отправлено" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Количество" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "Записи о позиции" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "Описание позиции (необязательно)" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "Контекст" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "Дополнительный контекст для этой строки" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "Цена за единицу" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "удалено" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "Деталь поставщика" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Получено" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Закупочная цена" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Цена последней продажи" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "Дата отправления" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "Дата доставки" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "Проверн" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "Отправление" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "Номер отправления" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "Номер отслеживания" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "Информация об отслеживании доставки" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "Номер счета" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "Отправка не имеет зарезервированных складских позиций" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "Складская позиция не была назначена" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "Строка" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Элемент" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "Выберите складскую позицию для резервирования" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "Укажите резервируемое количество" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "Выберите позицию, возвращаемую от клиента" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "Дата получения" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Результат" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "Валюта цены закупки" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "Внутренний код детали" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Потерян" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Возвращено" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Выполняется" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Возврат" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Починить" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Заменить" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Возврат" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Отклонить" @@ -5426,87 +5987,93 @@ 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Отменить заказ" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "Оформить Заказа" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 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 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Завершить заказ" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Описание заказа" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Не завершен" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Создан" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "Дублировать выбранное" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Удалить строку" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "Сведения о заказе" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "Отправить" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "Ожидающие отправления" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Действия" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "Код детали" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Наименование детали" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Описание детали" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Ревизия" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Ключевые слова" @@ -5815,7 +6369,8 @@ msgstr "Изображение Детали" msgid "Category ID" msgstr "Код категории" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "Название категории" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Разновидность" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Минимальный запас" @@ -5839,169 +6394,183 @@ msgstr "Минимальный запас" msgid "Used In" msgstr "Используется в" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "Производится" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "ID родителя" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "Имя родителя" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "Путь к категории" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Детали" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "Уровень BOM" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "ID Элемента BOM" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "Родительский IPN" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "IPN детали" +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "Остатки произведенные заказом на производство" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "Остатки требуемые для заказов на производство" -#: part/api.py:887 -msgid "Valid" -msgstr "Корректный" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "Необходимо выбрать эту опцию" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Категория" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Место хранения по умолчанию" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Общий запас" @@ -6010,1042 +6579,1144 @@ msgstr "Общий запас" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Категория детали" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Категория детали" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Место хранения по умолчанию для деталей этой категории" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Структура" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Детали не могут быть непосредственно отнесены к структурной категории, но могут быть отнесены к дочерним категориям." -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Ключевые слова по умолчанию" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "Ключевые слова по умолчанию для деталей этой категории" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "Иконка" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "Иконка (необязательно)" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "Складская позиция с этим серийным номером уже существует" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 -msgid "Part with this Name, IPN and Revision already exists." +#: part/models.py:925 +msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:935 +msgid "Part with this Name, IPN and Revision already exists." +msgstr "Часть с таким именем, IPN и ревизией уже существует." + +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном?" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "Описание детали (необязательно)" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "Категория" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "Внутренний код детали" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "Ревизия или серийный номер детали" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "Поставщик по умолчанию" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "Срок действия по умолчанию" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "Единицы измерения этой детали" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Эта деталь активна?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "Контрольная сумма BOM" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "BOM проверил" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "Дата проверки BOM" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Создатель" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "Последняя инвентаризация" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "Количество Элементов" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Дата" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "Дополнительные Записи" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "Отчет" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "Количество Деталей" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 +#: part/models.py:3398 +msgid "Part Sale Price Break" +msgstr "" + +#: part/models.py:3510 +msgid "Part Test Template" +msgstr "" + +#: part/models.py:3536 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3490 part/models.py:3654 +#: part/models.py:3557 part/models.py:3726 msgid "Choices must be unique" msgstr "" -#: part/models.py:3501 +#: part/models.py:3568 msgid "Test templates can only be created for trackable parts" msgstr "Шаблоны тестирования могут быть созданы только для отслеживаемых деталей" -#: part/models.py:3512 +#: part/models.py:3579 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3529 templates/js/translated/part.js:2880 +#: part/models.py:3596 templates/js/translated/part.js:2895 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3530 +#: part/models.py:3597 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3536 +#: part/models.py:3603 msgid "Test Key" msgstr "" -#: part/models.py:3537 +#: part/models.py:3604 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3544 +#: part/models.py:3611 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3545 +#: part/models.py:3612 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 msgid "Enabled" msgstr "Включено" -#: part/models.py:3549 +#: part/models.py:3616 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 msgid "Required" msgstr "Требуется" -#: part/models.py:3555 +#: part/models.py:3622 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3560 templates/js/translated/part.js:2917 +#: part/models.py:3627 templates/js/translated/part.js:2932 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3561 +#: part/models.py:3628 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3566 templates/js/translated/part.js:2924 +#: part/models.py:3633 templates/js/translated/part.js:2939 msgid "Requires Attachment" msgstr "" -#: part/models.py:3568 +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "Варианты" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "Название параметра" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 -msgid "Parameter description" +msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "Название параметра" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 +msgid "Parameter description" +msgstr "Описание параметра" + +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "Чекбокс" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "Родительская деталь" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Шаблон параметра" -#: part/models.py:3847 -msgid "Data" -msgstr "Данные" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "Значение Параметра" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Значение по умолчанию" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "Код или наименование детали" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "Значение IPN" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "Уровень" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "Уровень BOM" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник. (она не отслеживается в заказах на производство)" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Перерасход" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Расчетное количество перерасходов производства (абсолютное или процентное)" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "Записи о позиции BOM" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Проверен" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "Разрешить разновидности" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Складские позиции для разновидностей деталей могут быть использованы для этой позиции BOM" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "Часть 1" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "Часть 2" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "Выберите связанную часть" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Подкатегории" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" -msgstr "" +msgstr "Результаты" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "Не выбрана ни одна деталь" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "Выберите категорию" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Скопировать параметры" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "Код производителя" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" -#: part/serializers.py:843 +#: part/serializers.py:906 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:909 msgid "Variant Stock" msgstr "" -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:877 +#: part/serializers.py:940 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:883 templates/js/translated/part.js:102 +#: part/serializers.py:946 templates/js/translated/part.js:103 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:884 +#: part/serializers.py:947 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:890 +#: part/serializers.py:953 msgid "Supplier Information" msgstr "" -#: part/serializers.py:891 +#: part/serializers.py:954 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:899 +#: part/serializers.py:962 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:900 +#: part/serializers.py:963 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:905 +#: part/serializers.py:968 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:906 +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "Исключить складские позиции в внешних местах хранения" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "Обновить детали" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Можно произвести" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" -msgstr "" +msgstr "Пропустить некорректные строки" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "Подходящая деталь не найдена" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "Некорректное количество" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "Общее количество" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "Выполнить инвентаризацию для этой части категории" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "Вы подписаны на уведомления для данной категории" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "Включить уведомления для данной категории" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "Действия с категорией" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Редактировать категорию" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Редактировать категорию" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Удалить категорию" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Удалить категорию" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "Категория детали верхнего уровня" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Детали (включая подкатегории)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "Создать новую деталь" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Новая деталь" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Параметры детали" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "Создать новую категорию деталей" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Новая категория" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "Инвентаризация" @@ -7209,101 +7880,105 @@ msgstr "Шаблоны тестирования детали" msgid "Add Test Template" msgstr "Добавить шаблон тестирования" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "Записи Детали" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "Разновидности детали" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "Создать новую разновидность" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "Новая разновидность" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "Связанные детали" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "Добавить Связанные" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "Экспорт" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Экспорт BOM" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "Печать отчета о BOM" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "Действия с BOM" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "Загрузить BOM" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "Проверить BOM" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Добавить элемент BOM" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "Производимые детали" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "Производства детали" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Резервы заказа на производство" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "Поставщики" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "Связанная деталь" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "Добавить связанную деталь" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Выбрать формат файла" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Печать этикетки" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Действия со складом" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "Действия с деталью" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "Показать описание детали" @@ -7447,51 +8122,47 @@ msgstr "Зарезервировано заказами на производс 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "Минимальный складской запас" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Диапазон цен" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "Последний Серийный Номер" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "QR-код детали" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "Рассчитать" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "Скрыть описание детали" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Склад" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "Последнее обновление" @@ -7643,7 +8314,7 @@ msgstr "" #: part/templates/part/prices.html:164 msgid "Price range data is not available for this part." -msgstr "" +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 @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "Обновить цены" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Нет запасов" @@ -7749,7 +8420,7 @@ msgstr "Изображение детали не найдено" msgid "Part Pricing" msgstr "Цена Детали" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Действие не указано" msgid "No matching action found" msgstr "Соответствующее действие не найдено" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Не найдено совпадений для данных штрих-кода" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Найдено совпадение по штрих-коду" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "Штрих-код не соответствует существующим складским позициям" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "Складская позиция не соответствует позиции" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "Складская позиция зарезервирована заказом на продажу" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "Режим отладки" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "Пропустить Этикетки" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "Граница" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "Альбомная" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "Установлено" @@ -8205,7 +8918,7 @@ msgstr "Встроенный плагин" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "Метод" msgid "No author found" msgstr "Автор не найден" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,149 +9106,149 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "Правовая информация" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "Письмо" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Название шаблона" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" -msgstr "" +msgstr "Описание шаблона" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" -msgstr "" +msgstr "Номер ревизии (автоматически)" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Шаблон имени файла" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Фильтры" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Ширина [мм]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Высота [мм]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "Прогресс" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 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 "" +msgid "Output File" +msgstr "Выходной файл" -#: report/models.py:475 +#: report/models.py:465 report/models.py:488 +msgid "Generated output file" +msgstr "Сгенерированный выходной файл" + +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "Сниппет" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" -msgstr "" +msgstr "Описание файла сниппета" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "Объект" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" -msgstr "" +msgstr "Описание медиафайла" #: report/serializers.py:91 msgid "Select report template" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Цена за Единицу" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "Результаты тестирования" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "Тестирование" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "Результат" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "Прошел" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "Провален" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "Нет результата" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Серийный номер" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "Путь места хранения" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "Код складской позиции" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "Код статуса" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "Код детали поставщика" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "ID Поставщика" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "Имя поставщика" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "ID Клиента" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Установлено в" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "Код производства" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "ID заказа на продажу" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "Требуется рецензия" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "Истекает" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "Древо Деталей" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Залежалый" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "Необходимо указать количество" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Владелец" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "Выберите владельца" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Внешний" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Тип Места Хранения" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Вы не можете сделать это место хранение структурным, потому, что некоторые складские позиции уже находятся в нем!" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "Складские позиции не могут находиться в структурных местах хранения!" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "Складская позиция не может быть создана для виртуальных деталей" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "Элемент должен иметь ссылку на производство, если is_building=True" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "Ссылка на производство не указывает на тот же элемент" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "Складская позиция" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "Базовая деталь" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "Выберите соответствующего поставщика детали для этой складской позиции" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "Где находиться эта складская позиция?" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "Количество на складе" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "Исходное производство" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "Производства для этой складской позиции" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Поглощен" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "Заказ на производство, который поглотил эту складскую позицию" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "Заказ на закупку для этой складской позиции" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Дата истечения срока годности для складской позиции. Остатки будут считаться просроченными после этой даты" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "Удалить при обнулении" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "Удалить эту складскую позицию при обнулении складского запаса" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "Серийные номера уже существуют" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "Складская позиция была назначена заказу на продажу" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "Складская позиция установлена в другую деталь" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "Складская позиция содержит другие детали" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "Складская позиция была назначена покупателю" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "Складская позиция в производстве" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь поставщика" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "Результат тестирования" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "Результат тестирования" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "Записи Тестирования" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Родительский элемент" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Просрочен" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Дочерние элементы" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "Введите количество складских позиций для сериализации" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "Введите серийные номера для новых элементов" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "Опциональное поле записей" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "Выберите складскую позицию для установки" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "Добавить запись к транзакции (необязательно)" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "Складская позиция недоступна" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "Выберите деталь в которую будет преобразована складская позиция" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "Выберите складские позиции для изменения статуса" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "Не выбрано ни одной складской позиции" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Места хранения" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "Элемент зарезервирован для заказа на производство" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "Покупатель для назначения складских позиций" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "Записи о назначенных запасах" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "Необходимо предоставить список складских позиций" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "Записи о слияниях запасов" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "Разрешить слияние складских позиций с различными поставщиками" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "Разрешить слияние складских позиций с различными статусами" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "Необходимо предоставить как минимум 2 складские позиции" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" -msgstr "" +msgstr "Нет изменений" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "Статус складской позиции" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "Записи о перемещениях запасов" @@ -9375,7 +10117,7 @@ msgstr "Карантин" msgid "Legacy stock tracking entry" msgstr "Отслеживание устаревших запасов" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Складская позиция создана" @@ -9431,7 +10173,7 @@ msgstr "Отделить от родительского элемента" msgid "Split child item" msgstr "Разбить дочерний элемент" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Объединенные складские позиции" @@ -9451,7 +10193,7 @@ msgstr "Продукция заказа на производство завер msgid "Build order output rejected" msgstr "Продукция заказа на производство отклонена" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Поглощен заказом на производство" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "Удалить данные тестирования" @@ -9512,15 +10254,15 @@ msgstr "Записи складской позиции" msgid "Installed Stock Items" msgstr "Установленные складские позиции" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "Установить складскую позицию" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "Удалить все результаты тестирования для этой складской позиции" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "Добавить Результат Тестирования" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "Сканировать в место хранения" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "Действия печати" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "Установить запасы" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "Добавить Остатки" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "Удалить запасы" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "Сериализовать запасы" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "Переместить запасы" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Вы не в списке владельцев этого элемента. Складская позиция не может быть отредактирована." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "Только для чтения" @@ -9669,12 +10407,8 @@ msgstr "следующая страница" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Место хранения не установлено" @@ -9691,11 +10425,6 @@ msgstr "Эта складская позиция не прошла требуе 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "Преобразовать складскую позицию" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "Вернуть на склад" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "Сканировать складские позиции в это место хранения" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "Сканировать в складские позиции" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "Действия с местом хранения" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Редактировать место хранения" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Удалить место хранения" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "Склад верхнего уровня" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "Ответственный за место хранения" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "Создать новое место хранения" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Новое место хранения" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "места хранения" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "Запас" 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 "Доступ запрещён" @@ -10010,7 +10735,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:89 #: templates/js/translated/notification.js:85 msgid "Delete Notification" -msgstr "" +msgstr "Удалить уведомление" #: templates/InvenTree/notifications/sidebar.html:8 msgid "Inbox" @@ -10060,7 +10785,7 @@ msgstr "Регистрация" #: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" -msgstr "" +msgstr "Единый вход" #: templates/InvenTree/settings/mixins/settings.html:5 #: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "Настройки деталей" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "Импорт деталей" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "Импорт детали" @@ -10171,11 +10896,11 @@ msgstr "Сообщения" #: templates/InvenTree/settings/plugin_settings.html:16 msgid "Plugin information" -msgstr "" +msgstr "Информация о плагине" #: templates/InvenTree/settings/plugin_settings.html:47 msgid "no version information supplied" -msgstr "" +msgstr "нет информации о версии" #: templates/InvenTree/settings/plugin_settings.html:61 msgid "License" @@ -10187,15 +10912,15 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:76 msgid "Package information" -msgstr "" +msgstr "Информация о пакете" #: templates/InvenTree/settings/plugin_settings.html:82 msgid "Installation method" -msgstr "" +msgstr "Способ установки" #: templates/InvenTree/settings/plugin_settings.html:85 msgid "This plugin was installed as a package" -msgstr "" +msgstr "Этот плагин был установлен как пакет" #: templates/InvenTree/settings/plugin_settings.html:87 msgid "This plugin was found in a local server path" @@ -10203,11 +10928,11 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:93 msgid "Installation path" -msgstr "" +msgstr "Путь установки" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "Встроенный" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "Образец" @@ -10317,12 +11042,12 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" -msgstr "" +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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Удалить" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "группа" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "Редактировать шаблон" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "Удалить шаблон" @@ -10375,40 +11100,40 @@ msgstr "Удалить шаблон" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" -msgstr "" +msgstr "Типы местоположения склада не найдены" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "Количество мест хранения" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "Главная страница" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "Настройки учётной записи" 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 "Следующие адреса электронной почты связаны с вашей учётной записью:" @@ -10543,7 +11256,7 @@ msgstr "" #: templates/InvenTree/settings/user.html:135 msgid "TOTP" -msgstr "" +msgstr "TOTP" #: templates/InvenTree/settings/user.html:141 msgid "Static" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "Подтверждение адреса электронной почт msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Пожалуйста, подтвердите, что %(email)s является адресом электронной почты пользователя %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Подтвердить" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Требуемое кол-во" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "Минимальное количество" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "Нет ответа" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "Редактировать вложения" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "Дата загрузки" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "Редактировать вложения" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Сканировать штрихкод" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "Отсоединить" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "Удалить складскую позицию" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "Сканировать складские позиции в место хранения" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "Сканировать штрих-код складской позиции и проверить в этом месте хранения" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "Отметить" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "Складская позиция уже в этом месте хранения" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "Добавленная складская позиция" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "Штрих-код не совпадает с допустимыми складскими позициями" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "Расходник" @@ -11456,7 +12169,7 @@ msgstr "Просмотр BOM" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "Необходимая деталь" @@ -11464,120 +12177,120 @@ msgstr "Необходимая деталь" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "Редактировать заказ на производство" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "Складские позиции были зарезервированы для этого заказа на производство" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "У этого заказа на производство осталась незавершенная продукция" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "Этот заказ на производство не может быть завершен, так как имеет незавершенный выход деталей" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "BOM содержит отслеживаемые детали" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "Продукция должна создаваться индивидуально" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "Ведите серийные номера для создания нескольких единиц продукции" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "Создать Выход Продукции" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "Зарезервировать складские позиции для этой продукции" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "Отменить резерв этой продукции" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "Завершить продукцию" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "Списать продукцию" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "Удалить продукцию" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "Вы уверены, что хотите отменить резерв выбранных складских позиций из этого производства?" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "Отменить резерв складских позиций" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "Выбрать Продукцию" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "Как минимум одна единица продукции должна быть выбрана" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "Продукция" @@ -11601,231 +12314,263 @@ msgstr "Зарезервированная складская позиция б msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "Списать Продукцию" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "Выбранная продукция будет удалена" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "Продукция будет полностью удалена" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "Зарезервированные складские позиции были возвращены на склад" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "Удалить Продукцию" -#: templates/js/translated/build.js:960 +#: templates/js/translated/build.js:959 +msgid "Delete allocations" +msgstr "" + +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" +msgstr "" + +#: templates/js/translated/build.js:989 +msgid "No allocated stock" +msgstr "" + +#: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 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 +#: templates/js/translated/build.js:1178 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1027 +#: templates/js/translated/build.js:1200 msgid "Complete outputs" msgstr "Завершенная продукция" -#: templates/js/translated/build.js:1045 +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "Списанная продукция" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "Удаленная продукция" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "продукция" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "продукция" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "Действия с продукцией" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "Активная продукция не найдена" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "Зарезервированные Строки" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "Требуемые тесты" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "Зарезервировать складские позиции для этого заказа на производства" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "Нет совпадающих складских позиций" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Складские позиции будут автоматически зарезервированы на этот заказ на производстве, в соответствии с указанными рекомендациями" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "Зарезервировать Складские Позиции" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "Выбрать" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "Редактировать Резерв" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "строка производства" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "позиция производства" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "Отслеживаемая деталь" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "Количество единиц" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "Расходник" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "Отслеживаемый элемент" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "Запасы производства" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "Заказать запасы" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "Зарезервировать Остатки" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "Заказать детали" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "Деталь-шаблон" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "Производимая Деталь" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "Редактировать параметр" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "Удалить параметр" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "Редактировать параметр" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "Удалить параметр" @@ -12070,119 +12815,119 @@ msgstr "Изменить разрыв цен" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" -msgstr "" +msgstr "да" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "Выбрать фильтр" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "Печать этикеток" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "Распечатать отчеты" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "Добавить новый фильтр" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Форма содержит ошибки" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "Результаты не найдены" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "Поиск" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "Очистить ввод" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "Столбец Файла" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "Имя Поля" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "Выбрать столбцы" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "ДА" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "НЕТ" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" -msgstr "" +msgstr "Да" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "Выбрать элементы" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Подтвердить" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "Заголовок Формы" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "Принять" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "Загрузка данных" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "Новости не найдены" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "Код" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "Экспорт заказа" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "Дублировать Строку" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "Редактировать Строку" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "Удалить Строку" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "Дублировать Строку" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "Редактировать строку" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "Удалить строку" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "Атрибуты детали" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" -msgstr "" +msgstr "Настройки создания детали" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "Добавить категорию детали" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "Создать Деталь" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "Редактировать Деталь" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "Деталь изменена" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "Активная Деталь" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "Любые складские позиции для этой запчасти будут удалены" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "Удалить Деталь" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "Низкий запас" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "Требуется" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "Ед. Изм." -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "Виртуальная Деталь" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "Деталь с подпиской" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "Продаваемая деталь" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "Детали не найдены" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "Указать категорию" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "деталь" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "детали" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "Нет категории" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "Отобразить списком" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "Отобразить сеткой" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "Отобразить древом" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "Категория с подпиской" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "результаты" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" -msgstr "Редактировать результаты тестирования" - -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2953 +msgid "Delete test template" +msgstr "" + +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "Приблизительный" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "Максимальное количество" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "Статус Запасов" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "Добавить штрихкод" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "Удалить штрихкод" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "Выберите место хранения" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "Добавить код партии" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "Серийные номера" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "Код Заказа" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "Сканировать штрихкод входящего элемента (не должен совпадать с любой существующей складской позицией)" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "Удалить позицию" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "Удалить позицию" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "Некорректный клиент" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "Удалить результат" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "Сериализировать складскую позицию" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "Действия со складской позиции в этом месте хранения" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "Введите начальное количество для этой складской позиции" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "Складская позиция дублирована" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "Дублировать складскую позицию" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "Вы уверены, что хотите удалить эту складскую позицию?" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "Удалить складскую позицию" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "Редактировать складскую позицию" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" -msgstr "" +msgstr "Создать еще один элемент после этого" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "Некоторые данные будут потеряны при слиянии складских позиций" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "Подтвердить слияние складских позиций" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "Объединить складские позиции" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "Переместить запасы" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "Переместить" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "Установить запасы" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "Количество" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "Удалить запасы" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "Взять" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "Добавить Запасы" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Добавить" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "Удалить запасы" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "Выбрать складские позиции" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "Выбрать как минимум одну складскую позицию" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" -msgstr "" +msgstr "Подтвердите изменение запасов" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "ПРОШЕЛ" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "ПРОВАЛЕН" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "НЕТ РЕЗУЛЬТАТА" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "Тест пройден" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "Добавить Результат Тестирования" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "Редактировать результаты тестирования" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "Данные Тестирования" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "В производстве" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "Установленные складские позиции" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" -msgstr "" +msgstr "Место хранения не установлено" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "Изменить статус запасов" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "Объединить Запасы" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "Удалить запасы" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "складские позиции" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "Действия с Запасами" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "Складская позиция в производстве" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "Складская позиция зарезервирована заказом на продажу" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "Складская позиция была назначена покупателю" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "Сериализированная складская позиция была зарезервирована " -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "Складские позиции были полностью зарезервированы" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "Складские позиции были частично зарезервированы" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "Складская позиция была установлена в другую деталь" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "Складская позиция была поглощена заказом на продажу" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "Складская позиция была просрочена" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "Складская позиция будет просрочена в скором времени" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "Складская позиция была отклонена" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "Складская позиция была утеряна" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "Складская позиция была уничтожена" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "Истощен" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "Кол-во Запаса" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "Нет складских позиций соответствующих запросу" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "места хранения" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "Подробности" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "Нет изменений" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "Складская позиция не существует" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "Добавлено" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "Удалено" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "Снять складскую позицию" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "Выберите складскую позицию для съема" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "Установить другую складскую позицию в эту деталь" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "Складские позиции могут быть установлены, только если отвечают следующим критериям" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "Складская позиция ссылается на деталь, чья спецификация является этой складской позицией" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "Складская позиция сейчас доступна на складе" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "Складская позиция не установлена в другую деталь" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "Складская позиция отслеживается либо по коду партии, либо серийному номеру" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "Выберите одну или более складских позиций" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "Выбранные складские позиции" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "Изменить статус запасов" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "Назначено мне" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" -msgstr "" +msgstr "Включая подкатегории" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "Подписан" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "Код партии" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "Активная Деталь" @@ -13965,52 +14743,64 @@ msgstr "Тест Пройден" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "Статус Производства" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" -msgstr "" +msgstr "Включить детали в подкатегориях" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "Доступный запас" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "Имеет Ед. Изм." -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "Имеет IPN" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "В наличии" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "Можно купить" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "Имеет Варианты" @@ -14052,7 +14842,7 @@ msgstr "строк на страницу" #: templates/js/translated/tables.js:537 msgid "Showing all rows" -msgstr "" +msgstr "Отображение всех строк" #: templates/js/translated/tables.js:539 msgid "Showing" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "Переключить" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Столбцы" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "Все" @@ -14287,6 +15073,14 @@ msgstr "Настройки электронной почты" msgid "Email settings not configured" msgstr "Электронная почта не настроена" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Да" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "Отозван" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Права доступа" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Группа" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Вид" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Разрешение на просмотр элементов" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Разрешение на добавление элементов" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Изменить" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Разрешение на редактирование элементов" -#: users/models.py:413 +#: users/models.py:408 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 9e8fe41c3e..24b96476de 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 9bec0d6509..ac73d01f44 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API vmesnik ni najden" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Uporabnik nima dovoljenja pogleda tega modela" @@ -52,30 +52,34 @@ msgstr "Vnesena napačna količina ({exc})" msgid "Error details can be found in the admin panel" msgstr "Podrobnosti napake so vidne v pogledu administratorja" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Vnesi datum" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Zapiski" @@ -88,258 +92,270 @@ msgstr "Vrednost '{name}' ni v predpisanem formatu" msgid "Provided value does not match required pattern: " msgstr "Podana vrednost se ujema s predpisanim vzorcem: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Vnesite geslo" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Vnesite novo geslo" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Potrdite geslo" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Potrdite novo geslo" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Staro geslo" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Ponovnite e-pošto" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Potrdite e-pošto" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "E-pošti se morata ujemati" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Podana epošta ni veljavna." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Domena epošte ni podprta." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Registracija je onemogočena." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Podana napačna količina" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Prazno polje serijske številke" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Dvojna serijska številka" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Neveljavni doseg skupine: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Doseg skupine {group} presega dovoljene količine ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Nepravilno zaporedje skupine: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Serijske številke niso najdene" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Število unikatnih serijskih številk ({len(serials)}) se mora ujemati s količino ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Odstranite oznako HTML iz te vrednosti" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Napaka povezave" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Odziv serverja: napravilni status kode" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Pojavila se je izjema" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Odziv serverja: napačna dolžina vrednosti" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Prevelika velikost slike" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Prenos slike presegel največjo velikost" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Oddaljeni server vrnil prazen odziv" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Podani URL ni veljavna slikovna datoteka" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bolgarščina" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Češko" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Danščina" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Nemščina" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Grščina" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Angleščina" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Španščina" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Španščina (Mehiško)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Perzijsko" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finščina" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Francoščina" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebrejščina" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hindujščina" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Madžarščina" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italijanščina" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japonščina" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Korejščina" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "Latvijščina" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Nizozemščina" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norveščina" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Poljščina" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugalščina" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugalščina (Brazilsko)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Ruščina" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Slovaščina" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slovenščina" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Srbščina" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Švedščina" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Tajščina" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turščina" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamščina" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Kitajščina (poenostavljena)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Kitajščina (tradicionalno)" @@ -348,257 +364,165 @@ msgstr "Kitajščina (tradicionalno)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Prijavite se v aplikacijo" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-pošta" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Napaka pri izvajanju preverjanja vtičnika" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metapodatki morajo biti objekt tipa python dict" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Metapodatki vtičnika" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "Polje metapodatkov JSON za uporabo pri zunanjih vtičnikih" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Nepravilno nastavljen vzorec" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Nastavljen neprepoznan ključ formata" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Manjka obvezen ključ formata" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Referenčno polje ne sme biti prazno" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Referenca se mora ujemati s vzorcem" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Referenčna številka prevelika" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Manjka datoteka" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Manjka zunanja povezava" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Priloga" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Izberite prilogo" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Zunanja povezava" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Komentar" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Komentar datoteke" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "naloži datum" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Ime ne sme biti prazno" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Neveljavna mapa prilog" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Ime datoteke vsebuje neveljavni znak '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Datoteki manjka končnica" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Priloga s tem imenom že obstaja" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Napaka pri preimenovanju datoteke" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Podvojena imena ne morejo obstajati pod istim nadrejenim elementom" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Nedovoljena izbira" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "nadrejen" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Pot" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Markdown opombe (neobvezno)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Podatki čtrne kode" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Podatki črtne kode tretje osebe" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Oznaka črtne kode" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Enolična oznaka podatkov črtne kode" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Črtna koda že obstaja" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Napaka strežnika" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Zaznana napaka na strežniku." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Valuta" msgid "Select currency from available options" msgstr "Izberite valuto med razpoložljivimi možnostmi" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Nimate dovoljenja za spreminjanje vloge tega uporabnika." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Samo superuporabniki lahko ustvarijo nove uporabnike" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Vaš račun je bil ustvarjen." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Za prijavo uporabite funkcijo ponastavitve gesla" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Dobrodošli v InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Ime datoteke" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Neveljavna vrednost" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Podatki datoteke" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Izberite datoteke za naložiti" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Nepodprta vrsta datotek" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Datoteka je prevelika" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "V datoteki ni bilo najdenih stolpcev" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "V datoteki ni bilo njadenih vrstic" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Niso bile podane vrste s podatki" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Niso bili podani stolpci s podatki" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Manjka obvezni stolpec: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dvojni stolpec: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Oddaljena slika" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "Povezava do oddaljene slike" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Nadzor dela v ozadju neuspel" @@ -702,27 +679,27 @@ msgstr "Zaledje e-pošte ni nastavljeno" msgid "InvenTree system health checks failed" msgstr "Preverjanje zdravja sistema InvenTree neuspelo" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Neveljavna oznaka valute" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Prestara vrednost ne sme biti negativna" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Prestarost ne sme presegati 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Neveljavna vrednost za prestarost" @@ -750,62 +727,63 @@ msgstr "Sistemske informacije" msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Nalog izgradnje" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Nalog izgradnje" msgid "Build Orders" msgstr "Nalogi izgradnje" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Neveljavna izbira za nadrejeno izgradnjo" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referenca" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Nadrejena izgradnja" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Nalog izgradnje na katerega se ta izgradnaj nanaša" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Nalog izgradnje na katerega se ta izgradnaj nanaša" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Del" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Izberite del za izgradnjo" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Referenca dobavnica" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Dobavnica na katero se navezuje ta izgradnja" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Lokacija vira" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Ciljna lokacija" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Količina izgradenj" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Število postavk za izgradnjo" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Končane postavke" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Število postavk zaloge, ki so bile končane" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Datum ustvarjenja" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Rok dokončanja" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Datom končanja" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "dokončal" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Izdal" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Odgovoren" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Zunanja povezava" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog izgradnje {build} je dokončan" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Količina" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "V teku" @@ -1540,15 +1677,21 @@ msgstr "V teku" msgid "Production" msgstr "Proizvodnja" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Končano" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Uporabnik" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Povezava" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Priloga" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Manjka datoteka" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Manjka zunanja povezava" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Izberite prilogo" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Komentar" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Ime datoteke" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "Postavljeno" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Izgubljeno" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Vrnjeno" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "V teku" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "Dano v karanteno" msgid "Legacy stock tracking entry" msgstr "Vnos zaloge postavke" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Postavka zaloge ustvarjena" @@ -9431,7 +10173,7 @@ msgstr "Razdeljena od nadrejene postavke" msgid "Split child item" msgstr "Razdeljena podrejena postavka" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Združena zaloga postavk" @@ -9451,7 +10193,7 @@ msgstr "Nalog za izgradnjo končan" msgid "Build order output rejected" msgstr "Nalog za izgradnjo zavrnjen" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Porabljeno v nalogu za izgradnjo" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Izdelava" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 c8685ef38c..245d5ec527 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:48\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API krajnja tačka nije pronađena" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Korisnik nema dozvolu za pregled ovog modela" @@ -52,30 +52,34 @@ msgstr "Isporučena nevažeća količina ({exc})" msgid "Error details can be found in the admin panel" msgstr "Detalji o grešci se mogu naći u admin sekciji" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Unesite datum" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Napomene" @@ -88,258 +92,270 @@ msgstr "Vrednost '{name}' se ne pojavljuje u formatu obrasca" msgid "Provided value does not match required pattern: " msgstr "Navedena vrednost ne odgovara traženom obrascu: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Unesite lozinku" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Unesite novu lozinku" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Potvrdite lozinku" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Potvrdite novu lozinku" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Stara lozinka" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-pošta (ponovo)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Potvrda adrese e-pošte" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Svaki put morate upisati istu e-poštu." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Navedena primarna adresa e-pošte nije važeća." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Navedeni domen adrese e-pošte nije prihvaćen." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Registracija je onemogućena." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Isporučena nevažeća količina" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Serijski broj nije popunjen" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Dupliciraj serijski broj" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Nevažeći raspon grupe: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Raspon grupe {group} prelazi dozvoljenu količinu ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Nevažeća sekvenca grupe: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Nisu pronađeni serijski brojevi" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Broj jedinstvenih serijskih brojeva ({len(serials)}) mora odgovarati količini ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Uklonite HTML oznake iz ove vrednosti" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Greška u povezivanju" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Server je odgovorio nevažećim statusnim kodom" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Došlo je do izuzetka" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Server je odgovorio nevažećom vrednošću dužina sadržaja" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Veličina slike je prevelika" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Preuzimanje slike premašilo je maksimalnu veličinu" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Udaljeni server vratio je prazan odgovor" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Navedeni URL nije važeća slikovna datoteka" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bugarski" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Češki" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Danski" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Nemački" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Grčki" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Engleski" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Španski" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Španski (Meksiko)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Persijski" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finski" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Francuski" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Jevrejski" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hindu" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Mađarski" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italijanski" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japanski" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Korejski" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Holandski" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norveški" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Poljski" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugalski" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugalski (Brazil)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Ruski" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slovenski" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Srpski" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Švedski" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Tajlandski" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turski" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vijetnamski" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Kineski (Uprošćeni)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Kineski (Tradicionalni)" @@ -348,257 +364,165 @@ msgstr "Kineski (Tradicionalni)" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-Pošta" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metapodaci moraju biti \"python dict\" objekat" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Metapodaci dodatka" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "Polje metapodataka JSON, za korištenje eksternih dodataka" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Neispravno formatiran obrazac" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Naveden je ključ nepoznatog formata" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Nedostaje potreban ključ formata" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Polje za reference ne može biti prazno" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Referenca mora odgovarati traženom obrascu" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Broj reference je predugačak" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Nedostaje datoteka" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Nedostaje eksterni link" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Prilog" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Izaberite datoteku za prilog" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Link za eksterni URL" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Komentar" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Datoteka komentara" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "dadajte datoteku" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Ime datoteke ne sme biti prazno" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Direktorijum nevažećih datoteka" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Ime datoteke sadrži neprihvatljivi karakter '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Imenu datoteke nedostaje ekstenzija" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Prilog s ovim nazivom datoteke već postoji" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Greška pri preimenovanju datoteke" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Dvostruka imena ne mogu postojati pod istom nadredjenom grupom" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Nevažeći izvor" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Opis (Opciono)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "nadređeni" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Putanja" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Zabeleške (Opciono)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Podaci sa barkoda" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Podaci sa barkoda trećih lica" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Heš barkoda" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Jedinstveni hash barkoda" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Postojeći barkod pronađen" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Greška servera" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Server je zabležio grešku." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Valuta" msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Nemate dozvolu za promenu ove korisničke uloge." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Samo superkorisnici mogu kreirati nove korisnike" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Ime datoteke" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Nevažeća vrednost" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Datoteka" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Odaberite datoteku za učitavanje" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Nije podržan tip datoteke" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Prevelika datoteka" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Nisu pronađene kolone podataka u datoteci" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Nisu pronađeni redovi podataka u datoteci" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Nisu navedeni redovi podataka" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Nisu obezbeđene kolone podataka" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Nedostaje potrebna kolona: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplicirana kolona: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Udaljena slika" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL udaljene slike" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Provera pozadinskog radnika nije uspjela" @@ -702,27 +679,27 @@ msgstr "Pozadina e-pošte nije konfigurirana" msgid "InvenTree system health checks failed" msgstr "Provere integriteta sistema InvenTree nije uspela" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Nalog za izradu" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Nalog za izradu" msgid "Build Orders" msgstr "Nalozi za izradu" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Nevažeći izbor za nadređenu verziju" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "Deo u nalogu za izradu ne može se izmeniti" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referenca" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Kratak opis izrade (nije obavezno)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Link za eksterni URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Na čekanju" @@ -1540,15 +1677,21 @@ msgstr "Na čekanju" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Gotovo" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Korisnik" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Prilog" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Nedostaje datoteka" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Nedostaje eksterni link" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Izaberite datoteku za prilog" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Komentar" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Ime datoteke" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "Postavljen" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "Izgubljeno" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Vraćeno" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "U progresu" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "U karantinu" msgid "Legacy stock tracking entry" msgstr "Nasleđeni unos za praćenje zaliha" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Stavka na zalihi stvorena" @@ -9431,7 +10173,7 @@ msgstr "Odvoj od nadređene stavke" msgid "Split child item" msgstr "Podeli podređenu stavku" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Spojene stavke zaliha" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 2947a99cfc..efc3e18b9c 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-12 23:00\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API-slutpunkt hittades inte" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Användaren har inte behörighet att se denna modell" @@ -52,30 +52,34 @@ msgstr "Ogiltigt antal angivet ({exc})" msgid "Error details can be found in the admin panel" msgstr "Information om felet finns under Error i adminpanelen" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Ange datum" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Anteckningar" @@ -88,258 +92,270 @@ msgstr "Värdet '{name}' visas inte i mönsterformat" msgid "Provided value does not match required pattern: " msgstr "Det angivna värdet matchar inte det obligatoriska mönstret: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Ange lösenord" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Ange nytt lösenord" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Bekräfta lösenord" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Bekräfta nytt lösenord" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Tidigare lösenord" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-post (igen)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Bekräfta e-postadress" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Du måste ange samma e-post varje gång." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Den angivna primära e-postadressen är inte giltig." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Den angivna e-postdomänen är inte godkänd." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Registrering är stängd." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Tom serienummersträng" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Serienummret finns redan" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Inga serienummer hittades" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Ta bort HTML-taggar från detta värde" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Anslutningsfel" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Servern svarade med ogiltig statuskod" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Undantag inträffade" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Servern svarade med ogiltigt innehållslängdsvärde" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Bilden är för stor" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Nedladdning av bilder överskred maximal storlek" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Fjärrservern returnerade tomt svar" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Angiven URL är inte en giltig bildfil" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "Arabiska" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgariska" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Tjeckiska" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Danska" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Tyska" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Grekiska" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Engelska" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Spanska" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Spanska (Mexikanska)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsi / Persiska" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Finska" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Franska" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Hebreiska" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hindi" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Ungerska" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Italienska" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japanska" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Koreanska" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "Lettiska" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Nederländska" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norska" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polska" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portugisiska" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portugisiska (brasiliansk)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "Rumänska" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Ryska" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Slovakiska" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slovenska" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Serbiska" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Svenska" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Thailändska" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Turkiska" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "Ukrainska" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamesiska" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Kinesiska (Förenklad)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Kinesiska (Traditionell)" @@ -348,257 +364,165 @@ msgstr "Kinesiska (Traditionell)" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-postadress" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Felaktigt formaterat mönster" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Okänd formatnyckel angiven" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Obligatorisk formatnyckel saknas" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Textfältet kan inte lämnas tomt" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Referensen måste matcha obligatoriskt mönster" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Referensnumret är för stort" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Saknad fil" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Extern länk saknas" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Bilaga" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Välj fil att bifoga" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Länk till extern URL" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Kommentar" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Fil kommentar" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "uppladdningsdatum" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Filnamnet får inte vara tomt" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Ogiltig katalog för bilaga" - -#: InvenTree/models.py:665 -#, python-brace-format -msgid "Filename contains illegal character '{c}'" -msgstr "Filnamnet innehåller ogiltiga tecken '{c}'" - -#: InvenTree/models.py:668 -msgid "Filename missing extension" -msgstr "Filnamn saknar ändelse" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Det finns redan en bilaga med detta filnamn" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Fel vid namnbyte av fil" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Beskrivning" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "överordnad" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Sökväg" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Streckkodsdata" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Befintlig streckkod hittades" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Serverfel" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Valuta" msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Användarnamn" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Förnamn" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Efternamn" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Ditt konto har skapats." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Välkommen till InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Filnamn" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Ogiltigt värde" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Datafil" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Välj fil för uppladdning" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Filtypen stöds inte" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Filen är för stor" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Inga kolumner hittades i filen" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Inga rader hittades i filen" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Inga rader angivna" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Inga datakolumner har angetts" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Saknar obligatorisk kolumn: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplicerad kolumn: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL för fjärrbildsfil" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Kontroll av bakgrundsarbetare misslyckades" @@ -702,27 +679,27 @@ msgstr "Backend för e-post är inte konfigurerad" msgid "InvenTree system health checks failed" msgstr "InvenTree systemhälsokontroll misslyckades" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Okänd databas" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Överskott värde får inte vara negativt" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Överskott får inte överstiga 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Ogiltigt värde för överskott" @@ -750,62 +727,63 @@ msgstr "Systeminformation" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "Byggnationen måste avbrytas innan den kan tas bort" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Byggorder" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Byggorder" msgid "Build Orders" msgstr "Byggordrar" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Ogiltigt val för överordnad bygge" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Byggorderreferens" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referens" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Överordnat Bygge" -#: build/models.py:230 +#: build/models.py:262 msgid "BuildOrder to which this build is allocated" msgstr "Byggorder till vilken detta bygge är tilldelad" -#: 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Byggorder till vilken detta bygge är tilldelad" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Del" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Välj del att bygga" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Försäljningsorderreferens" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Försäljningsorder till vilken detta bygge allokeras" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Källa Plats" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Destinationsplats" -#: build/models.py:270 +#: build/models.py:302 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:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Bygg kvantitet" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Antal lagerobjekt att bygga" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Slutförda objekt" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Antal lagerposter som har slutförts" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Byggstatus" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Bygg statuskod" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Skapad" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Datum för slutförande" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Slutförandedatum" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "slutfört av" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Utfärdad av" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Användare som utfärdade denna byggorder" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Ansvarig" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Extern länk" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Länk till extern URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "Projektkod" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Byggorder {build} har slutförts" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "En byggorder har slutförts" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:853 +#: build/models.py:961 msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Antal" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Installera till" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Plats" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Status" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Serienummer" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Väntar" @@ -1540,15 +1677,21 @@ msgstr "Väntar" msgid "Production" msgstr "Produktion" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Slutför" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Visa QR-kod" @@ -1599,9 +1742,9 @@ msgstr "Visa QR-kod" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Redigera bygge" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Avbryt bygge" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Avbryt bygge" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Ta bort bygge" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Färdigställ bygget" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Byggbeskrivning" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Måldatum" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Försenad" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Försäljningsorder" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Utfärdad av" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Mål" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Skapad" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Slutförd" @@ -1813,12 +1977,12 @@ msgstr "Slutförd" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Bilagor" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Bygganteckningar" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Ny byggorder" @@ -1914,13 +2082,40 @@ msgstr "Ny byggorder" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" -msgstr "" +msgstr "Ogiltig valutakod" #: common/currency.py:134 msgid "Duplicate currency code" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Fil" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Unik projektkod" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Projektbeskrivning" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Ingen grupp" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Omstart krävs" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Serverinstans (Namn)" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Företagsnamn" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Internt företagsnamn" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Bas-URL" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "Bas-URL för serverinstans" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Standardvaluta" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "dagar" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Ladda ner från URL" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Kräv bekräftelse" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "Kräv uttrycklig användarbekräftelse för vissa åtgärder." -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Stöd för streckkoder" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Mall" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Delar är virtuella som standard" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Visa import i vyer" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "Visa importguiden i vissa delvyer" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Visa relaterade delar" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "Visa relaterade delar för en del" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Visningsformat för delnamn" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Formatera för att visa artikelnamnet" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Interna priser" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Debugläge" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Sidstorlek" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Aktivera testrapporter" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" -msgstr "Aktivera registrering" +msgid "Sales Order Default Shipment" +msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" -msgstr "Tillåtna domäner" +msgid "Automatically mark purchase orders as complete when all line items are received" +msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" -msgstr "" +#: common/models.py:1951 +msgid "Enable registration" +msgstr "Aktivera registrering" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" -msgstr "Aktivera projektkoder" +#: common/models.py:2009 +msgid "Auto-fill SSO users" +msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" +msgstr "Tillåtna domäner" + +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "Aktivera projektkoder" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" -msgstr "Visa nyheter" - -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2230 +msgid "Show invalid BOMs" +msgstr "" + +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" -msgstr "Sök efter artiklar" - -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" -msgstr "Sök efter leverantörsartikel" - -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" -msgstr "Sök efter tillverkarartikel" - -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2284 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:2290 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" +msgstr "Visa nyheter" + +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" -msgstr "" - -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" +msgstr "Sök efter artiklar" + +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2350 +msgid "Search Supplier Parts" +msgstr "Sök efter leverantörsartikel" + +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" -msgstr "" - -#: common/models.py:2355 -msgid "Search Preview Results" -msgstr "" +#: common/models.py:2356 +msgid "Search Manufacturer Parts" +msgstr "Sök efter tillverkarartikel" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" -msgstr "Datumformat" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" +msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "Datumformat" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Användare" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Länk" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "Bild" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Bilaga" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Saknad fil" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Extern länk saknas" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Välj fil att bifoga" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Kommentar" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "Filstorlek" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "Schemalagda uppgifter" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Filnamn" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Ogiltigt domännamn: {domain}" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Företag" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Företag" + +#: company/models.py:117 msgid "Company description" msgstr "Företagsbeskrivning" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Webbplats" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Telefonnummer" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Kontakt" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "är kund" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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 "Företag" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Adress" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adresser" + +#: company/models.py:372 msgid "Select company" msgstr "Välj företag" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "Primär adress" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "Adressrad 1" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "Adressrad 2" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Postnummer" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "Land" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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 "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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Tillverkare" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Leverantör" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "Företagsnamn" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "Radera företag" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" msgid "Delete image" msgstr "Radera bild" -#: 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Kund" @@ -4249,19 +4605,12 @@ msgstr "Kund" 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 "Adress" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ msgstr "Tillverkare" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ msgstr "Leverantörer" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametrar" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" msgid "Contacts" msgstr "Kontakter" -#: company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adresser" - -#: 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "Kunder" msgid "New Customer" msgstr "Ny kund" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Företag" - #: company/views.py:52 msgid "New Company" msgstr "Nytt företag" @@ -4642,48 +4983,228 @@ msgstr "Nytt företag" msgid "Placed" msgstr "Placerad" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "Kolumner" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "Kolumn" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "Rader" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Orderstatus" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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 "Leveransdatum" - -#: 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:1355 -#: order/serializers.py:1465 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 "Fakturanummer" - -#: order/models.py:1749 -msgid "Reference number for associated invoice" -msgstr "" - -#: order/models.py:1769 -msgid "Shipment has already been sent" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "Leveransdatum" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "Fakturanummer" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 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 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Återlämnad" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Pågående" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Reparera" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Ersätt" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Återbetala" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Avvisa" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Nyckelord" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "Kategorinamn" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Artiklar" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Kategori" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "Ikon" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "Ikon (valfritt)" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "Standardleverantör" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Datum" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "Välj kategori" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Kopiera bild" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "Generera rapport" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Redigera kategori" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Redigera kategori" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Radera kategori" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Radera kategori" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Ny kategori" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Välj filformat" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Redigera" -#: part/templates/part/prices.html:28 stock/admin.py:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "Senast uppdaterad" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Ingen åtgärd specificerad" msgid "No matching action found" msgstr "Ingen matchande åtgärd hittades" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "A4" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "A3" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "Serienummer" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "Statuskod" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "Leverantörsnamn" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "I karantän" msgid "Legacy stock tracking entry" msgstr "Spårningspost för äldre lager" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Lagerpost skapad" @@ -9431,7 +10173,7 @@ msgstr "Dela från överordnat objekt" msgid "Split child item" msgstr "Dela underordnat objekt" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Sammanfogade lagerposter" @@ -9451,7 +10193,7 @@ msgstr "Bygg orderutgång slutförd" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Konsumeras av byggorder" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Bygg" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "nästa sida" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Radera" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "Inga projektkoder hittades" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "Redigera mall" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "Radera mall" @@ -10375,40 +11100,40 @@ msgstr "Radera mall" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "Kontoinställningar" msgid "Change Password" msgstr "Ändra lösenord" -#: templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Användarnamn" - -#: templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Förnamn" - -#: templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Efternamn" - #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "Bekräfta e-postadress" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Bekräfta" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "Radera bilagor" msgid "Delete attachments" msgstr "Radera bilagor" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "Inga bilagor hittades" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "Redigera bilaga" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "Redigera bilaga" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "Radera bilaga" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "Skriv ut etiketter" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "Lägg till nytt filter" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "Rensa alla filter" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 msgid "Create filter" msgstr "Skapa filter" -#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 -#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "Inga resultat hittades" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "Söker" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "JA" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "NEJ" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 msgid "Cancel" msgstr "Avbryt" -#: 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Skicka" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "Ingen kategori" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "Visa som lista" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 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:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "Ladda underkategorier" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "resultat" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "Lagerstatus" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "Lägg till streckkod" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "Ogiltig kund" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "Ange serienummer" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "Flytta" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Lägg till" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "Inga ändringar" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +msgstr "" + #: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "Har projektkod" #: 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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Kolumner" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "Alla" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Ja" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 afa95e0a42..a640b29b9a 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:05\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "ไม่พบ API endpoint" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "ป้อนวันที่" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "หมายเหตุ" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "ป้อนรหัสผ่าน" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "ป้อนรหัสผ่านใหม่" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "ยืนยันรหัสผ่าน" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "ยืนยันรหัสผ่านใหม่" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "รหัสผ่านเดิม" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "อีเมล (อีกครั้ง)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "การยืนยันอีเมล" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "หมายเลขซีเรียลซ้ำกัน" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "ไม่พบหมายเลขซีเรียล" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "การเชื่อมต่อขัดข้อง" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "ไฟล์รูปภาพมีขนาดใหญ่เกินไป" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" -msgstr "ภาษาโปรตุเกส" +msgid "Norwegian" +msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 +msgid "Portuguese" +msgstr "ภาษาโปรตุเกส" + +#: InvenTree/locales.py:42 +msgid "Portuguese (Brazilian)" +msgstr "" + +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "ภาษารัสเซีย" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "ภาษาสวีเดน" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "ภาษาไทย" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "ภาษาเวียดนาม" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "ข้อมูลเมตาของปลั๊กอิน" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 "ชื่อไฟล์ห้ามมีตัวอักษรต้องห้าม '{c}'" - -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "ชื่อ" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "คำอธิบาย" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "ข้อมูลบาร์โค้ด" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "บาร์โค้ดนี้มีในระบบแล้ว" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "สกุลเงิน" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "ยินดีต้อนรับเข้าสู่ Inventree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "ชื่อไฟล์" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "ไฟล์ข้อมูล" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "เลือกไฟล์ข้อมูลที่จะอัปโหลด" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "ไฟล์มีขนาดใหญ่เกินไป" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "ข้อมูลระบบ" msgid "About InvenTree" msgstr "เกี่ยวกับ Inventree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "ออกโดย" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "สถานที่" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "สถานะ" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "อยู่ระหว่างดำเนินการ" @@ -1540,15 +1677,21 @@ msgstr "อยู่ระหว่างดำเนินการ" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "สำเร็จแล้ว" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "สำเร็จแล้ว" @@ -1813,12 +1977,12 @@ msgstr "สำเร็จแล้ว" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "ผู้ใช้งาน" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "ลิงก์" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "ไฟล์แนบ" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "ไม่พบไฟล์" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "เลือกไฟล์ที่ต้องการแนบ" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "ความคิดเห็น" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "ชื่อไฟล์" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "สูญหาย" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "ส่งคืนแล้ว" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "ชิ้นส่วน" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 37833d899a..2961428555 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API uç noktası bulunamadı" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "Kullanıcının bu modeli görüntüleme izni yok" @@ -52,30 +52,34 @@ msgstr "Geçersiz miktar sağlandı({exc})" msgid "Error details can be found in the admin panel" msgstr "Hata detaylarını admin panelinde bulabilirsiniz" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Tarih giriniz" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Notlar" @@ -88,258 +92,270 @@ msgstr "'{name}' değeri desen formatında yer almıyor" msgid "Provided value does not match required pattern: " msgstr "Sağlanan değer gerekli kalıpla eşleşmiyor: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Şifrenizi girin" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Lütfen Yeni Parolayı Girin" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Parolayı doğrulayın" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Yeni parolayı doğrulayın" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Eski parola" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "E-posta (tekrar)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "E-posta adresi onayı" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Her seferind eaynı e-posta adresini yazmalısınız." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Sağlanan e-posta adresi geçerli değil." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Sağlanan e-posta alanı onaylanmadı." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Kayıt devre dışı." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Boş seri numarası dizesi" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Yinelenen seri" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Geçersiz grup aralığı: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grup aralığı {group}, izin verilen miktarı aşmaktadır ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Geçersiz grup aralığı: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Seri numarası bulunamadı" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Benzersiz seri numaralarının sayısı ({len(serials)}) ile miktarın ({expected_quantity}) eşleşmesi gerekmektedir" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Bu değerden HTML etiketlerini kaldır" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Bağlantı hatası" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Sunucu geçersiz durum kodu ile cevap verdi" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "İstisna oluştu" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Sunucu geçersiz Content-Length değeriyle yanıt verdi" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Resim boyutu çok büyük" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Resim indirme boyutu izin verilenden büyük" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Uzak sunucu boş cevap döndü" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "Sağlanan URL geçerli bir resim dosyası değil" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgarca" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Çekçe" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Danca" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Almanca" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Yunanca" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "İngilizce" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "İspanyolca" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "İspanyolca(Meksika)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Farsça" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Fince" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Fransızca" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "İbranice" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Hintçe" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Macarca" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "İtalyanca" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Japonca" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Korece" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Flemenkçe" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Norveççe" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Polonyaca" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Portekizce" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Portekizce (Brezilya)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Rusça" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Slovakça" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Slovakça" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Sırpça" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "İsveççe" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Tay dili" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Türkçe" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Vietnamca" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Çince (Basitleştirilmiş)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Çince (Geleneksel)" @@ -348,257 +364,165 @@ msgstr "Çince (Geleneksel)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Uygulamaya giriş yap" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-posta" -#: InvenTree/models.py:107 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "Eklenti doğrulama sırasında hata oluştu" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "Metadata, bir python dict nesnesi olmalıdır" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Plugin Metaverileri" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "Harici eklentiler tarafından kullanım için JSON metadata alanı" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Yanlış biçimlendirilmiş desen" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Belirtilen bilinmeyen format anahtarı" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Gerekli format anahtarı eksik" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Referans alanı boş olamaz" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Referans sayısı çok fazla" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Eksik dosya" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Bozuk dış bağlantı" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Ek" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Eklenecek dosyayı seç" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Harici URL'ye bağlantı" - -#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:341 -msgid "Comment" -msgstr "Yorum" - -#: InvenTree/models.py:589 -msgid "File comment" -msgstr "Dosya yorumu" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "yükleme tarihi" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Dosya adı boş olamaz" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Ek dosya yolu geçersiz" - -#: 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:668 -msgid "Filename missing extension" -msgstr "Dosya uzantısı yok" - -#: InvenTree/models.py:677 -msgid "Attachment with this filename already exists" -msgstr "Aynı isimli başka bir dosya zaten var" - -#: InvenTree/models.py:684 -msgid "Error renaming file" -msgstr "Dosya adı değiştirilirken hata" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "Aynı kaynak altında birden fazla aynı isim kullanılamaz" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Açıklama" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "üst" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Yol" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Markdown notları (isteğe bağlı)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Barkod Verisi" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Üçüncü parti barkod verisi" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Barkod Hash" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "Barkod verisinin benzersiz hash'i" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Var olan barkod bulundu" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Sunucu Hatası" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Bir hafta sunucu tarafından kayıt edildi." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Para birimi" msgid "Select currency from available options" msgstr "Var olan seçeneklerden bir döviz birimi seçin" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Aktif" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Bu kullanıcı rolünü değiştirmek için izniniz yok." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Sadece süper kullanıcılar yeni kullanıcı oluşturabilir" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Kullanıcı hesabınız oluşturulmuştur." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "InvenTree'ye Hoşgeldiniz" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Dosya adı" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Geçersiz değer" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Veri Dosyası" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Yüklemek istediğiniz dosyayı seçin" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Desteklenmeyen dsoya tipi" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Dosya boyutu çok büyük" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Dosyada kolon bulunamadı" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Dosyada satır bulunamadı" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Dosyada satır bulunamadı" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Dosyada uygun kolon bulunamadı" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Gerekli kolon ismi eksik:'{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Tekrarlanan kolon ismi:'{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Uzaktan Görüntüler" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "Uzaktan görüntü dosya URL'si" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Arka plan çalışanı kontrolü başarısız oldu" @@ -702,27 +679,27 @@ 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/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Fazlalık değeri negatif olmamalıdır" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Fazlalık %100'ü geçmemelidir" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "Sistem Bilgisi" msgid "About InvenTree" msgstr "InvenTree Hakkında" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Mevcut" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Yapım İşi Emri" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Yapım İşi Emri" msgid "Build Orders" msgstr "Yapım İşi Emirleri" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Yapım İşi Emri Referansı" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referans" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/models.py:230 +#: build/models.py:262 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: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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Parça" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Yapım işi için parça seçin" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Satış Emri Referansı" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği satış emri" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Kaynak Konum" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Hedef Konum" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Yapım İşi Miktarı" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Yapım işi stok kalemlerinin sayısı" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Tamamlanmış ögeler" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "Tamamlanan stok kalemlerinin sayısı" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "Yapım İşi Durumu" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Yapım işi durum kodu" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Yapım işi çıktısı için sıra numarası" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Tamamlama tarihi" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "tamamlayan" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Veren" -#: build/models.py:330 +#: build/models.py:362 msgid "User who issued this build order" msgstr "Bu yapım işi emrini veren kullanıcı" -#: build/models.py:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Sorumlu" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Harici URL'ye bağlantı" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Yapım işi çıktısı belirtilmedi" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Yapım işi çıktısı zaten tamamlanmış" -#: build/models.py:853 +#: build/models.py:961 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:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Miktar" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "Yapım işi için tahsis edilen stok miktarı" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Kurulduğu yer" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Yapım işi çıktısı için miktarını girin" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "Yapım işi çıktısı için seri numaraları girin" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Konum" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Durum" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "Gerekli yapım işi miktarı tamamlanmadı" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Üretici Parça Numarası" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Paketleme" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Seri Numara" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Takip Edilebilir" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "Çeşide İzin Ver" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Bekliyor" @@ -1540,15 +1677,21 @@ msgstr "Bekliyor" msgid "Production" msgstr "Üretim" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Tamamlandı" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Barkod işlemleri" @@ -1588,7 +1731,7 @@ msgstr "Barkod işlemleri" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Yapım İşini Düzenle" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Yapım İşini İptal Et" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Yapım İşini İptal Et" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Tamamlanmış Yapım İşi" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Yapım işi tamamlandı olarak işaretlenmeye hazır" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Bekleyen çıktılar kaldığı için yapım işi emri tamamlanamıyor" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Gerekli yapım işi miktarı henüz tamamlanmadı" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 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/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Hedeflenen tarih" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Bu yapım işinin %(target)s tarihinde süresi doluyor" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Vadesi geçmiş" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Sipariş Emri" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Veren" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Hedef" @@ -1779,23 +1943,23 @@ msgstr "Hedef konumu belirtilmedi" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" 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:190 -#: templates/js/translated/build.js:2199 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Oluşturuldu" @@ -1804,8 +1968,8 @@ msgid "No target date set" msgstr "Hedef tarih ayarlanmadı" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Tamamlandı" @@ -1813,13 +1977,13 @@ msgstr "Tamamlandı" msgid "Build not complete" msgstr "Yapım İşi tamamlanmadı" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Alt Yapım İşi Emrileri" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Yapım İşi için Stok Tahsis Et" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Stok Tahsis Et" @@ -1870,15 +2034,19 @@ msgstr "Yeni yapım işi çıktısı oluştur" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Tamamlanmış Yapım İşi Çıktıları" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Tamamlanmış Yapım İşi Çıktıları" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Ekler" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Yapım İşi Notları" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Yeni Yapım İşi Emri" @@ -1914,10 +2082,37 @@ msgstr "Yeni Yapım İşi Emri" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Tamamlanmamış Çıktılar" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "{name.title()} Dosya" msgid "Select {name} file to upload" msgstr "{name} dosyasını yüklemek için seçin" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Şirket adı" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "Ana URL" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Varsayılan Para Birimi" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "günler" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "URL'den indir" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "DPN Regex" -#: common/models.py:1407 +#: common/models.py:1444 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:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/models.py:1411 +#: common/models.py:1448 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:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Şablon" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Montaj" -#: common/models.py:1453 +#: common/models.py:1490 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:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Bileşen" -#: common/models.py:1459 +#: common/models.py:1496 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:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Satılabilir" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Sanal" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda üret (HTML çıktısı)" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" -msgstr "Formlarda Miktarı Göster" - -#: common/models.py:2376 -msgid "Display available part quantity in some forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "Formlarda Miktarı Göster" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Kullanıcı" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Fiyat" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Aktif" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Bağlantı" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "Resim" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Ek" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Eksik dosya" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Bozuk dış bağlantı" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Eklenecek dosyayı seç" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Yorum" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Dosya adı" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Şirketler" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "Şirket web sitesi" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Telefon numarası" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "İletişim telefon numarası" -#: company/models.py:134 +#: company/models.py:137 msgid "Contact email address" msgstr "İletişim e-posta adresi" -#: 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "İletişim" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "müşteri mi" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Bu şirkete ürün satıyor musunuz?" -#: company/models.py:171 -msgid "is supplier" -msgstr "tedarikçi mi" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Bu şirketten ürün satın alıyor musunuz?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "üretici mi" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Bu şirket üretim yapıyor mu?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" 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:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Adres" + +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" msgstr "" -#: company/models.py:383 +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Üretici" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2053 -msgid "MPN" -msgstr "ÜPN" - -#: company/models.py:508 -msgid "Manufacturer Part Number" -msgstr "Üretici Parça Numarası" - -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "Temel Parça" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "Parça seçin" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Üretici" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Üretici seçin" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "ÜPN" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "Parametre adı" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Değer" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Parametre değeri" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Tedarikçi Parçası" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Tedarikçi" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Not" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2424 -msgid "Packaging" -msgstr "Paketleme" - -#: company/models.py:866 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "çoklu" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "Pasif" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Müşteri" @@ -4249,19 +4605,12 @@ msgstr "Müşteri" 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 "Adres" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "Yeni tedarikçi parçası oluştur" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Yeni Tedarikçi Parçası" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "Tedarikçi Stoku" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Yeni Satın Alma Emri" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ msgstr "Üreticiler" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Parça siparişi" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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 "Tedarikçi Parçası" - #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ 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:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "Fiyat Bilgisi" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Stok Kalemleri" @@ -4630,10 +4975,6 @@ msgstr "Müşteriler" msgid "New Customer" msgstr "Yeni Müşteri" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Şirketler" - #: company/views.py:52 msgid "New Company" msgstr "Yeni Şirket" @@ -4642,48 +4983,228 @@ msgstr "Yeni Şirket" msgid "Placed" msgstr "Sipariş verildi" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar bir olmalı" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 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 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "İade" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Devam Ediyor" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Geri Dön" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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 "Siparişi iptal et" - -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Siparişi iptal et" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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:259 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "İşlemler" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "DPN" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Revizyon" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Anahtar kelimeler" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Çeşidi" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimum Stok" @@ -5839,169 +6394,183 @@ msgstr "Minimum Stok" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Parçalar" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Varsayılan Konum" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: 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:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "Bu kategori içindeki parçalar için varsayılan konum" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Parça adı" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:915 +#: part/models.py:998 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:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "Varsayılan Tedarikçi" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "Varsayılan tedarikçi parçası" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan yapılabilir mi?" -#: part/models.py:1067 +#: part/models.py:1160 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:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -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:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "Test Adı" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "Test Açıklaması" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Etkin" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "Gerekli" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "Testi geçmesi için bu gerekli mi?" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +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:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "Test Adı" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "Test Açıklaması" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "Etkin" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "Gerekli" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "Testi geçmesi için bu gerekli mi?" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "Parametre şablon adı benzersiz olmalıdır" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "Parametre şablon adı benzersiz olmalıdır" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 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:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "Çeşide İzin Ver" - -#: part/models.py:4165 +#: part/models.py:4307 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:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Parçalar (Alt kategoriler dahil)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "Parça Test Şablonları" msgid "Add Test Template" msgstr "Test Şablonu Ekle" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "Parça Çeşitleri" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "Yeni çeşit oluştur" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "Yeni Çeşit" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "Parça Tedarikçileri" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "Etiket Yazdır" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Stok işlemleri" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "Parça işlemleri" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "Son Seri Numarası" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Stok" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Stok Yok" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "İşlem belirtilmedi" msgid "No matching action found" msgstr "Eşleşen eylem bulunamadı" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Barkod verisi için eşleşme bulunamadı" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Barkod verisi için eşleşme bulundu" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "Şablon için geçerli bir nesne sağlanmadı" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Şablon adı" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Dosya Adı Deseni" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Filtreler" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Genişlik [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "Etiket genişliği mm olarak belirtilmeli" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Yükseklik [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "Etiket yüksekliği mm olarak belirtilmeli" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "Seri Numara" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Seri No" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:124 stock/templates/stock/location.html:186 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Stok Konumları" -#: stock/models.py:166 stock/models.py:949 +#: stock/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 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:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "Seri numaraları tam sayı listesi olmalı" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Alt konumlar" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "Karantinaya alındı" msgid "Legacy stock tracking entry" msgstr "Eski stok izleme girişi" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Stok kalemi oluşturuldu" @@ -9431,7 +10173,7 @@ msgstr "Üst ögeden ayır" msgid "Split child item" msgstr "Alt ögeyi ayır" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Stok parçalarını birleştir" @@ -9451,7 +10193,7 @@ msgstr "Yapım emri çıktısı tamamlandı" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "Konuma Tara" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "Yazdırma işlemleri" @@ -9543,17 +10285,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:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,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:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Yapım İşi" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Konum ayarlanmadı" @@ -9691,11 +10425,6 @@ msgstr "Stok kalemi tüm gerekli testleri geçmedi" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erdi" -#: 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "Bu işlem kolayca geri alınamaz" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "Bu stok kalemi için seri numaralandırılmış ögeler oluştur." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Seri numaralandırılacak miktarı ve benzersiz seri numaralarını seçin." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "Konum işlemleri" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Konumu düzenle" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Konumu sil" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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:176 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "Yeni stok konumu oluştur" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Yeni Konum" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "Hata Raporu Gönder" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "panoya kopyala" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Onay" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "E-posta Ayarları" msgid "Email settings not configured" msgstr "E-posta ayarları yapılandırılmadı" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Evet" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "İzinleri ayarla" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Grup" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Görünüm" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Parçayı görüntüleme izni" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Parça ekleme izni" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Değiştir" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Parçaları düzenleme izni" -#: users/models.py:413 +#: users/models.py:408 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 index 9d7850b692..de8024ac40 100644 --- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -19,11 +19,11 @@ msgstr "" #: InvenTree/api.py:272 msgid "API endpoint not found" -msgstr "" +msgstr "Кінцева точка API не знайдена" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" -msgstr "" +msgstr "У користувача немає дозволу на перегляд цієї моделі" #: InvenTree/conversion.py:160 #, python-brace-format @@ -32,52 +32,56 @@ msgstr "" #: InvenTree/conversion.py:177 msgid "No value provided" -msgstr "" +msgstr "Значення не вказане" #: InvenTree/conversion.py:204 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "" +msgstr "Не вдалося перетворити {original} на {unit}" #: InvenTree/conversion.py:206 msgid "Invalid quantity supplied" -msgstr "" +msgstr "Невірна кількість поставляється" #: InvenTree/conversion.py:220 #, python-brace-format msgid "Invalid quantity supplied ({exc})" -msgstr "" +msgstr "Невірна кількість поставляється ({exc})" #: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" -msgstr "" +msgstr "Деталі помилки можна знайти на панелі адміністратора" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" -msgstr "" +msgstr "Введіть дату" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" -msgstr "" +msgstr "Нотатки" #: InvenTree/format.py:164 #, python-brace-format @@ -88,258 +92,270 @@ msgstr "" 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 "" +msgid "Enter password" +msgstr "Введіть пароль" -#: InvenTree/forms.py:138 -msgid "Confirm password" -msgstr "" +#: InvenTree/forms.py:130 +msgid "Enter new password" +msgstr "Введіть новий пароль" #: InvenTree/forms.py:139 +msgid "Confirm password" +msgstr "Підтвердити пароль" + +#: InvenTree/forms.py:140 msgid "Confirm new password" -msgstr "" +msgstr "Підтвердити новий пароль" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" -msgstr "" +msgstr "Старий пароль" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" -msgstr "" +msgstr "Email (ще раз)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" -msgstr "" +msgstr "Підтвердження адреси електронної пошти" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." +msgstr "Ви повинні використовувати щоразу однаковий email." + +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "Вказана основна адреса електронної пошти недійсна." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." -msgstr "" +msgstr "Наданий домен електронної пошти не затверджено." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." -msgstr "" +msgstr "Реєстрацію вимкнено." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" -msgstr "" +msgstr "Невірна кількість" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" -msgstr "" +msgstr "Пустий серійний номер" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 +msgid "Ukrainian" +msgstr "Українська" + +#: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 6661afe2a0..ff5124fb7d 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint không tồn tại" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 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" @@ -52,30 +52,34 @@ msgstr "Số lượng cung cấp không hợp lệ ({exc})" msgid "Error details can be found in the admin panel" msgstr "Chi tiết lỗi có thể được tìm thấy trong bảng quản trị" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "Nhập ngày" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "Ghi chú" @@ -88,258 +92,270 @@ msgstr "Giá trị '{name}' không xuất hiện ở định dạng mẫu" msgid "Provided value does not match required pattern: " msgstr "Giá trị được cung cấp không khớp với mẫu bắt buộc: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "Nhập mật khẩu" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "Nhập mật khẩu mới" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "Xác nhận mật khẩu" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "Xác nhận mật khẩu mới" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "Mật khẩu cũ" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (nhắc lại)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Xác nhận địa chỉ email" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "Bạn phải nhập cùng một email mỗi lần." -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "Địa chỉ email chính đã cung cấp không hợp lệ." -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "Miền email được cung cấp không được phê duyệt." -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "Đăng ký bị vô hiệu hóa." -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "Số lượng cung cấp không hợp lệ" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "Chuỗi số sê-ri trống" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "Trùng lặp sê-ri" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Phạm vi nhóm không hợp lệ: {group}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Khoảng nhóm {group} vượt cho phép số lượng ({expected_quantity})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Thứ tự nhóm không hợp lệ: {group}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "Không tìm thấy số sê-ri" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Số sê ri duy nhất ({len(serials)}) phải phù hợp số lượng ({expected_quantity})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "Xóa thẻ HTML từ giá trị này" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "Lỗi kết nối" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "Máy chủ phản hồi với mã trạng thái không hợp lệ" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "Xảy ra Exception" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "Máy chủ đã phản hồi với giá trị Content-Length không hợp lệ" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "Hình ảnh quá lớn" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "Tải xuống hình ảnh vượt quá kích thước tối đa" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "Máy chủ trả về phản hồi trống" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "URL được cung cấp không phải là tệp hình ảnh hợp lệ" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Tiếng Bulgaria" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "Tiếng Séc" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "Tiếng Đan Mạch" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "Tiếng Đức" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "Tiếng Hy Lạp" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "Tiếng Anh" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "Tiếng Tây Ban Nha" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "Tiếng Tây Ban Nha (Mê-hi-cô)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "Tiếng Ba Tư" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 msgid "Finnish" msgstr "Tiếng Phần Lan" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "Tiếng Pháp" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "Tiếng Do Thái" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "Tiếng Ấn Độ" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "Tiếng Hung-ga-ri" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "Tiếng Ý" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "Tiếng Nhật" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "Tiếng Hàn" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "Tiếng Hà Lan" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "Tiếng Na Uy" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "Tiếng Ba Lan" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "Tiếng Bồ Đào Nha" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "Tiếng Bồ Đào Nha (Brazil)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "Tiếng Nga" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 msgid "Slovak" msgstr "Tiếng Slo-va-ki-a" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "Tiếng Slô-ven-ni-a" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "Tiếng Serbia" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "Tiếng Thụy Điển" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "Tiếng Thái" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "Tiếng Thổ Nhĩ Kỳ" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "Tiếng Việt" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "Tiếng Trung (Giản thể)" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "Tiếng Trung (Phồn thể)" @@ -348,257 +364,165 @@ msgstr "Tiếng Trung (Phồn thể)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Đăng nhập vào ứng dụng" -#: InvenTree/magic_login.py:38 company/models.py:133 -#: company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 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:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "Phụ trợ siêu dữ liệu" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 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:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "Mẫu được định dạng không thích hợp" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "Khóa định dạng không rõ ràng đã được chỉ định" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "Thiếu khóa định dạng cần thiết" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "Trường tham chiếu không thể rỗng" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 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:476 +#: InvenTree/models.py:472 msgid "Reference number is too large" msgstr "Số tham chiếu quá lớn" -#: InvenTree/models.py:550 -msgid "Missing file" -msgstr "Tập tin bị thiếu" - -#: InvenTree/models.py:551 -msgid "Missing external link" -msgstr "Thiếu liên kết bên ngoài" - -#: InvenTree/models.py:572 stock/models.py:2442 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:326 -msgid "Attachment" -msgstr "Đính kèm" - -#: InvenTree/models.py:573 -msgid "Select file to attach" -msgstr "Chọn file đính kèm" - -#: InvenTree/models.py:581 common/models.py:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:582 build/models.py:345 part/models.py:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "Liên kết đến URL bên ngoài" - -#: 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:589 -msgid "File comment" -msgstr "Bình luận tệp tin" - -#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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:602 -msgid "upload date" -msgstr "Ngày tải lên" - -#: InvenTree/models.py:624 -msgid "Filename must not be empty" -msgstr "Tên tập tin không được để trống" - -#: InvenTree/models.py:635 -msgid "Invalid attachment directory" -msgstr "Thư mục đính kèm không hợp lệ" - -#: 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:668 -msgid "Filename missing extension" -msgstr "Tên tệp tin thiếu phần mở rộng" - -#: 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:684 -msgid "Error renaming file" -msgstr "Lỗi khi đổi tên tệp tin" - -#: InvenTree/models.py:860 +#: InvenTree/models.py:723 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:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "Lựa chọn sai" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "Tên" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "Mô tả" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "thư mục cha" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "Đường dẫn" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "Ghi chú markdown (không bắt buộc)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "Dữ liệu mã vạch" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "Dữ liệu mã vạch của bên thứ ba" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "Dữ liệu băm mã vạch" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 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:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "Mã vạch đã tồn tại" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "Lỗi máy chủ" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "Lỗi đã được ghi lại bởi máy chủ." -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "Tiền tệ" msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Tên người dùng" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Tên" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Họ" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "Hoạt động" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "Bạn không có quyền thay đổi vai trò của người dùng này." -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "Chỉ có siêu người dùng là có thể tạo người dùng mới" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "Tài khoản của bạn đã được tạo." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "Xin hãy sử dụng chức năng tạo lại mật khẩu để đăng nhập" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "Chào mừng đến với InvenTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "Tên tập tin" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "Giá trị không hợp lệ" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "Tập tin dữ liệu" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "Chọn tệp tin để tải lên" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "Loại tệp tin không được hỗ trợ" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "Tệp tin quá lớn" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "Không tìm thấy cột nào trong tệp tin" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "Không tìm thấy dòng nào trong tệp tin" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "Chưa có dữ liệu" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "Chưa cung cấp cột dữ liệu" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Thiếu cột bắt buộc: '{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Nhân bản cột: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "Hình ảnh từ xa" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "URL của tệp hình ảnh bên ngoài" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 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:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "Nhân công chạy ngầm kiểm tra thất bại" @@ -702,27 +679,27 @@ 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/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "Không rõ cơ sở dữ liệu" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "Đơn vị vật lý không hợp lệ" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "Mã tiền tệ không hợp lệ" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "Giá trị hàng hóa dư không thể là số âm" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "Hàng hóa dư thừa không thể vượt quá 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "Giá trị không hợp lệ cho hàng hóa dư thừa" @@ -750,62 +727,63 @@ msgstr "Thông tin hệ thống" msgid "About InvenTree" msgstr "Giới thiệu" -#: build/api.py:255 +#: build/api.py:247 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:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "Có sẵn" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "Tạo đơn hàng" msgid "Build Orders" msgstr "Tạo đơn hàng" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "Lựa chọn sai cho bản dựng cha" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 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:209 +#: build/models.py:241 msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Tham chiếu" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "Mô tả ngắn về phiên bạn (Tùy chọn)" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Phiên bản cha" -#: build/models.py:230 +#: build/models.py:262 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: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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "Đơn đặt bản dựng với bản dựng này đã được phân b #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "Nguyên liệu" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "Chọn sản phẩm để xây dựng" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:252 +#: build/models.py:284 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:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Địa điểm nguồn" -#: build/models.py:261 +#: build/models.py:293 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:266 +#: build/models.py:298 msgid "Destination Location" msgstr "Địa điểm đích" -#: build/models.py:270 +#: build/models.py:302 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:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "Xây dựng số lượng" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "Số kho hàng để dựng" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "Những mục hoàn thành" -#: build/models.py:283 +#: build/models.py:315 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:287 +#: build/models.py:319 msgid "Build Status" msgstr "Trnạg thái bản dựng" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "Mã lô hàng" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "Mã lô cho đầu ra bản dựng này" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: 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:311 +#: build/models.py:343 msgid "Target completion date" msgstr "Ngày hoàn thành mục tiêu" -#: build/models.py:312 +#: build/models.py:344 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:315 order/models.py:521 order/models.py:2101 -#: templates/js/translated/build.js:2247 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "Ngày hoàn thành" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "hoàn thành bởi" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "Cấp bởi" -#: build/models.py:330 +#: build/models.py:362 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:338 build/templates/build/build_base.html:204 -#: build/templates/build/detail.html:122 common/models.py:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "Chịu trách nhiệm" -#: build/models.py:339 +#: build/models.py:371 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:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: 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:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "Liên kết đến URL bên ngoài" + +#: build/models.py:381 msgid "Build Priority" msgstr "Độ ưu tiên" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "Độ quan trọng của đơn đặt bản dựng" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "Độ quan trọng của đơn đặt bản dựng" msgid "Project Code" msgstr "Mã dự án" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "Mã dự án cho đơn đặt bản dựng này" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, 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:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "Một đơn đặt bản dựng đã được hoàn thành" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: build/models.py:853 +#: build/models.py:961 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:936 build/serializers.py:220 build/serializers.py:269 -#: build/serializers.py:867 order/models.py:559 order/serializers.py:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 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:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 msgid "Build object" msgstr "Dựng đối tượng" -#: 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "Dựng đối tượng" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "Số lượng" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1472 +#: build/models.py:1570 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:1481 +#: build/models.py:1579 #, 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:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 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:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "Số lượng phải là 1 cho kho sê ri" -#: build/models.py:1562 +#: build/models.py:1660 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:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "Kho hàng" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:1648 +#: build/models.py:1746 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:1656 +#: build/models.py:1754 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "Kho hàng đích" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "Tên sản phẩm" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:169 +#: build/serializers.py:179 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:173 +#: build/serializers.py:183 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:177 +#: build/serializers.py:187 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:188 +#: build/serializers.py:198 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:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "Điền số lượng cho đầu ra bản dựng" -#: build/serializers.py:276 +#: build/serializers.py:286 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:279 +#: build/serializers.py:289 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:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "Số sê-ri" -#: build/serializers.py:295 +#: build/serializers.py:305 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:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "Địa điểm" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "Số sêri tự cấp" -#: build/serializers.py:316 +#: build/serializers.py:326 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 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 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 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 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 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:449 +#: build/serializers.py:459 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:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "Lý do loại bỏ đầu ra bản dựng" -#: build/serializers.py:514 +#: build/serializers.py:524 msgid "Location for completed build outputs" msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" -#: 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "Trạng thái" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:527 +#: build/serializers.py:537 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:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "Xóa toàn bộ đầu ra chưa hoàn thành" -#: build/serializers.py:620 +#: build/serializers.py:657 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:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:648 +#: build/serializers.py:685 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:649 +#: build/serializers.py:686 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:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:681 +#: build/serializers.py:718 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:691 +#: build/serializers.py:728 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:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:697 +#: build/serializers.py:734 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:707 templates/js/translated/build.js:315 +#: build/serializers.py:744 templates/js/translated/build.js:316 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:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" -#: build/serializers.py:713 +#: build/serializers.py:750 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:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 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:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 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:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:788 +#: build/serializers.py:828 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:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:838 +#: build/serializers.py:878 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:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" -#: build/serializers.py:907 +#: build/serializers.py:947 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:914 +#: build/serializers.py:954 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:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" -#: build/serializers.py:1001 +#: build/serializers.py:1041 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:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:1010 +#: build/serializers.py:1050 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:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:1016 +#: build/serializers.py:1056 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:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "Cho phép phân kho sản phẩm thay thế" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:1028 +#: build/serializers.py:1068 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:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "Mã số nhà sản xuất" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "Tên địa điểm" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "Đóng gói" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "ID sản phẩm" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "IPN sản phẩm" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "Mô tả sản phẩm" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "Số sê-ri" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Số lượng sẵn có" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "Có thể theo dõi" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "Cho phép biến thể" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Bật đơn hàng" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Số hàng tồn" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "Đợi duyệt" @@ -1540,15 +1677,21 @@ msgstr "Đợi duyệt" 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 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "Hoàn thành" @@ -1576,8 +1719,8 @@ msgstr "Ảnh thu nhỏ sản phẩm" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "Chức năng mã vạch" @@ -1588,7 +1731,7 @@ msgstr "Chức năng mã vạch" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Hiển thị mã QR" @@ -1599,9 +1742,9 @@ msgstr "Hiển thị mã QR" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "Gỡ mã vạch" @@ -1612,7 +1755,7 @@ msgstr "Gỡ mã vạch" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "Liên kết mã vạch" @@ -1636,87 +1779,100 @@ msgid "Edit Build" msgstr "Sửa bản dựng" #: build/templates/build/build_base.html:73 -msgid "Cancel Build" -msgstr "Hủy bản dựng" - -#: build/templates/build/build_base.html:76 msgid "Duplicate Build" msgstr "Nhân bản bản dựng" +#: build/templates/build/build_base.html:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "Hủy bản dựng" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Xóa bản dựng" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "Bản dựng hoàn thiện" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "Mô tả bản dựng" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "Không có đầu ra bản dựng đã được tạo cho đơn đặt bản dựng này" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "Đơn đặt bản dựng đã được đánh dấu hoàn thành" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Đơn đặt bản dựng không thể hoàn thiện bởi vì những đầu ra nổi bật còn tồn tại" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "Số lượng bản dựng được yêu cầu chưa được hoàn thành" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 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/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: templates/js/translated/sales_order.js:871 #: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Ngày mục tiêu" -#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "Bản dựng đã đến hạn vào %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "Quá hạn" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 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:1511 order/models.py:847 -#: order/models.py:1587 order/models.py:1701 order/models.py:1855 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "Đầu ra hoàn thiện" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "Đơn đặt hàng" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 "Phát hành bởi" -#: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "Độ ưu tiên" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,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:1479 -#: templates/js/translated/purchase_order.js:2189 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "Đích đến" @@ -1779,23 +1943,23 @@ msgstr "Địa điểm đích chưa được xác định" msgid "Allocated Parts" msgstr "Sản phẩm đã phân bổ" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" 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:190 -#: templates/js/translated/build.js:2199 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "Đã tạo" @@ -1804,8 +1968,8 @@ 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:206 -#: templates/js/translated/table_filters.js:689 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "Đã hoàn thành" @@ -1813,13 +1977,13 @@ msgstr "Đã hoàn thành" msgid "Build not complete" msgstr "Xây dựng chưa hoàn thiện" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "Đơn đặt bản dựng con" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "Phân bổ kho đến bản dựng" +msgid "Build Order Line Items" +msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -1841,7 +2005,7 @@ msgstr "Tự động phân bổ" msgid "Manually allocate stock to build" msgstr "Chỉ định kho thủ công đến bản dựng" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "Chỉ định kho" @@ -1870,15 +2034,19 @@ msgstr "Tạo đầu ra bản dựng mới" msgid "New Build Output" msgstr "Đầu ra bản dựng mới" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "Kho tiêu thụ" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "Đầu ra bản dựng hoàn thiện" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "Đầu ra bản dựng hoàn thiện" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Tập tin đính kèm" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "Ghi chép bản dựng" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "Tạo đơn đặt bản dựng" @@ -1914,10 +2082,37 @@ msgstr "Tạo đơn đặt bản dựng" msgid "Build Order Details" msgstr "Chi tiết đơn đặt bản dựng" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Đầu ra chưa hoàn thiện" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "Không phần mở rộng" @@ -1972,1606 +2167,1662 @@ msgstr "Tập tin {name.title()}" msgid "Select {name} file to upload" msgstr "Chọn tập tin {name} để tải lên" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "Đã cập nhật" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "Nhãn thời gian của lần cập cuối cùng" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "Mã dự án duy nhất" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "Mô tả dự án" -#: common/models.py:144 +#: common/models.py:166 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:764 +#: common/models.py:783 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:768 +#: common/models.py:787 msgid "Settings value" msgstr "Giá trị cài đặt" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "Giá trị đã chọn không hợp lệ" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "Giá trị phải là kiểu boolean" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "Giá trị phải là một số nguyên dương" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "Chuỗi khóa phải duy nhất" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "Không có nhóm" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "Cần khởi động lại" -#: common/models.py:1214 +#: common/models.py:1233 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:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "Chuyển dữ liệu chờ xử lý" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "Số đợt nâng cấp cơ sở dữ liệu chờ xử lý" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "Tên thực thể máy chủ" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "Mô tả chuỗi cho thực thể máy chủ" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "Sử dụng tên thực thể" -#: common/models.py:1234 +#: common/models.py:1253 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:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "Cấm hiển thị `giới thiệu`" -#: common/models.py:1240 +#: common/models.py:1259 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:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "Tên công ty" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "Tên công ty nội bộ" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "URL cơ sở" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "URL cơ sở cho thực thể máy chủ" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "Tiền tệ mặc định" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "Chọn tiền tệ chính khi tính giá" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "Tần suất cập nhật tiền tệ" -#: common/models.py:1273 +#: common/models.py:1292 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:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "ngày" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "Phần mở rộng cập nhật tiền tệ" -#: common/models.py:1281 +#: common/models.py:1300 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:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "Tải về từ URL" -#: common/models.py:1288 +#: common/models.py:1307 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:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "Giới hạn kích thước tải xuống" -#: common/models.py:1295 +#: common/models.py:1314 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:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "User-agent được dùng để tải xuống theo URL" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "Yêu cầu xác nhận" -#: common/models.py:1315 +#: common/models.py:1334 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:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "Cấp độ cây" -#: common/models.py:1322 +#: common/models.py:1341 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:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "Thời gian kiểm tra bản cập nhật" -#: common/models.py:1329 +#: common/models.py:1348 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:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "Sao lưu tự động" -#: common/models.py:1336 +#: common/models.py:1355 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:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "Khoảng thời gian sao lưu tự động" -#: common/models.py:1342 +#: common/models.py:1361 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:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "Khoảng thời gian xóa tác vụ" -#: common/models.py:1350 +#: common/models.py:1369 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:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "Khoảng thời gian xóa nhật ký lỗi" -#: common/models.py:1359 +#: common/models.py:1378 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:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "Khoảng thời gian xóa thông báo" -#: common/models.py:1368 +#: common/models.py:1387 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:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Hỗ trợ mã vạch" -#: common/models.py:1376 +#: common/models.py:1395 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:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "Độ trễ quét mã vạch" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "Thời gian trễ xử lý đầu đọc mã vạch" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "Hỗ trợ mã vạch qua webcam" -#: common/models.py:1389 +#: common/models.py:1408 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:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "Phiên bản Sản phẩm" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "Bật trường phiên bản cho sản phẩm" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "Mẫu IPN" -#: common/models.py:1407 +#: common/models.py:1444 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:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "Cho phép trùng IPN" -#: common/models.py:1411 +#: common/models.py:1448 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:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "Cho phép sửa IPN" -#: common/models.py:1417 +#: common/models.py:1454 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:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "Sao chép dữ liệu BOM của sản phẩm" -#: common/models.py:1423 +#: common/models.py:1460 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:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "Sao chép dữ liệu tham số sản phẩm" -#: common/models.py:1429 +#: common/models.py:1466 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:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "Chép thông tin kiểm thử sản phẩm" -#: common/models.py:1435 +#: common/models.py:1472 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:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "Sao chéo mẫu tham số danh mục" -#: common/models.py:1441 +#: common/models.py:1478 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:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "Mẫu" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "Sản phẩm là mẫu bởi mặc định" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "Lắp ráp" -#: common/models.py:1453 +#: common/models.py:1490 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:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "Thành phần" -#: common/models.py:1459 +#: common/models.py:1496 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:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "Có thể mua" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "Có thể bán" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "Sản phẩm mặc định có thể bán được" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "Sản phẩm mặc định có thể theo dõi được" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "Ảo" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "Sản phẩm mặc định là số hóa" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "Hiển thị Nhập liệu trong khung xem" -#: common/models.py:1489 +#: common/models.py:1526 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:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "Hiển thị sản phẩm liên quan" -#: common/models.py:1495 +#: common/models.py:1532 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:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "Số liệu tồn kho ban đầu" -#: common/models.py:1501 +#: common/models.py:1538 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:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "Dữ liệu nhà cung cấp ban đầu" -#: common/models.py:1508 +#: common/models.py:1545 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:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "Định dạng tên sản phẩm hiển thị" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "Định dạng để hiển thị tên sản phẩm" -#: common/models.py:1521 +#: common/models.py:1558 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:1522 +#: common/models.py:1559 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:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "Bắt buộc đơn vị tham số" -#: common/models.py:1528 +#: common/models.py:1566 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:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối thiểu" -#: common/models.py:1536 +#: common/models.py:1574 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:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối đa" -#: common/models.py:1549 +#: common/models.py:1587 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:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "Sử dụng giá bán nhà cung cấp" -#: common/models.py:1562 +#: common/models.py:1600 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:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "Ghi đè lịch sử mua hàng" -#: common/models.py:1570 +#: common/models.py:1608 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:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "Sử dụng giá hàng hóa trong kho" -#: common/models.py:1578 +#: common/models.py:1616 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:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "Tuổi giá kho hàng" -#: common/models.py:1586 +#: common/models.py:1624 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:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "Sử dụng giá biến thể" -#: common/models.py:1594 +#: common/models.py:1632 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:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "Chỉ các biến thể hoạt động" -#: common/models.py:1601 +#: common/models.py:1639 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:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "Tần suất tạo lại giá" -#: common/models.py:1609 +#: common/models.py:1647 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:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "Giá nội bộ" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "Bật giá nội bộ cho sản phẩm" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "Ghi đè giá nội bộ" -#: common/models.py:1624 +#: common/models.py:1662 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:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "Bật in tem nhãn" -#: common/models.py:1631 +#: common/models.py:1669 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:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "DPI hỉnh ảnh tem nhãn" -#: common/models.py:1638 +#: common/models.py:1676 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:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "Bật báo cáo" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "Cho phép tạo báo cáo" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "Chế độ gỡ lỗi" -#: common/models.py:1651 +#: common/models.py:1689 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:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "Khổ giấy" -#: common/models.py:1663 +#: common/models.py:1701 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:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "Bật báo cáo kiểm thử" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "Cho phép tạo báo cáo kiểm thử" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "Đính kèm báo cáo kiểm thử" -#: common/models.py:1676 +#: common/models.py:1714 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:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "Sê ri toàn cục duy nhất" -#: common/models.py:1683 +#: common/models.py:1721 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:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "Tự động điền số sê ri" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "Tự động điền số sê ri vào biểu mẫu" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "Xóa kho đã hết hàng" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "Mẫu sinh mã theo lô" -#: common/models.py:1704 +#: common/models.py:1742 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:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "Quá hạn trong kho" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "Bật chức năng quá hạn tồn kho" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "Bán kho quá hạn" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "Cho phép bán hàng kho quá hạn" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "Thời gian hàng cũ trong kho" -#: common/models.py:1723 +#: common/models.py:1761 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:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "Dựng kho quá hạn" -#: common/models.py:1731 +#: common/models.py:1769 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:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "Kiểm soát sở hữu kho" -#: common/models.py:1737 +#: common/models.py:1775 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:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "Biểu tượng địa điểm kho mặc định" -#: common/models.py:1743 +#: common/models.py:1781 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:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "Hiển thị hàng hóa đã lắp đặt" -#: common/models.py:1748 +#: common/models.py:1787 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:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "Mã tham chiếu đơn đặt bản dựng" -#: common/models.py:1771 +#: common/models.py:1810 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:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 +#: common/models.py:1822 +msgid "Require Active Part" +msgstr "" + +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" +msgstr "" + +#: common/models.py:1828 +msgid "Require Locked Part" +msgstr "" + +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" +msgstr "" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1785 +#: common/models.py:1844 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1791 +#: common/models.py:1850 msgid "Enable Return Orders" msgstr "Bật đơn hàng trả lại" -#: common/models.py:1792 +#: common/models.py:1851 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:1797 +#: common/models.py:1856 msgid "Return Order Reference Pattern" msgstr "Mẫu tham chiếu đơn hàng trả lại" -#: common/models.py:1799 +#: common/models.py:1858 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1811 +#: common/models.py:1870 msgid "Edit Completed Return Orders" msgstr "Sửa đơn hàng trả lại đã hoàn thành" -#: common/models.py:1813 +#: common/models.py:1872 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:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt hàng" -#: common/models.py:1821 +#: common/models.py:1880 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:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "Vận chuyển mặc định đơn đặt hàng" -#: common/models.py:1834 +#: common/models.py:1893 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:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "Sửa đơn đặt hàng đã hoàn thành" -#: common/models.py:1841 +#: common/models.py:1900 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:1847 +#: common/models.py:1906 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt mua" -#: common/models.py:1857 +#: common/models.py:1916 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:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "Sửa đơn đặt mua đã hoàn thành" -#: common/models.py:1871 +#: common/models.py:1930 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:1877 +#: common/models.py:1936 msgid "Auto Complete Purchase Orders" msgstr "Tự động hoàn thành đơn đặt mua" -#: common/models.py:1879 +#: common/models.py:1938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "Bật quên mật khẩu" -#: common/models.py:1887 +#: common/models.py:1946 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:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "Bật đăng ký" -#: common/models.py:1893 +#: common/models.py:1952 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:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "Bật SSO" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "Cho phép SSO tại trang đăng nhập" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "Bật đăng ký SSO" -#: common/models.py:1906 +#: common/models.py:1965 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:1912 +#: common/models.py:1971 +msgid "Enable SSO group sync" +msgstr "" + +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "" + +#: common/models.py:1979 +msgid "SSO group key" +msgstr "" + +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "" + +#: common/models.py:1987 +msgid "SSO group map" +msgstr "" + +#: common/models.py:1989 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "" + +#: common/models.py:1995 +msgid "Remove groups outside of SSO" +msgstr "" + +#: common/models.py:1997 +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "" + +#: common/models.py:2003 msgid "Email required" msgstr "Yêu cầu email" -#: common/models.py:1913 +#: common/models.py:2004 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:1918 +#: common/models.py:2009 msgid "Auto-fill SSO users" msgstr "Người dùng tự động điền SSO" -#: common/models.py:1920 +#: common/models.py:2011 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:1926 +#: common/models.py:2017 msgid "Mail twice" msgstr "Thư 2 lần" -#: common/models.py:1927 +#: common/models.py:2018 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:1932 +#: common/models.py:2023 msgid "Password twice" msgstr "Mật khẩu 2 lần" -#: common/models.py:1933 +#: common/models.py:2024 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:1938 +#: common/models.py:2029 msgid "Allowed domains" msgstr "Các tên miền được phép" -#: common/models.py:1940 +#: common/models.py:2031 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:1946 +#: common/models.py:2037 msgid "Group on signup" msgstr "Nhóm khi đăng ký" -#: common/models.py:1947 -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:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" -#: common/models.py:1952 +#: common/models.py:2045 msgid "Enforce MFA" msgstr "Bắt buộc MFA" -#: common/models.py:1953 +#: common/models.py:2046 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:1958 +#: common/models.py:2051 msgid "Check plugins on startup" msgstr "Kiểm tra phần mở rộng khi khởi động" -#: common/models.py:1960 +#: common/models.py:2053 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:1968 +#: common/models.py:2061 msgid "Check for plugin updates" msgstr "Kiểm tra cập nhật plugin" -#: common/models.py:1969 +#: common/models.py:2062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1975 +#: common/models.py:2068 msgid "Enable URL integration" msgstr "Bật tích hợp URL" -#: common/models.py:1976 +#: common/models.py:2069 msgid "Enable plugins to add URL routes" msgstr "Bật phần mở rộng để thêm định tuyến URL" -#: common/models.py:1982 +#: common/models.py:2075 msgid "Enable navigation integration" msgstr "Bật tích hợp điều hướng" -#: common/models.py:1983 +#: common/models.py:2076 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:1989 +#: common/models.py:2082 msgid "Enable app integration" msgstr "Bật tích hợp ứng dụng" -#: common/models.py:1990 +#: common/models.py:2083 msgid "Enable plugins to add apps" msgstr "Bật phần mở rộng để thêm ứng dụng" -#: common/models.py:1996 +#: common/models.py:2089 msgid "Enable schedule integration" msgstr "Cho phép tích hợp lập lịch" -#: common/models.py:1997 +#: common/models.py:2090 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:2003 +#: common/models.py:2096 msgid "Enable event integration" msgstr "Bật tích hợp nguồn cấp sự kiện" -#: common/models.py:2004 +#: common/models.py:2097 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:2010 +#: common/models.py:2103 msgid "Enable project codes" msgstr "Bật mã dự án" -#: common/models.py:2011 +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "Bật mã dự án để theo dõi dự án" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "Chức năng kiểm kê" -#: common/models.py:2018 +#: common/models.py:2111 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:2024 +#: common/models.py:2117 msgid "Exclude External Locations" msgstr "Ngoại trừ vị trí bên ngoài" -#: common/models.py:2026 +#: common/models.py:2119 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:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "Giai đoạn kiểm kê tự động" -#: common/models.py:2034 +#: common/models.py:2127 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:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "Khoảng thời gian xóa báo cáo" -#: common/models.py:2042 +#: common/models.py:2135 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:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "Hiển thị tên đầy đủ của người dùng" -#: common/models.py:2050 +#: common/models.py:2143 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:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2056 +#: common/models.py:2149 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 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:2111 +#: common/models.py:2204 msgid "Hide inactive parts" msgstr "Ẩn sản phẩm ngừng hoạt động" -#: common/models.py:2113 +#: common/models.py:2206 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:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "Hiện sản phẩm đã đăng ký" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "Hiện sản phẩm đã đăng ký trên trang chủ" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "Hiện danh mục đã đăng ký" -#: common/models.py:2126 +#: common/models.py:2219 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:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "Hiển thị nguyên liệu mới nhất" -#: common/models.py:2132 +#: common/models.py:2225 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:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2138 +#: common/models.py:2231 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:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "Hiện thay đổi kho hàng gần đây" -#: common/models.py:2144 +#: common/models.py:2237 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:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "Hiển thị hàng còn ít" -#: common/models.py:2150 +#: common/models.py:2243 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:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "Hiển thị hết hàng" -#: common/models.py:2156 +#: common/models.py:2249 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:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "Hiển thị hàng cần thiết" -#: common/models.py:2162 +#: common/models.py:2255 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:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "Bán kho quá hạn" -#: common/models.py:2168 +#: common/models.py:2261 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:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "Hiện kho hàng ế" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "Hiện hàng trong kho bị ế trên trang chủ" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "Hiện bản dựng chờ xử lý" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "Hiện bản dựng chờ xử lý trên trang chủ" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "Hiện bản dựng quá hạn" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "Hiện bản dựng quá hạn trên trang chủ" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "Hiện PO nổi bật" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "Hiện PO nổi bật trên trang chủ" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "Hiện PO quá hạn" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "Hiện đơn mua hàng quá hạn trên trang chủ" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "Hiện đơn hàng vận chuyển nổi bật" -#: common/models.py:2204 +#: common/models.py:2297 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:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "Hiện đơn vận chuyển quá hạn" -#: common/models.py:2210 +#: common/models.py:2303 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:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "Hiện đơn vận chuyển chờ xử lý" -#: common/models.py:2216 +#: common/models.py:2309 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:2221 +#: common/models.py:2314 msgid "Show News" msgstr "Hiện tin tức" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "Hiện tin tức trên trang chủ" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "Hiển thị nhãn cùng dòng" -#: common/models.py:2229 +#: common/models.py:2322 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:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "Máy in tem nhãn mặc định" -#: common/models.py:2237 +#: common/models.py:2330 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:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "Hiển thị báo cáo cùng hàng" -#: common/models.py:2245 +#: common/models.py:2338 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:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "Tìm sản phẩm" -#: common/models.py:2252 +#: common/models.py:2345 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:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "Tìm sản phẩm nhà cung cấp" -#: common/models.py:2258 +#: common/models.py:2351 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:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "Tìm sản phẩm nhà sản xuất" -#: common/models.py:2264 +#: common/models.py:2357 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:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "Ẩn sản phẩm ngừng hoạt động" -#: common/models.py:2270 +#: common/models.py:2363 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:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "Tìm kiếm danh mục" -#: common/models.py:2276 +#: common/models.py:2369 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:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "Tìm kiếm kho" -#: common/models.py:2282 +#: common/models.py:2375 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:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "Ẩn hàng hóa trong kho không có sẵn" -#: common/models.py:2289 +#: common/models.py:2382 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:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "Tìm kiếm vị trí" -#: common/models.py:2296 +#: common/models.py:2389 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:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "Tìm kiếm công ty" -#: common/models.py:2302 +#: common/models.py:2395 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:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "Tìm kiếm đặt hàng xây dựng" -#: common/models.py:2308 +#: common/models.py:2401 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:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "Tìm kiếm đơn đặt mua" -#: common/models.py:2314 +#: common/models.py:2407 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:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "Loại trừ đơn đặt mua không hoạt động" -#: common/models.py:2321 +#: common/models.py:2414 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:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "Tìm đơn đặt hàng người mua" -#: common/models.py:2328 +#: common/models.py:2421 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:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "Loại trừ đơn đặt hàng người mua không hoạt động" -#: common/models.py:2335 +#: common/models.py:2428 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:2341 +#: common/models.py:2434 msgid "Search Return Orders" msgstr "Tìm kiếm đơn hàng trả lại" -#: common/models.py:2342 +#: common/models.py:2435 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:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "Loại trừ đơn hàng trả lại không hoạt động" -#: common/models.py:2349 +#: common/models.py:2442 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:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "Kết quả xem trước tìm kiếm" -#: common/models.py:2357 +#: common/models.py:2450 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:2363 +#: common/models.py:2456 msgid "Regex Search" msgstr "Tìm kiếm biểu thức" -#: common/models.py:2364 +#: common/models.py:2457 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:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "Tìm phù hợp toàn bộ chữ" -#: common/models.py:2370 +#: common/models.py:2463 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:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "Hiện số lượng trong biểu mẫu" -#: common/models.py:2376 +#: common/models.py:2469 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:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "Phím escape để đóng mẫu biểu" -#: common/models.py:2382 +#: common/models.py:2475 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:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "Cố định điều hướng" -#: common/models.py:2388 +#: common/models.py:2481 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:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "Định dạng ngày" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "Định dạng ưa chuộng khi hiển thị ngày" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Lập lịch sản phẩm" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "Hiển thị thông tin lịch sản phẩm" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Kiểm kê sản phẩm" -#: common/models.py:2415 +#: common/models.py:2508 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:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "Độ dài chuỗi trong bảng" -#: common/models.py:2423 +#: common/models.py:2516 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:2429 -msgid "Default part label template" -msgstr "Mẫu nhãn sản phẩm mặc định" - -#: common/models.py:2430 -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:2435 -msgid "Default stock item template" -msgstr "Mẫu hàng hóa trong khi mặc định" - -#: common/models.py:2437 -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:2443 -msgid "Default stock location label template" -msgstr "Mẫu nhãn vị trí kho mặc định" - -#: common/models.py:2445 -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:2451 -msgid "Default build line label template" -msgstr "" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "Nhận báo cáo lỗi" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "Nhận thông báo khi có lỗi hệ thống" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "Người dùng" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "Giá" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "Đơn vị giá theo số lượng cụ thể" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "Đầu mối" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "Đầu mối tại điểm webhook được nhận" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "Tên của webhook này" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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 "Hoạt động" - -#: common/models.py:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "Webhook có hoạt động không" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "Chữ ký số" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "Chữ ký số để truy cập" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "Bí mật" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "Mã bí mật dùng chung cho HMAC" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "Mã Tin nhắn" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "Định danh duy nhất cho tin nhắn này" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "Máy chủ" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "Mãy chủ từ tin nhắn này đã được nhận" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "Đầu mục" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "Đầu mục tin nhắn" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "Thân" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "Thân tin nhắn này" -#: common/models.py:2798 +#: common/models.py:2870 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:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "Làm việc vào" -#: common/models.py:2804 +#: common/models.py:2876 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:2930 +#: common/models.py:3002 msgid "Id" msgstr "Mã" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Tiêu đề" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "Liên kết" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "Đã công bố" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "Tóm tắt" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "Đọc" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "Tin này đã được đọc?" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "Tin này đã được đọc?" msgid "Image" msgstr "Hình ảnh" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "Tệp ảnh" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 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:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "Tên đơn vị" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Biểu tượng" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "Biểu tượng đơn vị tùy chọn" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Định nghĩa" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "Định nghĩa đơn vị" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "Đính kèm" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "Tập tin bị thiếu" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "Thiếu liên kết bên ngoài" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "Chọn file đính kèm" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "Bình luận" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,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:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "Mục đã nhận" @@ -3651,79 +3957,99 @@ 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:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "Đang chạy" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "Công việc chờ xử lý" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "Tác vụ theo lịch" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "Tác vụ thất bại" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "ID tác vụ" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "ID tác vụ duy nhất" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "Khoá" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "Thời gian khóa" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "Tên công việc" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "Chức năng" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "Tên chức năng" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "Đối số" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "Đối số công việc" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "Đối số từ khóa" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "Đối số từ khóa công việc" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "Tên tập tin" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "Tên miền rỗng là không được phép." -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Tên miền không hợp lệ: {domain}" @@ -3766,402 +4092,432 @@ msgstr "Hàng hóa đã được nhập vào" msgid "Previous Step" msgstr "Bước trước" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Doanh nghiêp" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Doanh nghiệp" + +#: company/models.py:117 msgid "Company description" msgstr "Mô tả công ty" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "Mô tả của công ty" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Trang web" -#: company/models.py:120 +#: company/models.py:123 msgid "Company website URL" msgstr "URL trang web của công ty" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "Số điện thoại" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "Số điện thoại liên hệ" -#: company/models.py:134 +#: company/models.py:137 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:343 order/templates/order/order_base.html:203 -#: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:218 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "Liên hệ" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "Đầu mối liên hệ" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "Liên kết đến thông tin công ty ngoài" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" -msgstr "là khách hàng" +#: company/models.py:168 +msgid "Is customer" +msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "Bạn có bán hàng cho công ty này?" -#: company/models.py:171 -msgid "is supplier" -msgstr "là nhà cung cấp" +#: company/models.py:174 +msgid "Is supplier" +msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "Bạn có mua hàng từ công ty này?" -#: company/models.py:177 -msgid "is manufacturer" -msgstr "là nhà sản xuất" +#: company/models.py:180 +msgid "Is manufacturer" +msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "Công ty này có sản xuất sản phẩm?" -#: company/models.py:186 +#: company/models.py:189 msgid "Default currency used for this company" msgstr "Tiền tệ mặc định dùng cho công ty này" -#: company/models.py: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 "Doanh nghiêp" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "Địa chỉ" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Địa chỉ" + +#: company/models.py:372 msgid "Select company" msgstr "Chọn doanh nghiệp" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "Tiêu đề địa chỉ" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "Tiêu đề mô tả mục địa chỉ" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "Địa chỉ chính" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "Đặt làm địa chỉ chính" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Dòng 1" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "Địa chỉ dòng 1" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Dòng 2" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "Địa chỉ dòng 2" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Mã bưu chính" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "Thành phố/Vùng" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "Mã bưu chính thành phố/vùng" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "Bang/Tỉnh" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "Bang hay tỉnh" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "Quốc gia" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "Địa chỉ quốc gia" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "Ghi chú vận chuyển" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "Ghi chú dành cho chuyển phát nhanh" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "Ghi chú nội bọ chuyển phát nhanh" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "Ghi chú nội bộ sử dụng cho chuyển phát nhanh" -#: company/models.py:458 +#: company/models.py:447 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:792 stock/models.py:768 -#: stock/serializers.py:398 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: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:532 -#: 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 "Nhà sản xuất" - -#: company/models.py:501 -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:542 -#: 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:1801 -#: 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 "Mã số nhà sản xuất" - -#: company/models.py:515 -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:524 -msgid "Manufacturer part description" -msgstr "Mô tả sản phẩm của nhà sản xuất" - -#: company/models.py:581 company/models.py:608 company/models.py:824 +#: company/models.py:470 company/models.py:587 company/models.py:811 #: 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:615 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 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:489 company/models.py:781 +msgid "Select part" +msgstr "Chọn sản phẩm" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "Nhà sản xuất" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "Chọn nhà sản xuất" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +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:522 +msgid "Manufacturer part description" +msgstr "Mô tả sản phẩm của nhà sản xuất" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "Tên tham số" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "Giá trị" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "Giá trị tham số" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "Đơn vị" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "Đơn vị tham số" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "Sản phẩm nhà cung cấp" + +#: company/models.py:719 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:739 +#: company/models.py:726 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:753 +#: company/models.py:740 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: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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "Nhà cung cấp" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "Chọn sản phẩm của nhà sản xuất" -#: company/models.py:832 +#: company/models.py:819 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:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "Mô tả sản phẩm nhà cung cấp" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "Ghi chú" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2424 -msgid "Packaging" -msgstr "Đóng gói" - -#: company/models.py:866 +#: company/models.py:853 msgid "Part packaging" msgstr "Đóng gói sản phẩm" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "Số lượng gói" -#: company/models.py:873 +#: company/models.py:860 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:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "nhiều" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "Đặt hàng nhiều" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "Số lượng có sẵn từ nhà cung cấp" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "Sẵn hàng đã được cập nhật" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "Ngày cập nhật cuối thông tin tồn kho" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "Không hoạt động" @@ -4212,7 +4568,7 @@ msgstr "Xóa doanh nghiệp" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "Ảnh sản phẩm" @@ -4231,17 +4587,17 @@ 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: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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "Khách hàng" @@ -4249,19 +4605,12 @@ 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: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 "Địa chỉ" - #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Điện thoại" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:527 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "Xoá hình ảnh" @@ -4270,19 +4619,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:530 +#: part/templates/part/part_base.html:539 #: 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:559 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "Tải hình lên" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "Tải ảnh xuống" @@ -4298,7 +4647,7 @@ msgstr "Thêm mới sản phẩm nhà cung cấp" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "Sản phẩm nhà cung cấp mới" @@ -4311,7 +4660,7 @@ msgstr "Sản phẩm nhà sản xuất" msgid "Create new manufacturer part" msgstr "Tạo sản phẩm nhà sản xuất mới" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "Sản phẩm nhà sản xuất mới" @@ -4325,7 +4674,7 @@ msgstr "Kho nhà cung cấp" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "Đơn đặt hàng mới" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ msgstr "Nhà sản xuất" #: 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Đặt mua sản phẩm" @@ -4435,7 +4784,8 @@ 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:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "Sản phẩm nội bộ" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ msgstr "Nhà cung cấp" #: 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Thông số" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Tham số mới" -#: company/templates/company/manufacturer_part.html:206 -#: templates/js/translated/part.js:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "Thêm thông số" @@ -4490,19 +4844,6 @@ msgstr "Hàng trong kho đã được phân bổ" msgid "Contacts" msgstr "Danh bạ" -#: company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Địa chỉ" - -#: 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 "Sản phẩm nhà cung cấp" - #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4511,7 +4852,7 @@ msgstr "Chức năng cho sản phẩm nhà cung cấp" #: 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "Đặt hàng sản phẩm" @@ -4544,12 +4885,12 @@ msgstr "Xóa sản phẩm nhà cung cấp" 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:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ 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:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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:207 -#: templates/js/translated/stock.js:537 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "Hàng trong kho mới" @@ -4582,29 +4923,33 @@ msgstr "Thông tin giá cả" msgid "Add Price Break" msgstr "Thêm giá phá vỡ" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "Mã QR sản phẩm nhà cung cấp" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "Liên kết mã vạch đến hàng hóa nhà cung cấp" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 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:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "Hàng trong kho" @@ -4630,10 +4975,6 @@ msgstr "Khách hàng" msgid "New Customer" msgstr "Khách hàng mới" -#: company/views.py:51 templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Doanh nghiệp" - #: company/views.py:52 msgid "New Company" msgstr "Doanh nghiệp mới" @@ -4642,48 +4983,228 @@ msgstr "Doanh nghiệp mới" msgid "Placed" msgstr "Đã đặt" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "Dữ liệu" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "Hợp lệ" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Không rõ" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Tổng tiền" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "Trạng thái đặt hàng" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 msgid "No matching purchase order found" msgstr "Không tìm thấy đơn đặt mua phù hợp" -#: 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Đặt hàng" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 msgid "Purchase Order" msgstr "Đơn hàng" -#: 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "Đơn hàng trả lại" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "Tổng tiền cho đơn hàng hàng" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "Tiền tệ đơn đặt hàng" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 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)" @@ -4830,7 +5347,7 @@ msgstr "Mô tả đơn đặt (tùy chọn)" msgid "Select project code for this order" msgstr "Mã dự án đã chọn cho đơn đặt hàng này" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "Liên kết đến trang bên ngoài" @@ -4854,534 +5371,578 @@ msgstr "Đầu mối liên hệ của đơn đặt này" msgid "Company address for this order" msgstr "Địa chỉ công ty cho đơn đặt này" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "Mã đặt hàng" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "Trạng thái đơn đặt mua" -#: order/models.py:487 +#: order/models.py:493 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:498 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1702 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "Tham chiếu nhà cung cấp" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "Mã tham chiếu đơn đặt nhà cung cấp" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "nhận bởi" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "Ngày phát hành" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "Ngày đặt hàng đã phát hành" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "Ngày đặt hàng đã được hoàn thiện" -#: order/models.py:566 +#: order/models.py:572 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:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "Số lượng phải là số dương" -#: order/models.py:941 +#: order/models.py:992 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:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "Tham chiếu khách hàng " -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "Mã tham chiếu đơn đặt của khách hàng" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: 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:978 +#: order/models.py:1029 msgid "shipped by" msgstr "vận chuyển bằng" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 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:1038 +#: order/models.py:1089 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:1043 +#: order/models.py:1094 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:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "Số lượng mặt hàng" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "Tham chiếu khoản riêng" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "Ghi chú khoản riêng" -#: order/models.py:1345 +#: order/models.py:1393 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:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "Mô tả khoản riêng (tùy chọn)" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "Ngữ cảnh" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "Ngữ cảnh bổ sung" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "Đơn giá" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 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:1423 +#: order/models.py:1476 msgid "deleted" msgstr "đã bị xóa" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "Sản phẩm nhà cung cấp" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "Đã nhận" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "Giá đơn vị mua" -#: order/models.py:1483 +#: order/models.py:1536 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:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 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:1579 +#: order/models.py:1642 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:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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:1606 +#: order/models.py:1669 msgid "Unit sale price" msgstr "Giá bán đơn vị" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "Số lượng đã vận chuyển" -#: order/models.py:1708 +#: order/models.py:1751 +msgid "Sales Order Shipment" +msgstr "" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "Ngày vận chuyển" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Ngày giao hàng" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "Ngày giao hàng của vận chuyển" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "Kiểm tra bởi" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "Vận chuyển" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "Mã vận chuyển" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "Số theo dõi" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "Thông tin theo dõi vận chuyển" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "Mã hóa đơn" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "Số tham chiếu liên kết với hóa đơn" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "Vận đơn đã được gửi đi" -#: order/models.py:1772 +#: order/models.py:1836 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:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "Hàng trong kho chưa được giao" -#: order/models.py:1899 +#: order/models.py:1973 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:1902 +#: order/models.py:1976 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:1905 +#: order/models.py:1979 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:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 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:1927 +#: order/models.py:2001 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:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 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:1936 +#: order/models.py:2010 msgid "Line" msgstr "Dòng" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "Tham chiếu vận đơn của đơn hàng bán" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "Hàng hóa" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "Chọn hàng trong kho để phân bổ" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "Nhập số lượng phân kho" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "Tham chiếu đơn hàng trả lại" -#: order/models.py:2069 +#: order/models.py:2148 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:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "Trạng thái đơn hàng trả lại" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 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:2276 +#: order/models.py:2392 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:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "Ngày nhận được" -#: order/models.py:2283 +#: order/models.py:2399 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:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Kết quả" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "Kết quả cho hàng hóa dòng này" -#: order/models.py:2302 +#: order/models.py:2418 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:81 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/models.py:2428 +msgid "Return Order Extra Line" +msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 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:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 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:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "Mã sản phẩm nội bộ" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:557 +#: order/serializers.py:640 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:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:643 +#: order/serializers.py:742 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:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 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:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 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:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "Những số sê ri sau đây đã được phân bổ" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:1657 +#: order/serializers.py:1753 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:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:1689 +#: order/serializers.py:1785 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:1767 +#: order/serializers.py:1868 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 +#: order/status_codes.py:17 order/status_codes.py:52 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 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "Đã trả lại" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "Đang tiến hành" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "Trả lại" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "Sửa chữa" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "Thay thế" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "Hoàn tiền" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "Từ chối" @@ -5426,87 +5987,93 @@ msgid "Edit order" msgstr "Chỉnh sửa đơn đặt" #: 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 "Hủy đơn đặt" - -#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Đơn đặt trùng" -#: 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" +msgstr "" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "Hủy đơn đặt" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 msgid "Issue Order" msgstr "Vấn đề đơn hàng" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 msgid "Mark order as complete" 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:97 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "Đơn đặt hoàn thành" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 msgid "Supplier part thumbnail" 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:110 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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:115 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "Mô tả đơn đặt" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 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:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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:167 -#: order/templates/order/sales_order_base.html:177 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "Chưa hoàn thành" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Đã cấp" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 msgid "Total cost" 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:243 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "Không thể tính tổng chi phí" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "Mã QR đơn đặt mua" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "Liên kết mã vạch đến đơn đặt mua" @@ -5559,13 +6126,13 @@ msgstr "Lựa chọn trùng lặp" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Xóa hàng" @@ -5666,31 +6233,31 @@ msgstr "In báo cáo đơn hàng trả lại" 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:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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:239 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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:259 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "Mã QR đơn hàng trả lại" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "Chi tiết đơn đặt" msgid "Print sales order report" msgstr "In báo cáo đơn hàng bán" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "Mục vận chuyển" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: 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:135 +#: order/templates/order/sales_order_base.html:138 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:173 +#: order/templates/order/sales_order_base.html:176 #: 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:321 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "Vận chuyển đang chờ xử lý" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "Chức năng" @@ -5775,35 +6343,21 @@ 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:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "ID sản phẩm" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "Tên sản phẩm" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "Mô tả sản phẩm" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "Phiên bản" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "Từ khóa" @@ -5815,7 +6369,8 @@ msgstr "Ảnh sản phẩm" msgid "Category ID" msgstr "ID danh mục" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "Tên danh mục" @@ -5827,11 +6382,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:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Biến thể của" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Kho tối thiểu" @@ -5839,169 +6394,183 @@ msgstr "Kho tối thiểu" msgid "Used In" msgstr "Sử dụng trong" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "Đang dựng" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "ID cha" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "Tên cha" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "Đưỡng dẫn danh mục" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Nguyên liệu" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "Cấp độ BOM" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "ID hàng hóa BOM" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "IPN cha" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "IPN sản phẩm" +#: part/admin.py:405 +msgid "Part Revision" +msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "Đơn đặt mua vào" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "Đơn hàng bán ra" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "Kho sản xuất bởi Đơn đặt bản dựng" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "Kho được yêu cầu cho đơn đặt bản dựng" -#: part/api.py:887 -msgid "Valid" -msgstr "Hợp lệ" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "Tùy chọn này phải được chọn" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "Danh mục" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "Điểm bán mặc định" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Tổng số lượng" @@ -6010,1042 +6579,1144 @@ 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:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 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:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: 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:104 +#: part/models.py:108 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:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Cấu trúc" -#: part/models.py:111 +#: part/models.py:115 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:120 +#: part/models.py:124 msgid "Default keywords" msgstr "Từ khóa mặc định" -#: part/models.py:121 +#: part/models.py:125 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:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "Biểu tượng" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "Biểu tượng (tùy chọn)" -#: part/models.py:150 +#: part/models.py:178 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:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "Lựa chọn sai cho sản phẩm cha" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, 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:595 +#: part/models.py:631 #, 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:660 +#: part/models.py:694 #, 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:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 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:845 +#: part/models.py:916 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:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 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:870 +#: part/models.py:950 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:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "Tên sản phẩm" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "Là Mẫu" -#: part/models.py:905 +#: part/models.py:988 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:915 +#: part/models.py:998 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:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "Mô tả (không bắt buộc)" -#: part/models.py:931 +#: part/models.py:1014 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:941 +#: part/models.py:1024 msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "Mã sản phẩm nội bộ" - -#: part/models.py:956 +#: part/models.py:1039 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:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "Hàng hóa này sẽ được cất vào đâu?" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "Nhà cung ứng mặc định" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "Nhà cung ứng sản phẩm mặc định" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "Hết hạn mặc định" -#: part/models.py:1036 +#: part/models.py:1129 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:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "Cấp độ kho tối thiểu được phép" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "Đơn vị đo cho sản phẩm này" -#: part/models.py:1061 +#: part/models.py:1154 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:1067 +#: part/models.py:1160 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:1073 +#: part/models.py:1166 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:1079 +#: part/models.py:1172 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:1085 +#: part/models.py:1178 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:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "Sản phẩm này đang hoạt động?" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 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:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "Giá trị tổng kiểm BOM" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "Giá trị tổng kiểm BOM đã được lưu" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "BOM kiểm tra bởi" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "Ngày kiểm tra BOM" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "Tạo người dùng" -#: part/models.py:1141 +#: part/models.py:1240 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:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "Kiểm kê cuối cùng" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:3028 +#: part/models.py:3109 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:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3066 +#: part/models.py:3147 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:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3073 +#: part/models.py:3154 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:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3080 +#: part/models.py:3161 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:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3087 +#: part/models.py:3168 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:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3094 +#: part/models.py:3175 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:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3101 +#: part/models.py:3182 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:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3108 +#: part/models.py:3189 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:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3143 +#: part/models.py:3224 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:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3189 +#: part/models.py:3270 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:3197 +#: part/models.py:3278 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:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "Ngày" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "Ghi chú bổ sung" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "Người dùng đã thực hiện đợt kiểm kê này" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3227 +#: part/models.py:3308 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:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3234 +#: part/models.py:3315 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:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "Báo cáo" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "Tệp báo cáo kiểm kê (được sinh nội bộ)" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "Bộ đếm sản phẩm" -#: part/models.py:3297 +#: part/models.py:3378 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:3307 +#: part/models.py:3388 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:3469 +#: part/models.py:3398 +msgid "Part Sale Price Break" +msgstr "" + +#: part/models.py:3510 +msgid "Part Test Template" +msgstr "" + +#: part/models.py:3536 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3490 part/models.py:3654 +#: part/models.py:3557 part/models.py:3726 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" -#: part/models.py:3501 +#: part/models.py:3568 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:3512 +#: part/models.py:3579 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3529 templates/js/translated/part.js:2880 +#: part/models.py:3596 templates/js/translated/part.js:2895 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3530 +#: part/models.py:3597 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3536 +#: part/models.py:3603 msgid "Test Key" msgstr "" -#: part/models.py:3537 +#: part/models.py:3604 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3544 +#: part/models.py:3611 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3545 +#: part/models.py:3612 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 msgid "Enabled" msgstr "Đã bật" -#: part/models.py:3549 +#: part/models.py:3616 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3555 +#: part/models.py:3622 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3560 templates/js/translated/part.js:2917 +#: part/models.py:3627 templates/js/translated/part.js:2932 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3561 +#: part/models.py:3628 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:3566 templates/js/translated/part.js:2924 +#: part/models.py:3633 templates/js/translated/part.js:2939 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3568 +#: part/models.py:3635 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:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "Lựa chọn" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 +#: part/models.py:3674 +msgid "Part Parameter Template" +msgstr "" + +#: part/models.py:3701 msgid "Checkbox parameters cannot have units" msgstr "Tham số hộp kiểm tra không thể có đơn vị" -#: part/models.py:3634 +#: part/models.py:3706 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:3671 +#: part/models.py:3743 msgid "Parameter template name must be unique" msgstr "Tên tham số mẫu phải là duy nhất" -#: part/models.py:3686 +#: part/models.py:3758 msgid "Parameter Name" msgstr "Tên tham số" -#: part/models.py:3693 +#: part/models.py:3765 msgid "Physical units for this parameter" msgstr "Đơn vị vật lý cho tham số này" -#: part/models.py:3701 +#: part/models.py:3773 msgid "Parameter description" msgstr "Mô tả tham số" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "Ô lựa chọn" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: part/models.py:3714 +#: part/models.py:3786 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:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "Sản phẩm cha" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Mẫu tham số" -#: part/models.py:3847 -msgid "Data" -msgstr "Dữ liệu" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "Giá trị tham số" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Giá trị mặc định" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "Giá trị tham số mặc định" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "Tên hoặc mã sản phẩm" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "Giá trị mã sản phẩm duy nhất" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "Giá trị IPN sản phẩm" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "Cấp độ" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "Cấp độ BOM" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4117 +#: part/models.py:4259 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:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Dư thừa" -#: part/models.py:4125 +#: part/models.py:4267 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:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 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:4164 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:4165 +#: part/models.py:4307 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:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 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:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4423 +#: part/models.py:4563 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:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4488 +#: part/models.py:4628 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:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Phụ mục" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "Loại tiền mua hàng của hàng hóa này" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "Chưa chọn sản phẩm" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "Chọn danh mục" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:458 +#: part/serializers.py:479 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:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "Sao chép thông số" -#: part/serializers.py:465 +#: part/serializers.py:486 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:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:492 +#: part/serializers.py:513 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:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:500 +#: part/serializers.py:521 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:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:533 +#: part/serializers.py:554 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:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:550 +#: part/serializers.py:571 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:559 +#: part/serializers.py:580 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:570 +#: part/serializers.py:591 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:577 +#: part/serializers.py:598 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:841 -msgid "External Stock" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" -#: part/serializers.py:843 +#: part/serializers.py:906 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:909 msgid "Variant Stock" msgstr "" -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 +#: part/serializers.py:939 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:877 +#: part/serializers.py:940 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:883 templates/js/translated/part.js:102 +#: part/serializers.py:946 templates/js/translated/part.js:103 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:884 +#: part/serializers.py:947 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:890 +#: part/serializers.py:953 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:891 +#: part/serializers.py:954 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:899 +#: part/serializers.py:962 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:900 +#: part/serializers.py:963 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:905 +#: part/serializers.py:968 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:906 +#: part/serializers.py:969 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:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1129 +#: part/serializers.py:1192 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:1139 +#: part/serializers.py:1202 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:1149 +#: part/serializers.py:1212 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:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "Ngoại trừ kho bên ngoài" -#: part/serializers.py:1156 +#: part/serializers.py:1219 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:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "Tạo báo cáo" -#: part/serializers.py:1162 +#: part/serializers.py:1225 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:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "Cập nhật sản phẩm" -#: part/serializers.py:1168 +#: part/serializers.py:1231 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:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "Chức năng kiểm kê chưa được bật" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, 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:1364 +#: part/serializers.py:1427 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:1367 +#: part/serializers.py:1430 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:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Có thể dựng" + +#: part/serializers.py:1835 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:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1743 +#: part/serializers.py:1844 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:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1749 +#: part/serializers.py:1850 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:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1755 +#: part/serializers.py:1856 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:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1761 +#: part/serializers.py:1862 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:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "Dọn dẹp BOM đang tồn tại" -#: part/serializers.py:1796 +#: part/serializers.py:1900 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:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "Chưa chỉ ra cột sản phẩm" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "Tìm thấy nhiều sản phẩm phù hợp" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "Không tìm thấy sản phẩm nào" -#: part/serializers.py:1876 +#: part/serializers.py:1982 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:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "Chưa cung cấp số lượng" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "Số lượng không hợp lệ" -#: part/serializers.py:1914 +#: part/serializers.py:2022 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:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "Tổng số lượng" @@ -7065,11 +7736,11 @@ msgstr "Báo cáo kiểm kê có sẵn" msgid "A new stocktake report is available for download" msgstr "Có sẵn một báo cáo kiểm kê mới để tải về" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "Thông báo sắp hết hàng" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Kho có sẵn cho {part.name} đã mất dưới mức cấu hình tối thiểu" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "Thực hiện kiểm kê cho danh mục hàng hóa này" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "Bạn đã được đăng ký nhận thông báo cho danh mục này" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "Đăng ký nhận thông báo cho danh mục này" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "Chức năng danh mục" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "Sửa danh mục" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "Sửa danh mục" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "Xóa danh mục" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "Xóa danh mục" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "Danh mục sản phẩm cấp đầu" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "Sản phẩm (bao gồm các phụ mục)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "Tạo sản phẩm mới" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Sản phẩm mới" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Thông số phụ tùng" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "Thêm danh mục sản phẩm mới" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "Danh mục mới" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" 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:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "Kiểm kê" @@ -7209,101 +7880,105 @@ msgstr "Mẫu kiểm thử sản phẩm" msgid "Add Test Template" msgstr "Thêm mẫu kiểm thử" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Phân bổ đơn hàng bán" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "Ghi chú sản phẩm" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "Biến thể sản phẩm" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "Tạo biến thể mới" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "Biến thể mới" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "Thêm tham số mới" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "Sản phẩm liên quan" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "Thêm liên quan" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Hóa đơn nguyên vật liệu" -#: part/templates/part/detail.html:260 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "Chức năng xuất dữ liệu" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Xuất BOM" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "Báo cáo in BOM" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "Chức năng BOM" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "Tải lên BOM" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "Xác minh BOM" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Thêm mục BOM" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "Lắp ráp" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "Bản dựng sản phẩm" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Phân bổ đơn hàng bản dựng" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "Nhà cung cấp sản phẩm" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "Nhà sản xuất sản phẩm" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ msgstr "Tải về mẫu nhập liệu sản phẩm" #: 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 +#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 msgid "Format" msgstr "Định dạng" #: 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "Chọn định dạng tệp" @@ -7362,7 +8037,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 templates/js/translated/label.js:143 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "In tem nhãn" @@ -7372,7 +8047,7 @@ msgstr "Hiện thông tin giá cả" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "Chức năng kho" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "Chức năng sản phẩm" @@ -7433,7 +8108,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:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "Chi tiết giá sản phẩm" @@ -7447,51 +8122,47 @@ msgstr "Phân bổ đến đơn đặt bản dựng" msgid "Allocated to Sales Orders" msgstr "Phân bổ đến đơn bán hàng" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Có thể dựng" - -#: part/templates/part/part_base.html:291 +#: part/templates/part/part_base.html:300 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:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Khoảng giá" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "Số seri mới nhất" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Tìm kiếm cho số sê ri" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "Mã QR sản phẩm" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "Liên kết mã vạch đến sản phẩm" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "Tính toán" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 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:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "Không tìm thấy hình ảnh phù hợp" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "Ẩn chi tiết sản phẩm" @@ -7545,13 +8216,13 @@ msgid "Variants" msgstr "Biến thể" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "Kiện hàng" @@ -7587,17 +8258,17 @@ msgstr "Ghi đè định giá sản phẩm" #: 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/helpers.js:103 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Sửa" -#: part/templates/part/prices.html:28 stock/admin.py:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "Cập nhật lần cuối" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "Cập nhập giá bán" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "Hết hàng" @@ -7749,7 +8420,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:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "Chưa chỉ ra hành động cụ thể" msgid "No matching action found" msgstr "Không tìm thấy chức năng phù hợp" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "Không tìm thấy dữ liệu mã vạch phù hợp" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Đã tìm thấy dữ liệu mã vạch phù hợp" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "Mã vạch phù hợp với hàng hóa hiện có" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "Không tìm thấy thông tin sản phẩm phù hợp" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "Không tìm thấy sản phẩm nhà cung cấp phù hợp" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "Tìm thấy nhiều sản phẩm nhà cung cấp phù hợp" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "Sản phẩm nhà cung cấp phù hợp" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "Hàng hóa này đã được nhận" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "Không phù hợp với mã vạch nhà cung cấp" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Kho không đủ hạn mức khả dụng" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "Không đủ thông tin" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "Tìm thấy nhiều sản phẩm nhà cung cấp cho mã vạch" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "Tìm thấy nhiều đơn đặt mua phù hợp với '{order}'" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "Không có đơn đặt mua phù hợp với '{order}'" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "Đơn đặt mua không phù hợp với nhà cung cấp" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "Không tìm thấy mục dòng chờ xử lý cho sản phẩm nhà cung cấp" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "Buộc phải nhập thông tin khác để nhận mục dòng này" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "Mục dòng đơn đặt mua đã nhận" @@ -7862,55 +8541,63 @@ msgstr "Mục dòng đơn đặt mua đã nhận" msgid "Scanned barcode data" msgstr "Thông tin mã vạch đã quét" -#: plugin/base/barcodes/serializers.py:81 +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:87 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order is not pending" msgstr "Đơn đặt mua không chờ xử lý" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:129 msgid "PurchaseOrder to receive items against" msgstr "Đơn đặt mua để nhận hàng hóa" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "Đơn đặt mua vẫn chưa được thực hiện" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "Địa điểm để nhận hàng hóa vào bên trong" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "Không thể chọn một địa điểm có cấu trúc" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "Số lượng cần phân bổ" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "In nhãn thất bại" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "Mã vạch InvenTree" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "Cung cấp hỗ trợ gốc cho mã vạch" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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 "Người đóng góp InvenTree" +#: plugin/builtin/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "Thông báo InvenTree" @@ -8000,10 +8711,12 @@ 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:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "Chế độ gỡ lỗi" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 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" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "Khổ giấy cho tờ nhãn" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "Bỏ qua nhãn" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "Bỏ qua số nhãn này khi in tờ nhãn" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "Viền" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 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:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "Ngang" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "In tờ viền theo khổ giấy nằm ngang" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "Máy in tờ nhãn InvenTree" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 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:99 +#: plugin/builtin/labels/label_sheet.py:107 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:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "Chưa tạo nhãn nào" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "Là phần bổ sung hoạt động" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "Đã cài đặt" @@ -8205,7 +8918,7 @@ msgstr "Plugin có sẵn" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "Phương thức" msgid "No author found" msgstr "Không tìm thấy tác giả" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, 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:600 +#: plugin/registry.py:537 #, 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:602 +#: plugin/registry.py:539 #, 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}" @@ -8356,12 +9069,8 @@ msgstr "" 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:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" 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/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "Pháp lý" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "Thư" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "Tên mẫu" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "Mẫu tên tệp" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "Bộ lọc" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "Khổ giấy cho báo cáo PDF" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "Tạo báo cáo theo hướng ngang" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "Chiều rộng [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "Chiều rộng nhãn, tính theo mm" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "Chiều cao [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "Chiều cao nhãn, tính theo mm" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "Mẫu trích" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "Tệp báo cáo mẫu" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "Mô tả tệp báo cáo mẫu" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "Tài sản" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "Tệp báo cáo tài sản" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "Mô tả tệp báo cáo tài sản" @@ -8588,10 +9297,10 @@ msgstr "Nhà cung cấp đã bị xóa" #: 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Đơn giá" @@ -8604,26 +9313,13 @@ msgstr "Bảng liệt kê mở rộng" #: 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 msgid "Total" msgstr "Tổng cộng" -#: 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 "Số sê-ri" - #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "Mục vị trí kho hàng" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "Kết quả kiểm tra" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "Thử nghiệm" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "Kết quả" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "Đạt" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "Không đạt" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "Không có kết quả (bắt buộc)" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "Không có kết quả" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Mục đã cài đặt" -#: 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "Sê-ri" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "Tệp tin tài sản không tồn tại" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "Không tìm thấy tệp hình ảnh" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "thẻ part_image yêu cầu 1 thực thể sản phẩm" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "thẻ company_image yêu cầu một thực thể doanh nghiệp" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 msgid "Location ID" msgstr "ID địa điểm" -#: stock/admin.py:54 stock/admin.py:176 -msgid "Location Name" -msgstr "Tên địa điểm" - -#: stock/admin.py:64 stock/templates/stock/location.html:131 -#: stock/templates/stock/location.html:137 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "Đường dẫn địa điểm" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "ID mặt hàng" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "Mã trạng thái" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "Sản phẩm nhà cung cấp" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "Tên nhà cung cấp" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "Tên nhà cung cấp" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "ID Khách hàng" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Đã cài đặt trong" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "ID bản dựng" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "ID đơn hàng bán" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "ID đơn đặt mua" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "Cần xem xét" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "Xóa khi thiếu hụt" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Địa điểm bên ngoài" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "Cây sản phẩm" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "Ngày hết hạn trước đó" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "Ngày hết hạn sau đó" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Ế" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "Bắt buộc nhập số lượng" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "Phải cung cấp sản phẩm hợp lệ" -#: stock/api.py:964 +#: stock/api.py:966 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:974 +#: stock/api.py:976 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:1005 +#: stock/api.py:1007 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:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "Loại vị trí kho hàng" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "Loại vị trí kho hàng" -#: stock/models.py:86 +#: stock/models.py:91 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:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:124 stock/templates/stock/location.html:186 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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:166 stock/models.py:949 +#: stock/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Chủ sở hữu" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "Chọn chủ sở hữu" -#: stock/models.py:175 +#: stock/models.py:189 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:182 templates/js/translated/stock.js:2781 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Bên ngoài" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "Đây là vị trí kho bên ngoài" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Loại vị trí" -#: stock/models.py:193 +#: stock/models.py:207 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:262 +#: stock/models.py:279 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:643 +#: stock/models.py:664 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:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 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:687 +#: stock/models.py:708 #, 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:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 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:700 +#: stock/models.py:721 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:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "Hàng hóa không thể thuộc về chính nó" -#: stock/models.py:729 +#: stock/models.py:748 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:742 +#: stock/models.py:761 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:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "Hàng trong kho cha" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "Sản phẩm cơ bản" -#: stock/models.py:780 +#: stock/models.py:799 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:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 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:811 +#: stock/models.py:830 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:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "Số lượng tồn kho" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "Bản dựng nguồn" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "Bản dựng cho hàng hóa này" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Tiêu thụ bởi" -#: stock/models.py:872 +#: stock/models.py:891 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:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "Đơn đặt mua nguồn" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "Đơn đặt mua cho hàng hóa này" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "Đơn hàng bán đích" -#: stock/models.py:902 +#: stock/models.py:921 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:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "Xóa khi thiếu hụt" -#: stock/models.py:921 +#: stock/models.py:940 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:941 +#: stock/models.py:960 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:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "Đã chuyển đổi sang sản phẩm" -#: stock/models.py:1490 +#: stock/models.py:1511 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:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "Số lượng phải là số nguyên" -#: stock/models.py:1504 +#: stock/models.py:1525 #, 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:1510 +#: stock/models.py:1531 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:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "Số lượng không khớp với số sêri" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "Số sêri đã tồn tại" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 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:1642 +#: stock/models.py:1663 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:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "Hàng trong kho chứa hàng hóa khác" -#: stock/models.py:1648 +#: stock/models.py:1669 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:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "Hàng trong kho hiện đang sản xuất" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" -#: stock/models.py:1665 +#: stock/models.py:1686 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:1673 +#: stock/models.py:1694 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:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "Mã trạng thái kho phải phù hợp" -#: stock/models.py:1905 +#: stock/models.py:1960 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:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "Ghi chú đầu vào" -#: stock/models.py:2394 +#: stock/models.py:2414 +msgid "Stock Item Test Result" +msgstr "" + +#: stock/models.py:2447 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:2399 +#: stock/models.py:2452 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:2404 +#: stock/models.py:2457 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2428 +#: stock/models.py:2542 msgid "Test result" msgstr "Kết quả kiểm thử" -#: stock/models.py:2435 +#: stock/models.py:2549 msgid "Test output value" msgstr "Giá trị đầu ra kiểm thử" -#: stock/models.py:2443 +#: stock/models.py:2557 msgid "Test result attachment" msgstr "Đính kèm kết quả kiểm thử" -#: stock/models.py:2447 +#: stock/models.py:2561 msgid "Test notes" msgstr "Ghi chú kiểm thử" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "Số sêri quá lớn" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Mục cha" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 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:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Đã hết hạn" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Mục con" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 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:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 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:609 +#: stock/serializers.py:674 #, 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:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "Điền số sêri cho hàng hóa mới" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "Vị trí kho đích" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" -#: stock/serializers.py:644 +#: stock/serializers.py:709 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:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "Chọn mặt hàng để lắp đặt" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "Số lượng để cài đặt" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "Nhập số lượng hàng hóa để cài đặt" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "Thêm ghi chú giao dịch (tùy chọn)" -#: stock/serializers.py:720 +#: stock/serializers.py:785 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:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "Mặt hàng không khả dụng" -#: stock/serializers.py:739 +#: stock/serializers.py:804 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:752 +#: stock/serializers.py:817 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:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 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:835 +#: stock/serializers.py:930 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:852 +#: stock/serializers.py:947 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:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "Vị trí đích dành cho hàng hóa trả lại" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "Chọn mặt hàng để đổi trạng thái" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "Không có mặt hàng nào được chọn" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Kho phụ" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "Sản phẩm phải có thể bán được" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 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:1209 +#: stock/serializers.py:1306 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:1233 +#: stock/serializers.py:1330 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:1239 +#: stock/serializers.py:1336 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:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "Ghi chú phân bổ kho" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 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:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "Ghi chú gộp kho" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "Cho phép nhiều nhà cung không khớp" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 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:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "Cho phép trạng thái không khớp" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 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:1358 +#: stock/serializers.py:1455 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:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "Giá trị khóa chính mặt hàng" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "Mã trạng thái mặt hàng" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "Ghi chú giao dịch kho" @@ -9375,7 +10117,7 @@ msgstr "Đã cách ly" 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 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "Kho hàng đã được khởi tạo" @@ -9431,7 +10173,7 @@ msgstr "Tách từ mục cha" msgid "Split child item" msgstr "Tách mục con" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "Kho hàng đã được gộp" @@ -9451,7 +10193,7 @@ msgstr "Đầu ra đơn đặt bản dựng đã hoàn thành" 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 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "Tiêu hao bởi đơn đặt bản dựng" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "Xóa dữ liệu báo cáo kiểm thử" @@ -9512,15 +10254,15 @@ msgstr "Ghi chú tại kho hàng" msgid "Installed Stock Items" msgstr "Hàng hóa đã lắp đặt" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 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:264 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:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "Quét vào điểm bán" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "Chức năng in" @@ -9543,17 +10285,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:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "Đếm hàng" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "Thêm hàng" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "Xóa hàng hóa" @@ -9562,12 +10304,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:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "Chuyển giao hàng" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "Chỉ định cho khách hàng" @@ -9608,14 +10350,10 @@ 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:2123 templates/navbar.html:38 +#: templates/js/translated/build.js:2295 templates/navbar.html:38 msgid "Build" msgstr "Dựng" -#: stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Mục cha" - #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Chưa đặt nhà sản xuất" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Bạn không thuộc danh sách chủ sở hữu hàng hóa này. Mặt hàng này không thể sửa đổi." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "Chỉ đọc" @@ -9669,12 +10407,8 @@ msgstr "trang tiếp theo" msgid "Navigate to next serial number" msgstr "Điều hướng đến số sêri tiếp" -#: stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Số lượng sẵn có" - #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2380 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "Không có vị trí nào được đặt" @@ -9691,11 +10425,6 @@ msgstr "Mặt hàng không đạt toàn bộ yêu cầu thử nghiệm" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Mặt hàng này hết hạn vào %(item.expiry_date)s" -#: stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:435 users/models.py:174 -msgid "Expired" -msgstr "Đã hết hạn" - #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "Chưa thực hiện kiểm kê" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "Thao tác này không thể khôi phục lại một cách dễ dàng" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "Tạo hàng hóa tuần tự từ mặt hàng này." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Chọn số lượng cần tuần tự hóa và số sêri duy nhất." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "Thực hiện kiểm kê cho vị trí kho này" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "Xác định vị trí kho" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "Quét các mặt hàng vào vị trí kho này" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "Quét vào trong mặt hàng" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "Quét kho chứa vào trong vị trí kho này" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "Quét vào trong bộ chứa" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "In báo cáo vị trí" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "Chức năng vị trí" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "Sửa vị trí" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "Xóa vị trí" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "Vị trí kho cấp đầu" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "Chủ sở hữu vị trí" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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:176 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "Tạo mới vị trí kho" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "Vị trí mới" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "Theo dõi tồn kho" msgid "Allocations" msgstr "Phân bổ" -#: stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Mục con" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Quyền truy cập bị từ chối" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "Cài đặt sản phẩm" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "Nhập hàng hóa" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "Nhập sản phẩm" @@ -10207,7 +10932,7 @@ msgstr "Đường dẫn cài đặt" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "Gắn liền" @@ -10217,7 +10942,7 @@ msgstr "Đây là phần bổ sung có sẵn nên không thể tắt được" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "Mẫu" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "Xóa" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "Loại vị trí mới" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "Trang chủ" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "Cài đặt tài khoản" msgid "Change Password" msgstr "Đổi mật khẩu" -#: templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Tên người dùng" - -#: templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Tên" - -#: templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Họ" - #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Địa chỉ email sau đã được liên kết với tài khoản của bạn:" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "Gửi báo cáo lỗi" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "sao chép đến bảng tạm" @@ -10779,7 +11492,7 @@ msgstr "Xác nhận địa chỉ email" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Xin hãy xác nhận rằng %(email)s là địa chỉ email cho người dùng %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "Xác nhận" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "Số lượng bắt buộc" @@ -11026,15 +11739,15 @@ 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:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "Số lượng tối thiểu" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Quét mã vạch" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 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:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Gửi" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "Sẽ tải thông báo ở đây" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "Thêm" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "Thiết lập email" msgid "Email settings not configured" msgstr "Chưa cấu hình thiết lập email" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Có" @@ -14359,35 +15153,34 @@ msgstr "Lần cuối mã thông báo được sử dụng" msgid "Revoked" msgstr "Đã thu hồi" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "Quyền hạn đã đặt" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "Nhóm" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "Xem" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "Quyền để xem mục" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "Quyền để thêm mục" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "Đổi" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "Quyển để sửa mục" -#: users/models.py:413 +#: users/models.py:408 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 339c453b06..78eda11591 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-06-11 02:04+0000\n" -"PO-Revision-Date: 2024-06-11 23:04\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" +"PO-Revision-Date: 2024-08-07 21:47\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -52,30 +52,34 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "" @@ -88,258 +92,270 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, 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 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Bulgarian" +msgid "Arabic" msgstr "" #: InvenTree/locales.py:19 -msgid "Czech" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:20 -msgid "Danish" +msgid "Czech" msgstr "" #: InvenTree/locales.py:21 -msgid "German" +msgid "Danish" msgstr "" #: InvenTree/locales.py:22 -msgid "Greek" +msgid "German" msgstr "" #: InvenTree/locales.py:23 -msgid "English" +msgid "Greek" msgstr "" #: InvenTree/locales.py:24 -msgid "Spanish" +msgid "English" msgstr "" #: InvenTree/locales.py:25 -msgid "Spanish (Mexican)" +msgid "Spanish" msgstr "" #: InvenTree/locales.py:26 -msgid "Farsi / Persian" +msgid "Spanish (Mexican)" msgstr "" #: InvenTree/locales.py:27 -msgid "Finnish" +msgid "Estonian" msgstr "" #: InvenTree/locales.py:28 -msgid "French" +msgid "Farsi / Persian" msgstr "" #: InvenTree/locales.py:29 -msgid "Hebrew" +msgid "Finnish" msgstr "" #: InvenTree/locales.py:30 -msgid "Hindi" +msgid "French" msgstr "" #: InvenTree/locales.py:31 -msgid "Hungarian" +msgid "Hebrew" msgstr "" #: InvenTree/locales.py:32 -msgid "Italian" +msgid "Hindi" msgstr "" #: InvenTree/locales.py:33 -msgid "Japanese" +msgid "Hungarian" msgstr "" #: InvenTree/locales.py:34 -msgid "Korean" +msgid "Italian" msgstr "" #: InvenTree/locales.py:35 -msgid "Latvian" +msgid "Japanese" msgstr "" #: InvenTree/locales.py:36 -msgid "Dutch" +msgid "Korean" msgstr "" #: InvenTree/locales.py:37 -msgid "Norwegian" +msgid "Latvian" msgstr "" #: InvenTree/locales.py:38 -msgid "Polish" +msgid "Dutch" msgstr "" #: InvenTree/locales.py:39 -msgid "Portuguese" +msgid "Norwegian" msgstr "" #: InvenTree/locales.py:40 -msgid "Portuguese (Brazilian)" +msgid "Polish" msgstr "" #: InvenTree/locales.py:41 -msgid "Romanian" +msgid "Portuguese" msgstr "" #: InvenTree/locales.py:42 -msgid "Russian" +msgid "Portuguese (Brazilian)" msgstr "" #: InvenTree/locales.py:43 -msgid "Slovak" +msgid "Romanian" msgstr "" #: InvenTree/locales.py:44 -msgid "Slovenian" +msgid "Russian" msgstr "" #: InvenTree/locales.py:45 -msgid "Serbian" +msgid "Slovak" msgstr "" #: InvenTree/locales.py:46 -msgid "Swedish" +msgid "Slovenian" msgstr "" #: InvenTree/locales.py:47 -msgid "Thai" +msgid "Serbian" msgstr "" #: InvenTree/locales.py:48 -msgid "Turkish" +msgid "Swedish" msgstr "" #: InvenTree/locales.py:49 -msgid "Ukrainian" +msgid "Thai" msgstr "" #: InvenTree/locales.py:50 -msgid "Vietnamese" +msgid "Turkish" msgstr "" #: InvenTree/locales.py:51 -msgid "Chinese (Simplified)" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:52 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:53 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -348,257 +364,165 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -608,89 +532,142 @@ msgstr "" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +msgid "Email address of the user" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +msgid "Is this user account active" +msgstr "" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "" @@ -702,27 +679,27 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "" @@ -750,62 +727,63 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -816,59 +794,72 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:131 +#: build/models.py:135 +msgid "Assembly BOM has not been validated" +msgstr "" + +#: build/models.py:142 +msgid "Build order cannot be created for an inactive part" +msgstr "" + +#: build/models.py:149 +msgid "Build order cannot be created for an unlocked part" +msgstr "" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:221 +#: build/models.py:253 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -879,178 +870,185 @@ msgstr "" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:381 msgid "Build Priority" msgstr "" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1058,65 +1056,66 @@ msgstr "" msgid "Project Code" msgstr "" -#: build/models.py:360 +#: build/models.py:392 msgid "Project code for this build order" msgstr "" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1377 +#: build/models.py:1475 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1125,414 +1124,552 @@ msgstr "" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "" -#: build/models.py:1392 +#: build/models.py:1490 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1562 +#: build/models.py:1660 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +msgid "Project Code Label" +msgstr "" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "" -#: build/serializers.py:301 +#: build/serializers.py:311 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:341 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:356 stock/api.py:1031 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:442 +#: build/serializers.py:452 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:448 +#: build/serializers.py:458 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:612 +#: build/serializers.py:649 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:650 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +msgid "Build order must be in production state" +msgstr "" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:810 msgid "Build Line" msgstr "" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:864 msgid "Build Line Item" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +msgid "Supplier Part Number" +msgstr "" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +msgid "Build Reference" +msgstr "" + +#: build/serializers.py:1177 +msgid "BOM Reference" +msgstr "" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +msgid "BOM Part ID" +msgstr "" + +#: build/serializers.py:1188 +msgid "BOM Part Name" +msgstr "" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +msgid "Allocated Quantity" +msgstr "" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +msgid "Part Category ID" +msgstr "" + +#: build/serializers.py:1275 +msgid "Part Category Name" +msgstr "" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" +#: build/serializers.py:1315 +msgid "Available Substitute Stock" +msgstr "" + +#: build/serializers.py:1316 +msgid "Available Variant Stock" +msgstr "" + +#: build/serializers.py:1317 +msgid "Total Available Stock" +msgstr "" + +#: build/serializers.py:1318 part/serializers.py:904 +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "" @@ -1540,15 +1677,21 @@ msgstr "" msgid "Production" msgstr "" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "" @@ -1576,8 +1719,8 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1588,7 +1731,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1599,9 +1742,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1612,7 +1755,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1636,87 +1779,100 @@ 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:76 +msgid "Hold Build" +msgstr "" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +msgid "Isueue Build" +msgstr "" + +#: build/templates/build/build_base.html:88 +msgid "Issue Build" +msgstr "" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1726,31 +1882,39 @@ msgstr "" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +msgid "Issue Build Order" +msgstr "" + +#: build/templates/build/build_base.html:271 +msgid "Issue this Build Order?" +msgstr "" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 msgid "Link Barcode to Build Order" msgstr "" @@ -1766,8 +1930,8 @@ msgstr "" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "" @@ -1779,23 +1943,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "" @@ -1804,8 +1968,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "" @@ -1813,12 +1977,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" +msgid "Build Order Line Items" msgstr "" #: build/templates/build/detail.html:181 @@ -1841,7 +2005,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "" @@ -1870,15 +2034,19 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +msgid "Build test statistics" +msgstr "" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1888,25 +2056,25 @@ msgstr "" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "" @@ -1914,10 +2082,37 @@ msgstr "" msgid "Build Order Details" msgstr "" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +msgid "Test Statistics" +msgstr "" + +#: common/api.py:692 +msgid "Is Link" +msgstr "" + +#: common/api.py:700 +msgid "Is File" +msgstr "" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 msgid "Invalid currency code" msgstr "" @@ -1930,7 +2125,7 @@ msgstr "" msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:153 +#: common/currency.py:156 msgid "No plugin" msgstr "" @@ -1972,1606 +2167,1662 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 msgid "Project description" msgstr "" -#: common/models.py:144 +#: common/models.py:166 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1221 +#: common/models.py:1240 msgid "Pending migrations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 msgid "List of supported currency codes" msgstr "" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +msgid "Barcode Show Data" +msgstr "" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +msgid "Barcode Generation Plugin" +msgstr "" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 msgid "Part Revisions" msgstr "" -#: common/models.py:1395 +#: common/models.py:1426 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1656 +#: common/models.py:1694 msgid "Log Report Errors" msgstr "" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 -msgid "Block Until Tests Pass" +#: common/models.py:1822 +msgid "Require Active Part" msgstr "" -#: common/models.py:1785 -msgid "Prevent build outputs from being completed until all required tests pass" +#: common/models.py:1823 +msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1791 -msgid "Enable Return Orders" +#: common/models.py:1828 +msgid "Require Locked Part" msgstr "" -#: common/models.py:1792 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1797 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1799 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1811 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1813 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1819 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1821 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1833 -msgid "Sales Order Default Shipment" +#: common/models.py:1829 +msgid "Prevent build order creation for unlocked parts" msgstr "" #: common/models.py:1834 -msgid "Enable creation of default shipment with sales orders" +msgid "Require Valid BOM" msgstr "" -#: common/models.py:1839 -msgid "Edit Completed Sales Orders" +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/models.py:1841 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1842 +msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1847 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1844 +msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1849 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1850 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1855 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1851 +msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1857 -msgid "Required pattern for generating Purchase Order reference field" +#: common/models.py:1856 +msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1869 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1858 +msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1871 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1870 +msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1877 -msgid "Auto Complete Purchase Orders" +#: common/models.py:1872 +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1879 -msgid "Automatically mark purchase orders as complete when all line items are received" +#: common/models.py:1878 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1886 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1887 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1880 +msgid "Required pattern for generating Sales Order reference field" msgstr "" #: common/models.py:1892 -msgid "Enable registration" +msgid "Sales Order Default Shipment" msgstr "" #: common/models.py:1893 -msgid "Enable self-registration for users on the login pages" +msgid "Enable creation of default shipment with sales orders" msgstr "" #: common/models.py:1898 -msgid "Enable SSO" +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1899 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1904 -msgid "Enable SSO registration" +#: common/models.py:1900 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" #: common/models.py:1906 -msgid "Enable self-registration via SSO for users on the login pages" +msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1908 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1914 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1916 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1928 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" +#: common/models.py:1930 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" +#: common/models.py:1936 +msgid "Auto Complete Purchase Orders" msgstr "" #: common/models.py:1938 -msgid "Allowed domains" +msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" +#: common/models.py:1945 +msgid "Enable password forgot" msgstr "" #: common/models.py:1946 -msgid "Group on signup" +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1951 +msgid "Enable registration" msgstr "" #: common/models.py:1952 -msgid "Enforce MFA" +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1953 -msgid "Users must use multifactor security." +#: common/models.py:1957 +msgid "Enable SSO" msgstr "" #: common/models.py:1958 -msgid "Check plugins on startup" +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1963 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1968 -msgid "Check for plugin updates" +#: common/models.py:1965 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1975 -msgid "Enable URL integration" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1982 -msgid "Enable navigation integration" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 -msgid "Enable plugins to respond to internal events" +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2010 -msgid "Enable project codes" +#: common/models.py:2009 +msgid "Auto-fill SSO users" msgstr "" #: common/models.py:2011 -msgid "Enable project codes for tracking projects" +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2016 -msgid "Stocktake Functionality" +#: common/models.py:2017 +msgid "Mail twice" msgstr "" #: common/models.py:2018 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" msgstr "" #: common/models.py:2024 -msgid "Exclude External Locations" +msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2026 -msgid "Exclude stock items in external locations from stocktake calculations" +#: common/models.py:2029 +msgid "Allowed domains" msgstr "" -#: common/models.py:2032 -msgid "Automatic Stocktake Period" +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2034 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" +#: common/models.py:2037 +msgid "Group on signup" msgstr "" -#: common/models.py:2040 -msgid "Report Deletion Interval" +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/models.py:2042 -msgid "Stocktake reports will be deleted after specified number of days" +#: common/models.py:2045 +msgid "Enforce MFA" msgstr "" -#: common/models.py:2049 -msgid "Display Users full names" +#: common/models.py:2046 +msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2050 -msgid "Display Users full names instead of usernames" +#: common/models.py:2051 +msgid "Check plugins on startup" msgstr "" -#: common/models.py:2055 -msgid "Enable Test Station Data" +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2056 -msgid "Enable test station data collection for test results" +#: common/models.py:2061 +msgid "Check for plugin updates" msgstr "" -#: common/models.py:2068 common/models.py:2478 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2103 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2104 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2109 +msgid "Stocktake Functionality" msgstr "" #: common/models.py:2111 -msgid "Hide inactive parts" +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2113 -msgid "Hide inactive parts in results displayed on the homepage" +#: common/models.py:2117 +msgid "Exclude External Locations" msgstr "" #: common/models.py:2119 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2120 -msgid "Show subscribed parts on the homepage" +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" #: common/models.py:2125 -msgid "Show subscribed categories" +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2126 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:2127 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2131 -msgid "Show latest parts" +#: common/models.py:2133 +msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2132 -msgid "Show latest parts on the homepage" +#: common/models.py:2135 +msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2137 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2138 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:2142 +msgid "Display Users full names" msgstr "" #: common/models.py:2143 -msgid "Show recent stock changes" +msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2144 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:2148 +msgid "Enable Test Station Data" msgstr "" #: common/models.py:2149 -msgid "Show low stock" +msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2150 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2155 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2156 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2161 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2162 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2167 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2168 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2173 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2174 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2179 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2180 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2185 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2186 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2191 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2192 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2197 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2198 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2203 -msgid "Show outstanding SOs" +#: common/models.py:2161 common/models.py:2541 +msgid "Settings key (must be unique - case insensitive" msgstr "" #: common/models.py:2204 -msgid "Show outstanding SOs on the homepage" +msgid "Hide inactive parts" msgstr "" -#: common/models.py:2209 -msgid "Show overdue SOs" +#: common/models.py:2206 +msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2210 -msgid "Show overdue SOs on the homepage" +#: common/models.py:2212 +msgid "Show subscribed parts" msgstr "" -#: common/models.py:2215 -msgid "Show pending SO shipments" +#: common/models.py:2213 +msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2216 -msgid "Show pending SO shipments on the homepage" +#: common/models.py:2218 +msgid "Show subscribed categories" msgstr "" -#: common/models.py:2221 -msgid "Show News" +#: common/models.py:2219 +msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2222 -msgid "Show news on the homepage" +#: common/models.py:2224 +msgid "Show latest parts" msgstr "" -#: common/models.py:2227 -msgid "Inline label display" +#: common/models.py:2225 +msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2229 -msgid "Display PDF labels in the browser, instead of downloading as a file" +#: common/models.py:2230 +msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2235 -msgid "Default label printer" +#: common/models.py:2231 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2236 +msgid "Show recent stock changes" msgstr "" #: common/models.py:2237 -msgid "Configure which label printer should be selected by default" +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2242 +msgid "Show low stock" msgstr "" #: common/models.py:2243 -msgid "Inline report display" +msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2245 -msgid "Display PDF reports in the browser, instead of downloading as a file" +#: common/models.py:2248 +msgid "Show depleted stock" msgstr "" -#: common/models.py:2251 -msgid "Search Parts" +#: common/models.py:2249 +msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2252 -msgid "Display parts in search preview window" +#: common/models.py:2254 +msgid "Show needed stock" msgstr "" -#: common/models.py:2257 -msgid "Search Supplier Parts" +#: common/models.py:2255 +msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2258 -msgid "Display supplier parts in search preview window" +#: common/models.py:2260 +msgid "Show expired stock" msgstr "" -#: common/models.py:2263 -msgid "Search Manufacturer Parts" +#: common/models.py:2261 +msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2264 -msgid "Display manufacturer parts in search preview window" +#: common/models.py:2266 +msgid "Show stale stock" msgstr "" -#: common/models.py:2269 -msgid "Hide Inactive Parts" +#: common/models.py:2267 +msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2270 -msgid "Excluded inactive parts from search preview window" +#: common/models.py:2272 +msgid "Show pending builds" msgstr "" -#: common/models.py:2275 -msgid "Search Categories" +#: common/models.py:2273 +msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2276 -msgid "Display part categories in search preview window" +#: common/models.py:2278 +msgid "Show overdue builds" msgstr "" -#: common/models.py:2281 -msgid "Search Stock" +#: common/models.py:2279 +msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2282 -msgid "Display stock items in search preview window" +#: common/models.py:2284 +msgid "Show outstanding POs" msgstr "" -#: common/models.py:2287 -msgid "Hide Unavailable Stock Items" +#: common/models.py:2285 +msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2289 -msgid "Exclude stock items which are not available from the search preview window" +#: common/models.py:2290 +msgid "Show overdue POs" msgstr "" -#: common/models.py:2295 -msgid "Search Locations" +#: common/models.py:2291 +msgid "Show overdue POs on the homepage" msgstr "" #: common/models.py:2296 -msgid "Display stock locations in search preview window" +msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2301 -msgid "Search Companies" +#: common/models.py:2297 +msgid "Show outstanding SOs on the homepage" msgstr "" #: common/models.py:2302 -msgid "Display companies in search preview window" +msgid "Show overdue SOs" msgstr "" -#: common/models.py:2307 -msgid "Search Build Orders" +#: common/models.py:2303 +msgid "Show overdue SOs on the homepage" msgstr "" #: common/models.py:2308 -msgid "Display build orders in search preview window" +msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2313 -msgid "Search Purchase Orders" +#: common/models.py:2309 +msgid "Show pending SO shipments on the homepage" msgstr "" #: common/models.py:2314 -msgid "Display purchase orders in search preview window" +msgid "Show News" msgstr "" -#: common/models.py:2319 -msgid "Exclude Inactive Purchase Orders" +#: common/models.py:2315 +msgid "Show news on the homepage" msgstr "" -#: common/models.py:2321 -msgid "Exclude inactive purchase orders from search preview window" +#: common/models.py:2320 +msgid "Inline label display" msgstr "" -#: common/models.py:2327 -msgid "Search Sales Orders" +#: common/models.py:2322 +msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" #: common/models.py:2328 -msgid "Display sales orders in search preview window" +msgid "Default label printer" msgstr "" -#: common/models.py:2333 -msgid "Exclude Inactive Sales Orders" +#: common/models.py:2330 +msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2335 -msgid "Exclude inactive sales orders from search preview window" +#: common/models.py:2336 +msgid "Inline report display" msgstr "" -#: common/models.py:2341 -msgid "Search Return Orders" +#: common/models.py:2338 +msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2342 -msgid "Display return orders in search preview window" +#: common/models.py:2344 +msgid "Search Parts" msgstr "" -#: common/models.py:2347 -msgid "Exclude Inactive Return Orders" +#: common/models.py:2345 +msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2349 -msgid "Exclude inactive return orders from search preview window" +#: common/models.py:2350 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2355 -msgid "Search Preview Results" +#: common/models.py:2351 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2356 +msgid "Search Manufacturer Parts" msgstr "" #: common/models.py:2357 -msgid "Number of results to show in each section of the search preview window" +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2362 +msgid "Hide Inactive Parts" msgstr "" #: common/models.py:2363 -msgid "Regex Search" +msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2364 -msgid "Enable regular expressions in search queries" +#: common/models.py:2368 +msgid "Search Categories" msgstr "" #: common/models.py:2369 -msgid "Whole Word Search" +msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2370 -msgid "Search queries return results for whole word matches" +#: common/models.py:2374 +msgid "Search Stock" msgstr "" #: common/models.py:2375 -msgid "Show Quantity in Forms" +msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2376 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2381 -msgid "Escape Key Closes Forms" +#: common/models.py:2380 +msgid "Hide Unavailable Stock Items" msgstr "" #: common/models.py:2382 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2387 -msgid "Fixed Navbar" +msgid "Exclude stock items which are not available from the search preview window" msgstr "" #: common/models.py:2388 -msgid "The navbar position is fixed to the top of the screen" +msgid "Search Locations" msgstr "" -#: common/models.py:2393 -msgid "Date Format" +#: common/models.py:2389 +msgid "Display stock locations in search preview window" msgstr "" #: common/models.py:2394 -msgid "Preferred format for displaying dates" +msgid "Search Companies" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2395 +msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 -msgid "Display part scheduling information" +#: common/models.py:2400 +msgid "Search Build Orders" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2401 +msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2415 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2406 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2407 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2412 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2414 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2420 +msgid "Search Sales Orders" msgstr "" #: common/models.py:2421 -msgid "Table String Length" +msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2423 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2426 +msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2429 -msgid "Default part label template" +#: common/models.py:2428 +msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2430 -msgid "The part label template to be automatically selected" +#: common/models.py:2434 +msgid "Search Return Orders" msgstr "" #: common/models.py:2435 -msgid "Default stock item template" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" +#: common/models.py:2440 +msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2443 -msgid "Default stock location label template" +#: common/models.py:2442 +msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" +#: common/models.py:2448 +msgid "Search Preview Results" msgstr "" -#: common/models.py:2451 -msgid "Default build line label template" +#: common/models.py:2450 +msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" +#: common/models.py:2456 +msgid "Regex Search" msgstr "" -#: common/models.py:2459 +#: common/models.py:2457 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2462 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2463 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2468 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2469 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2474 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2475 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2480 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2481 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2486 +msgid "Date Format" +msgstr "" + +#: common/models.py:2487 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2500 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2501 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2506 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2508 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2514 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2516 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3581,42 +3832,97 @@ msgstr "" msgid "Image" msgstr "" -#: common/models.py:2960 +#: common/models.py:3032 msgid "Image file" msgstr "" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 msgid "Target model type for this image" msgstr "" -#: common/models.py:2976 +#: common/models.py:3048 msgid "Target model ID for this image" msgstr "" -#: common/models.py:3017 +#: common/models.py:3070 +msgid "Custom Unit" +msgstr "" + +#: common/models.py:3091 +msgid "Unit symbol must be unique" +msgstr "" + +#: common/models.py:3106 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3036 +#: common/models.py:3125 msgid "Unit name" msgstr "" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "" + +#: common/models.py:3272 +msgid "Attachment comment" +msgstr "" + +#: common/models.py:3288 +msgid "Upload date" +msgstr "" + +#: common/models.py:3289 +msgid "Date the file was uploaded" +msgstr "" + +#: common/models.py:3293 +msgid "File size" +msgstr "" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3635,7 +3941,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3651,79 +3957,99 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock time" msgstr "" -#: common/serializers.py:403 +#: common/serializers.py:412 msgid "Task name" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function" msgstr "" -#: common/serializers.py:405 +#: common/serializers.py:414 msgid "Function name" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Arguments" msgstr "" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +msgid "No attachment model type provided" +msgstr "" + +#: common/validators.py:41 +msgid "Invalid attachment model type" +msgstr "" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" @@ -3766,402 +4092,432 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 msgid "Part is Active" msgstr "" -#: company/api.py:168 +#: company/api.py:145 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:317 +#: company/api.py:278 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:321 +#: company/api.py:282 msgid "Internal Part is Active" msgstr "" -#: company/api.py:325 +#: company/api.py:286 msgid "Supplier is Active" msgstr "" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/models.py:117 msgid "Company description" msgstr "" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "" -#: company/models.py:160 +#: company/models.py:163 msgid "Is this company active?" msgstr "" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +msgid "Is customer" msgstr "" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +msgid "Is supplier" msgstr "" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +msgid "Is manufacturer" msgstr "" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:186 +#: company/models.py:189 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" +#: company/models.py:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" msgstr "" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/models.py:372 msgid "Select company" msgstr "" -#: company/models.py:388 +#: company/models.py:377 msgid "Address title" msgstr "" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 msgid "Primary address" msgstr "" -#: company/models.py:396 +#: company/models.py:385 msgid "Set as primary address" msgstr "" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 msgid "Address line 1" msgstr "" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 msgid "Address line 2" msgstr "" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 msgid "Address country" msgstr "" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 msgid "Internal shipping notes" msgstr "" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 +msgid "Manufacturer Part Parameter" +msgstr "" + +#: company/models.py:594 msgid "Parameter name" msgstr "" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +msgid "Supplier Price Break" +msgstr "" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +msgid "Company Name" +msgstr "" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4172,8 +4528,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4212,7 +4568,7 @@ msgstr "" #: 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 +#: report/templates/report/inventree_test_report.html:162 msgid "Part image" msgstr "" @@ -4231,17 +4587,17 @@ msgstr "" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "" @@ -4249,19 +4605,12 @@ msgstr "" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4270,19 +4619,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "" @@ -4298,7 +4647,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "" @@ -4311,7 +4660,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "" @@ -4325,7 +4674,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4348,7 +4697,7 @@ msgstr "" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4420,7 +4769,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4435,7 +4784,8 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "" @@ -4445,7 +4795,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4454,19 +4804,23 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +msgid "Manufacturer Part Notes" +msgstr "" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "" @@ -4490,19 +4844,6 @@ msgstr "" 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" @@ -4511,7 +4852,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "" @@ -4544,12 +4885,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4558,13 +4899,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4582,29 +4923,33 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +msgid "Supplier Part Notes" +msgstr "" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -4630,10 +4975,6 @@ msgstr "" 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 "" @@ -4642,48 +4983,228 @@ msgstr "" msgid "Placed" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +msgid "Invalid export format" +msgstr "" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +msgid "Data file to import" +msgstr "" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +msgid "Import status" +msgstr "" + +#: importer/models.py:94 +msgid "Field Defaults" +msgstr "" + +#: importer/models.py:101 +msgid "Field Overrides" +msgstr "" + +#: importer/models.py:108 +msgid "Field Filters" +msgstr "" + +#: importer/models.py:230 +msgid "Some required fields have not been mapped" +msgstr "" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +msgid "Import Session" +msgstr "" + +#: importer/models.py:426 +msgid "Field" +msgstr "" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +msgid "Unsupported data file format" +msgstr "" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +msgid "Invalid data file dimensions" +msgstr "" + +#: importer/serializers.py:91 +msgid "Invalid field defaults" +msgstr "" + +#: importer/serializers.py:104 +msgid "Invalid field overrides" +msgstr "" + +#: importer/serializers.py:117 +msgid "Invalid field filters" +msgstr "" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +msgid "No rows provided" +msgstr "" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +msgid "Row has already been completed" +msgstr "" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +msgid "Importing Data" +msgstr "" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +msgid "Data file exceeds maximum size limit" +msgstr "" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +msgid "Value must be a valid dictionary object" +msgstr "" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4723,10 +5244,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -4743,78 +5260,78 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 msgid "Order Complete" msgstr "" -#: order/api.py:462 +#: order/api.py:450 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/models.py:91 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4830,7 +5347,7 @@ msgstr "" msgid "Select project code for this order" msgstr "" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -4854,534 +5371,578 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +msgid "Sales order status" +msgstr "" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 msgid "Order is already complete" msgstr "" -#: order/models.py:1030 +#: order/models.py:1081 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1034 +#: order/models.py:1085 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +msgid "Purchase Order Line Item" +msgstr "" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +msgid "Purchase Order Extra Line" +msgstr "" + +#: order/models.py:1616 +msgid "Sales Order Line Item" +msgstr "" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 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:1355 -#: order/serializers.py:1465 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" +#: order/models.py:1751 +msgid "Sales Order Shipment" msgstr "" #: order/models.py:1772 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1779 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1787 +msgid "Checked By" +msgstr "" + +#: order/models.py:1788 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 +msgid "Shipment" +msgstr "" + +#: order/models.py:1796 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1804 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1805 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1812 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1813 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1833 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +msgid "Sales Order Extra Line" +msgstr "" + +#: order/models.py:1941 +msgid "Sales Order Allocation" +msgstr "" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 msgid "Return Order reference" msgstr "" -#: order/models.py:2069 +#: order/models.py:2148 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +msgid "Return Order Line Item" +msgstr "" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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" +#: order/models.py:2428 +msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:85 +#: order/serializers.py:86 msgid "Completed Lines" msgstr "" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 msgid "Merge Items" msgstr "" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "" + +#: order/serializers.py:563 +msgid "Internal Part Name" +msgstr "" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +msgid "Additional note for incoming stock items" +msgstr "" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:603 +#: order/serializers.py:702 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1660 +#: order/serializers.py:1756 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 msgid "Line price currency" msgstr "" -#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 msgid "Return" msgstr "" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 msgid "Replace" msgstr "" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 msgid "Reject" msgstr "" @@ -5426,87 +5987,93 @@ 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" +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Hold order" msgstr "" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 -msgid "Mark order as complete" +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" msgstr "" #: order/templates/order/order_base.html:84 -#: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:97 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5559,13 +6126,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -5666,31 +6233,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 msgid "Link Barcode to Return Order" msgstr "" @@ -5702,36 +6269,36 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 msgid "Link Barcode to Sales Order" msgstr "" @@ -5745,7 +6312,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -5775,35 +6343,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "" @@ -5815,7 +6369,8 @@ msgstr "" msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -5827,11 +6382,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5839,169 +6394,183 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" +#: part/admin.py:405 +msgid "Part Revision" msgstr "" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +msgid "Top Level" +msgstr "" + +#: part/api.py:143 +msgid "Filter by top-level categories" +msgstr "" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 msgid "Parent" msgstr "" -#: part/api.py:171 +#: part/api.py:181 msgid "Filter by parent category" msgstr "" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:455 +#: part/api.py:441 msgid "Has Results" msgstr "" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +msgid "Is Revision" +msgstr "" + +#: part/api.py:926 +msgid "Has Revisions" +msgstr "" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,1042 +6579,1144 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +msgid "Cannot delete this part as it is locked" +msgstr "" + +#: part/models.py:521 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +msgid "Revision code must be specified" +msgstr "" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +msgid "Parent part must point to the same template" +msgstr "" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:855 +#: part/models.py:925 +msgid "Duplicate part revision already exists." +msgstr "" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 msgid "Part description (optional)" msgstr "" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +msgid "Revision Of" +msgstr "" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +msgid "Locked" +msgstr "" + +#: part/models.py:1188 +msgid "Locked parts cannot be edited" +msgstr "" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "" -#: part/models.py:1141 +#: part/models.py:1240 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 -msgid "Invalid template name - must include at least one alphanumeric character" +#: part/models.py:3398 +msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3490 part/models.py:3654 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3501 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3512 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3529 templates/js/translated/part.js:2880 -msgid "Test Name" -msgstr "" - -#: part/models.py:3530 -msgid "Enter a name for the test" +#: part/models.py:3510 +msgid "Part Test Template" msgstr "" #: part/models.py:3536 -msgid "Test Key" +msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3537 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3544 -msgid "Test Description" -msgstr "" - -#: part/models.py:3545 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: part/models.py:3549 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 -msgid "Required" -msgstr "" - -#: part/models.py:3555 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3560 templates/js/translated/part.js:2917 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3561 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3566 templates/js/translated/part.js:2924 -msgid "Requires Attachment" +#: part/models.py:3557 part/models.py:3726 +msgid "Choices must be unique" msgstr "" #: part/models.py:3568 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3579 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3596 templates/js/translated/part.js:2895 +msgid "Test Name" +msgstr "" + +#: part/models.py:3597 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3603 +msgid "Test Key" +msgstr "" + +#: part/models.py:3604 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3611 +msgid "Test Description" +msgstr "" + +#: part/models.py:3612 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 +msgid "Enabled" +msgstr "" + +#: part/models.py:3616 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 +msgid "Required" +msgstr "" + +#: part/models.py:3622 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3627 templates/js/translated/part.js:2932 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3628 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3633 templates/js/translated/part.js:2939 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3634 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3671 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3686 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3693 -msgid "Physical units for this parameter" +#: part/models.py:3674 +msgid "Part Parameter Template" msgstr "" #: part/models.py:3701 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3706 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3743 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3758 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3765 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +msgid "Part Parameter" +msgstr "" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +msgid "Part Category Parameter Template" +msgstr "" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +msgid "Parent Category" +msgstr "" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 msgid "No parts selected" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:430 msgid "Select category" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 msgid "Copy Notes" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 -msgid "External Stock" -msgstr "" - -#: part/serializers.py:843 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:846 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:877 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:883 templates/js/translated/part.js:102 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:884 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:890 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:891 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:899 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:900 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:905 -msgid "Existing Image" +#: part/serializers.py:901 +msgid "Revisions" msgstr "" #: part/serializers.py:906 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:909 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:940 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:946 templates/js/translated/part.js:103 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:947 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:953 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:954 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:962 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:963 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:968 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +msgid "Select the parent assembly" +msgstr "" + +#: part/serializers.py:1583 +msgid "Component Name" +msgstr "" + +#: part/serializers.py:1586 +msgid "Component IPN" +msgstr "" + +#: part/serializers.py:1589 +msgid "Component Description" +msgstr "" + +#: part/serializers.py:1595 +msgid "Select the component part" +msgstr "" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7065,11 +7736,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7091,65 +7762,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7195,9 +7866,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7209,101 +7880,105 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +msgid "Part Test Statistics" +msgstr "" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7338,13 +8013,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7362,7 +8037,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "" @@ -7372,7 +8047,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7384,7 +8059,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:2296 msgid "Part actions" msgstr "" @@ -7433,7 +8108,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7447,51 +8122,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7545,13 +8216,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7587,17 +8258,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -7669,9 +8340,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -7749,7 +8420,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7761,100 +8432,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +msgid "Model instance not found" +msgstr "" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 msgid "Received purchase order line item" msgstr "" @@ -7862,55 +8541,63 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:81 -msgid "Purchase Order to allocate items against" +#: plugin/base/barcodes/serializers.py:30 +msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:87 -msgid "Purchase order is not pending" +#: plugin/base/barcodes/serializers.py:35 +msgid "Primary key of model object to generate barcode for" msgstr "" #: plugin/base/barcodes/serializers.py:105 -msgid "PurchaseOrder to receive items against" +msgid "Purchase Order to allocate items against" msgstr "" #: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:129 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:135 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -7926,25 +8613,49 @@ msgstr "" msgid "No items provided to print" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +msgid "Internal Barcode Format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +msgid "Select an internal barcode format" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8000,10 +8711,12 @@ msgid "Provides native support for printing PDF labels" msgstr "" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 msgid "Debug mode" msgstr "" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8015,55 +8728,55 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" msgstr "" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8189,7 +8902,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8205,7 +8918,7 @@ msgstr "" msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8219,17 +8932,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8356,12 +9069,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8397,147 +9106,147 @@ msgstr "" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 msgid "Template description" msgstr "" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 msgid "Template is enabled" msgstr "" -#: report/models.py:214 +#: report/models.py:215 msgid "Target model type for template" msgstr "" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "" -#: report/models.py:235 +#: report/models.py:236 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:294 report/models.py:361 +#: report/models.py:295 report/models.py:362 msgid "Template file" msgstr "" -#: report/models.py:302 +#: report/models.py:303 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:438 +#: report/models.py:439 msgid "Number of items to process" msgstr "" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 msgid "Report generation progress" msgstr "" -#: report/models.py:456 +#: report/models.py:457 msgid "Report Template" msgstr "" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 msgid "Output File" msgstr "" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 msgid "Generated output file" msgstr "" -#: report/models.py:475 +#: report/models.py:476 msgid "Label output plugin" msgstr "" -#: report/models.py:479 +#: report/models.py:480 msgid "Label Template" msgstr "" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -8588,10 +9297,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" @@ -8604,26 +9313,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 "" @@ -8637,713 +9333,759 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 msgid "Status Code" msgstr "" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:185 +#: stock/admin.py:184 msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 msgid "Filter by location depth" msgstr "" -#: stock/api.py:338 +#: stock/api.py:332 +msgid "Filter by top-level locations" +msgstr "" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 msgid "Parent Location" msgstr "" -#: stock/api.py:360 +#: stock/api.py:370 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 msgid "Stock Location type" msgstr "" -#: stock/models.py:60 +#: stock/models.py:65 msgid "Stock Location types" msgstr "" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:193 +#: stock/models.py:207 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:872 +#: stock/models.py:891 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1641 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2399 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2404 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2428 -msgid "Test result" -msgstr "" - -#: stock/models.py:2435 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2443 -msgid "Test result attachment" +#: stock/models.py:2414 +msgid "Stock Item Test Result" msgstr "" #: stock/models.py:2447 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2452 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2457 +msgid "Invalid value for this test" +msgstr "" + +#: stock/models.py:2542 +msgid "Test result" +msgstr "" + +#: stock/models.py:2549 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2557 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 msgid "Test station" msgstr "" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2469 +#: stock/models.py:2583 msgid "Finished" msgstr "" -#: stock/models.py:2470 +#: stock/models.py:2584 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 msgid "Select build order" msgstr "" -#: stock/serializers.py:93 +#: stock/serializers.py:94 msgid "Select stock item to generate batch code for" msgstr "" -#: stock/serializers.py:102 +#: stock/serializers.py:103 msgid "Select location to generate batch code for" msgstr "" -#: stock/serializers.py:111 +#: stock/serializers.py:112 msgid "Select part to generate batch code for" msgstr "" -#: stock/serializers.py:120 +#: stock/serializers.py:121 msgid "Select purchase order" msgstr "" -#: stock/serializers.py:127 +#: stock/serializers.py:128 msgid "Enter quantity for batch code" msgstr "" -#: stock/serializers.py:150 +#: stock/serializers.py:151 msgid "Generated serial number" msgstr "" -#: stock/serializers.py:159 +#: stock/serializers.py:160 msgid "Select part to generate serial number for" msgstr "" -#: stock/serializers.py:167 +#: stock/serializers.py:168 msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:229 +#: stock/serializers.py:233 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:248 +#: stock/serializers.py:254 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +msgid "Parent stock item" +msgstr "" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +msgid "Tracking Items" +msgstr "" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +msgid "Minimum Pricing" +msgstr "" + +#: stock/serializers.py:637 +msgid "Maximum Pricing" +msgstr "" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:785 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +msgid "Unsupported statistic type: " +msgstr "" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 msgid "No Change" msgstr "" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9375,7 +10117,7 @@ msgstr "" msgid "Legacy stock tracking entry" msgstr "" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "" @@ -9431,7 +10173,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "" @@ -9451,7 +10193,7 @@ msgstr "" msgid "Build order output rejected" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "" @@ -9496,7 +10238,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:276 msgid "Delete Test Data" msgstr "" @@ -9512,15 +10254,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -9533,8 +10275,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -9543,17 +10285,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -9562,12 +10304,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -9608,14 +10350,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -9625,7 +10363,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -9669,12 +10407,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "" @@ -9691,11 +10425,6 @@ msgstr "" 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" @@ -9706,7 +10435,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 msgid "stock item" msgstr "" @@ -9738,7 +10467,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -9750,84 +10479,84 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -9843,10 +10572,6 @@ msgstr "" 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 "" @@ -10097,11 +10822,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "" @@ -10207,7 +10932,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10217,7 +10942,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10320,9 +11045,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "" @@ -10343,7 +11068,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -10362,12 +11087,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "" @@ -10375,40 +11100,40 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10431,7 +11156,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -10480,18 +11205,6 @@ msgstr "" 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 "" @@ -10757,7 +11470,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -10779,7 +11492,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "" @@ -11012,7 +11725,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11026,15 +11739,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11046,27 +11759,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11078,11 +11791,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11114,27 +11827,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11167,85 +11880,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11262,8 +11975,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -11381,7 +12094,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -11401,30 +12114,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -11456,7 +12169,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -11464,120 +12177,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -11601,231 +12314,263 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 -msgid "No build order allocations found" +#: templates/js/translated/build.js:959 +msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 -msgid "Allocated Quantity" +#: templates/js/translated/build.js:966 +msgid "Delete Stock Allocations" msgstr "" -#: templates/js/translated/build.js:1005 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1027 -msgid "Complete outputs" +#: templates/js/translated/build.js:989 +msgid "No allocated stock" msgstr "" #: templates/js/translated/build.js:1045 +msgid "Stock item" +msgstr "" + +#: templates/js/translated/build.js:1070 +msgid "Edit build allocation" +msgstr "" + +#: templates/js/translated/build.js:1071 +msgid "Delete build allocation" +msgstr "" + +#: templates/js/translated/build.js:1089 +msgid "Edit Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1102 +msgid "Delete Build Allocation" +msgstr "" + +#: templates/js/translated/build.js:1133 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:1178 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1200 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1218 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 msgid "Remove stock allocation" msgstr "" @@ -11972,7 +12717,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "" @@ -11989,34 +12734,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "" @@ -12070,119 +12815,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12190,74 +12935,74 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -12267,7 +13012,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -12295,400 +13040,404 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +msgid "Hold Order" +msgstr "" + +#: templates/js/translated/order.js:53 +msgid "Are you sure you wish to place this order on hold?" +msgstr "" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" +#: templates/js/translated/part.js:2952 +msgid "Edit test template" msgstr "" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" +#: templates/js/translated/part.js:2953 +msgid "Delete test template" msgstr "" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -12901,109 +13650,122 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +msgid "Specify packaging for incoming stock items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +msgid "Specify packaging" +msgstr "" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +msgid "Add note" +msgstr "" + +#: templates/js/translated/purchase_order.js:1338 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13058,16 +13820,16 @@ msgstr "" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -13226,7 +13988,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -13284,505 +14046,521 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +msgid "Adjust batch code" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Adjust packaging" +msgstr "" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 msgid "Change Stock Status" msgstr "" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -13817,12 +14595,12 @@ msgstr "" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -13864,7 +14642,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -13965,52 +14743,64 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +msgid "Interval start" +msgstr "" + +#: templates/js/translated/table_filters.js:475 +msgid "Interval end" +msgstr "" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +msgid "Show locked parts" +msgstr "" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 msgid "Has Choices" msgstr "" @@ -14082,10 +14872,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14287,6 +15073,14 @@ msgstr "" msgid "Email settings not configured" msgstr "" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -14359,35 +15153,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "" -#: users/models.py:413 +#: users/models.py:408 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 96d75fd1a1..cbc4b76564 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-06-11 14:05+0000\n" +"POT-Creation-Date: 2024-08-08 10:02+0000\n" "PO-Revision-Date: 2023-02-28 22:38\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" @@ -21,7 +21,7 @@ msgstr "" msgid "API endpoint not found" msgstr "未找到 API 端点" -#: InvenTree/api.py:536 +#: InvenTree/api.py:505 msgid "User does not have permission to view this model" msgstr "" @@ -58,30 +58,34 @@ msgstr "提供的数量无效" msgid "Error details can be found in the admin panel" msgstr "在管理面板中可以找到错误详细信息" -#: InvenTree/fields.py:139 +#: InvenTree/fields.py:136 msgid "Enter date" msgstr "输入日期" -#: InvenTree/fields.py:208 InvenTree/models.py:1059 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 +#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:463 +#: build/serializers.py:541 build/templates/build/sidebar.html:29 +#: company/models.py:836 +#: company/templates/company/manufacturer_part_sidebar.html:11 +#: company/templates/company/sidebar.html:37 +#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 +#: 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:3209 part/templates/part/part_sidebar.html:63 +#: part/models.py:3290 part/templates/part/part_sidebar.html:65 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:231 stock/models.py:2325 stock/models.py:2447 -#: stock/serializers.py:633 stock/serializers.py:791 stock/serializers.py:887 -#: stock/serializers.py:937 stock/serializers.py:1246 stock/serializers.py:1335 -#: stock/serializers.py:1500 stock/templates/stock/stock_sidebar.html:25 +#: stock/admin.py:230 stock/models.py:2373 stock/models.py:2561 +#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 +#: stock/serializers.py:1032 stock/serializers.py:1343 +#: stock/serializers.py:1432 stock/serializers.py:1597 +#: 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:1081 -#: templates/js/translated/purchase_order.js:2200 -#: templates/js/translated/return_order.js:775 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 +#: templates/js/translated/part.js:1084 +#: templates/js/translated/purchase_order.js:2270 +#: templates/js/translated/return_order.js:774 #: 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 +#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 msgid "Notes" msgstr "备注" @@ -94,269 +98,281 @@ msgstr "值 '{name}' 没有以模式格式显示" msgid "Provided value does not match required pattern: " msgstr "提供的值与所需模式不匹配: " -#: InvenTree/forms.py:128 +#: InvenTree/forms.py:129 msgid "Enter password" msgstr "输入密码" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:130 msgid "Enter new password" msgstr "输入新密码" -#: InvenTree/forms.py:138 +#: InvenTree/forms.py:139 msgid "Confirm password" msgstr "确认密码" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:140 msgid "Confirm new password" msgstr "确认新密码" -#: InvenTree/forms.py:143 +#: InvenTree/forms.py:144 msgid "Old password" msgstr "旧密码" -#: InvenTree/forms.py:182 +#: InvenTree/forms.py:183 msgid "Email (again)" msgstr "Email (再次)" -#: InvenTree/forms.py:186 +#: InvenTree/forms.py:187 msgid "Email address confirmation" msgstr "Email 地址确认" -#: InvenTree/forms.py:209 +#: InvenTree/forms.py:210 msgid "You must type the same email each time." msgstr "您必须输入相同的 Email 。" -#: InvenTree/forms.py:253 InvenTree/forms.py:261 +#: InvenTree/forms.py:221 +msgid "MFA Registration is disabled." +msgstr "" + +#: InvenTree/forms.py:259 InvenTree/forms.py:267 msgid "The provided primary email address is not valid." msgstr "所提供的主要电子邮件地址无效。" -#: InvenTree/forms.py:268 +#: InvenTree/forms.py:274 msgid "The provided email domain is not approved." msgstr "提供的电子邮件域未被核准。" -#: InvenTree/forms.py:395 +#: InvenTree/forms.py:403 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +#: InvenTree/helpers.py:493 order/models.py:568 order/models.py:811 msgid "Invalid quantity provided" msgstr "提供的数量无效" -#: InvenTree/helpers.py:533 +#: InvenTree/helpers.py:501 msgid "Empty serial number string" msgstr "空序列号字符串" -#: InvenTree/helpers.py:562 +#: InvenTree/helpers.py:530 msgid "Duplicate serial" msgstr "重复的序列号" -#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#: InvenTree/helpers.py:562 InvenTree/helpers.py:605 #, fuzzy, python-brace-format #| msgid "Invalid group range: {g}" msgid "Invalid group range: {group}" msgstr "无效的组范围: {g}" -#: InvenTree/helpers.py:625 +#: InvenTree/helpers.py:593 #, fuzzy, python-brace-format #| msgid "Group range {g} exceeds allowed quantity ({q})" msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "组 {g} 超出了允许的数量 ({q})" -#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#: InvenTree/helpers.py:623 InvenTree/helpers.py:630 InvenTree/helpers.py:649 #, fuzzy, python-brace-format #| msgid "Invalid group sequence: {g}" msgid "Invalid group sequence: {group}" msgstr "无效的组序列: {g}" -#: InvenTree/helpers.py:691 +#: InvenTree/helpers.py:659 msgid "No serial numbers found" msgstr "未找到序列号" -#: InvenTree/helpers.py:696 +#: InvenTree/helpers.py:664 #, fuzzy #| msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "唯一序列号 ({s}) 必须匹配数量 ({q})" -#: InvenTree/helpers.py:814 +#: InvenTree/helpers.py:782 msgid "Remove HTML tags from this value" msgstr "从这个值中删除 HTML 标签" -#: InvenTree/helpers_model.py:150 +#: InvenTree/helpers_model.py:137 msgid "Connection error" msgstr "连接错误" -#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +#: InvenTree/helpers_model.py:142 InvenTree/helpers_model.py:149 msgid "Server responded with invalid status code" msgstr "服务器响应状态码无效" -#: InvenTree/helpers_model.py:158 +#: InvenTree/helpers_model.py:145 msgid "Exception occurred" msgstr "发生异常" -#: InvenTree/helpers_model.py:168 +#: InvenTree/helpers_model.py:155 msgid "Server responded with invalid Content-Length value" msgstr "服务器响应的内容长度值无效" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:158 msgid "Image size is too large" msgstr "图片尺寸过大" -#: InvenTree/helpers_model.py:183 +#: InvenTree/helpers_model.py:170 msgid "Image download exceeded maximum size" msgstr "图像下载超过最大尺寸" -#: InvenTree/helpers_model.py:188 +#: InvenTree/helpers_model.py:175 msgid "Remote server returned empty response" msgstr "远程服务器返回了空响应" -#: InvenTree/helpers_model.py:196 +#: InvenTree/helpers_model.py:183 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" #: InvenTree/locales.py:18 +msgid "Arabic" +msgstr "" + +#: InvenTree/locales.py:19 #, fuzzy #| msgid "Hungarian" msgid "Bulgarian" msgstr "匈牙利语" -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:20 msgid "Czech" msgstr "捷克语" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:21 msgid "Danish" msgstr "丹麦语" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:22 msgid "German" msgstr "德语" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:23 msgid "Greek" msgstr "希腊语" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:24 msgid "English" msgstr "英语" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:25 msgid "Spanish" msgstr "西班牙语" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:26 msgid "Spanish (Mexican)" msgstr "西班牙语(墨西哥)" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:27 +msgid "Estonian" +msgstr "" + +#: InvenTree/locales.py:28 msgid "Farsi / Persian" msgstr "波斯语" -#: InvenTree/locales.py:27 +#: InvenTree/locales.py:29 #, fuzzy #| msgid "Danish" msgid "Finnish" msgstr "丹麦语" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:30 msgid "French" msgstr "法语" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:31 msgid "Hebrew" msgstr "希伯来语" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:32 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:33 msgid "Hungarian" msgstr "匈牙利语" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:34 msgid "Italian" msgstr "意大利语" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:35 msgid "Japanese" msgstr "日语" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:36 msgid "Korean" msgstr "韩语" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:37 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:38 msgid "Dutch" msgstr "荷兰语" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:39 msgid "Norwegian" msgstr "挪威语" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:40 msgid "Polish" msgstr "波兰语" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:41 msgid "Portuguese" msgstr "葡萄牙语" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:42 msgid "Portuguese (Brazilian)" msgstr "葡萄牙语 (巴西)" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:43 msgid "Romanian" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:44 msgid "Russian" msgstr "俄语" -#: InvenTree/locales.py:43 +#: InvenTree/locales.py:45 #, fuzzy #| msgid "Slovenian" msgid "Slovak" msgstr "斯洛文尼亚" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:46 msgid "Slovenian" msgstr "斯洛文尼亚" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:47 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:48 msgid "Swedish" msgstr "瑞典语" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:49 msgid "Thai" msgstr "泰语" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:50 msgid "Turkish" msgstr "土耳其语" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:51 msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:52 msgid "Vietnamese" msgstr "越南语" -#: InvenTree/locales.py:51 +#: InvenTree/locales.py:53 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:54 msgid "Chinese (Traditional)" msgstr "" @@ -365,261 +381,169 @@ msgstr "" 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 +#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 +#: company/models.py:136 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 +#: InvenTree/models.py:103 #, fuzzy #| msgid "Error reading file (invalid format)" msgid "Error running plugin validation" msgstr "读取文件时发生错误 (无效编码)" -#: InvenTree/models.py:176 +#: InvenTree/models.py:172 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:182 +#: InvenTree/models.py:178 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:183 +#: InvenTree/models.py:179 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:413 +#: InvenTree/models.py:409 msgid "Improperly formatted pattern" msgstr "格式不正确" -#: InvenTree/models.py:420 +#: InvenTree/models.py:416 msgid "Unknown format key specified" msgstr "指定了未知格式密钥" -#: InvenTree/models.py:426 +#: InvenTree/models.py:422 msgid "Missing required format key" msgstr "缺少必需的格式密钥" -#: InvenTree/models.py:437 +#: InvenTree/models.py:433 msgid "Reference field cannot be empty" msgstr "引用字段不能为空" -#: InvenTree/models.py:445 +#: InvenTree/models.py:441 msgid "Reference must match required pattern" msgstr "引用必须匹配所需的图案" -#: InvenTree/models.py:476 +#: InvenTree/models.py:472 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:2442 -#: 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:2934 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:963 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:230 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: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:964 -#: stock/models.py:836 -msgid "Link to external URL" -msgstr "链接到外部 URL" - -#: 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:2486 -#: common/models.py:2487 common/models.py:2635 common/models.py:2636 -#: common/models.py:2881 common/models.py:2882 part/models.py:3219 -#: part/models.py:3306 part/models.py:3399 part/models.py:3427 -#: plugin/models.py:274 plugin/models.py:275 -#: 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 "文件名包含非法字符 '{c}'" - -#: 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 +#: InvenTree/models.py:723 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:877 +#: InvenTree/models.py:740 msgid "Invalid choice" msgstr "选择无效" -#: InvenTree/models.py:907 common/models.py:2622 common/models.py:3035 -#: common/serializers.py:403 company/models.py:614 machine/models.py:24 -#: part/models.py:899 part/models.py:3685 plugin/models.py:51 -#: report/models.py:149 stock/models.py:72 +#: InvenTree/models.py:770 common/models.py:2694 common/models.py:3124 +#: common/serializers.py:412 company/models.py:593 machine/models.py:24 +#: part/models.py:982 part/models.py:3757 plugin/models.py:51 +#: report/models.py:150 stock/models.py:77 #: 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/InvenTree/settings/settings_staff_js.html:454 #: 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:1187 -#: templates/js/translated/part.js:1475 templates/js/translated/part.js:1611 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1190 +#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1614 +#: templates/js/translated/part.js:2765 templates/js/translated/stock.js:2801 msgid "Name" msgstr "名称" -#: InvenTree/models.py:913 build/models.py:218 -#: build/templates/build/detail.html:24 common/models.py:134 -#: company/models.py:523 company/models.py:840 +#: InvenTree/models.py:776 build/models.py:250 +#: build/templates/build/detail.html:24 common/models.py:156 +#: company/models.py:521 company/models.py:827 #: 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:922 -#: part/models.py:3700 part/templates/part/category.html:82 +#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1005 +#: part/models.py:3772 part/templates/part/category.html:79 #: 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 +#: part/templates/part/part_scheduling.html:12 report/models.py:156 +#: report/models.py:510 report/models.py:536 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 #: 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/InvenTree/settings/settings_staff_js.html:459 #: 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/build.js:2311 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:1239 -#: templates/js/translated/part.js:1484 templates/js/translated/part.js:1622 -#: templates/js/translated/part.js:1959 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2897 +#: templates/js/translated/order.js:323 templates/js/translated/part.js:1242 +#: templates/js/translated/part.js:1487 templates/js/translated/part.js:1625 +#: templates/js/translated/part.js:1962 templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2800 templates/js/translated/part.js:2912 #: 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/purchase_order.js:1776 +#: templates/js/translated/purchase_order.js:1919 +#: templates/js/translated/purchase_order.js:2092 #: 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 +#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 msgid "Description" msgstr "描述信息" -#: InvenTree/models.py:914 stock/models.py:79 +#: InvenTree/models.py:777 stock/models.py:84 msgid "Description (optional)" msgstr "描述 (可选)" -#: InvenTree/models.py:923 -msgid "parent" -msgstr "上级项" - -#: InvenTree/models.py:929 templates/js/translated/part.js:2794 -#: templates/js/translated/stock.js:2757 +#: InvenTree/models.py:792 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2841 msgid "Path" msgstr "路径" -#: InvenTree/models.py:1059 +#: InvenTree/models.py:929 #, fuzzy #| msgid "Add transaction note (optional)" msgid "Markdown notes (optional)" msgstr "添加交易备注 (可选)" -#: InvenTree/models.py:1088 +#: InvenTree/models.py:960 msgid "Barcode Data" msgstr "条码数据" -#: InvenTree/models.py:1089 +#: InvenTree/models.py:961 msgid "Third party barcode data" msgstr "第三方条形码数据" -#: InvenTree/models.py:1095 +#: InvenTree/models.py:967 msgid "Barcode Hash" msgstr "条码哈希" -#: InvenTree/models.py:1096 +#: InvenTree/models.py:968 msgid "Unique hash of barcode data" msgstr "条码数据的唯一哈希" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1035 msgid "Existing barcode found" msgstr "发现现有条码" -#: InvenTree/models.py:1192 +#: InvenTree/models.py:1078 msgid "Server Error" msgstr "服务器错误" -#: InvenTree/models.py:1193 +#: InvenTree/models.py:1079 msgid "An error has been logged by the server." msgstr "服务器记录了一个错误。" -#: InvenTree/serializers.py:63 part/models.py:4238 +#: InvenTree/serializers.py:63 part/models.py:4380 msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:100 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:3027 +#: InvenTree/serializers.py:100 company/models.py:186 +#: company/templates/company/company_base.html:112 part/models.py:3108 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -629,93 +553,150 @@ msgstr "货币" msgid "Select currency from available options" msgstr "" +#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "用户名" + +#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "名字" + +#: InvenTree/serializers.py:409 +msgid "First name of the user" +msgstr "" + +#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "姓氏" + +#: InvenTree/serializers.py:412 +msgid "Last name of the user" +msgstr "" + +#: InvenTree/serializers.py:415 +#, fuzzy +#| msgid "Email address confirmation" +msgid "Email address of the user" +msgstr "Email 地址确认" + +#: InvenTree/serializers.py:439 +msgid "Staff" +msgstr "" + +#: InvenTree/serializers.py:439 +msgid "Does this user have staff permissions" +msgstr "" + #: InvenTree/serializers.py:442 +msgid "Superuser" +msgstr "" + +#: InvenTree/serializers.py:442 +msgid "Is this user a superuser" +msgstr "" + +#: InvenTree/serializers.py:445 common/models.py:2699 company/models.py:163 +#: company/models.py:801 machine/models.py:39 part/admin.py:88 +#: part/models.py:1182 plugin/models.py:66 +#: 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:506 +#: templates/js/translated/table_filters.js:534 +#: templates/js/translated/table_filters.js:730 +#: templates/js/translated/table_filters.js:815 users/models.py:182 +msgid "Active" +msgstr "" + +#: InvenTree/serializers.py:445 +#, fuzzy +#| msgid "Delete supplier part" +msgid "Is this user account active" +msgstr "删除供应商商品" + +#: InvenTree/serializers.py:463 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:454 +#: InvenTree/serializers.py:475 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:473 +#: InvenTree/serializers.py:494 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:496 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:482 +#: InvenTree/serializers.py:503 #, fuzzy #| msgid "About InvenTree" msgid "Welcome to InvenTree" msgstr "关于 InventTree" -#: InvenTree/serializers.py:543 -msgid "Filename" -msgstr "文件名" - -#: InvenTree/serializers.py:577 +#: InvenTree/serializers.py:561 msgid "Invalid value" msgstr "无效值" -#: InvenTree/serializers.py:597 +#: InvenTree/serializers.py:581 importer/models.py:63 msgid "Data File" msgstr "数据文件" -#: InvenTree/serializers.py:598 +#: InvenTree/serializers.py:582 msgid "Select data file for upload" msgstr "选择要上传的文件" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:599 msgid "Unsupported file type" msgstr "不支持的文件类型" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:605 msgid "File is too large" msgstr "文件过大" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:626 msgid "No columns found in file" msgstr "在文件中没有找到列" -#: InvenTree/serializers.py:645 +#: InvenTree/serializers.py:629 msgid "No data rows found in file" msgstr "在文件中没有找到数据行" -#: InvenTree/serializers.py:758 +#: InvenTree/serializers.py:742 msgid "No data rows provided" msgstr "没有提供数据行" -#: InvenTree/serializers.py:761 +#: InvenTree/serializers.py:745 msgid "No data columns supplied" msgstr "没有提供数据列" -#: InvenTree/serializers.py:828 +#: InvenTree/serializers.py:812 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "缺少必需的列:'{name}'" -#: InvenTree/serializers.py:837 +#: InvenTree/serializers.py:821 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "复制列: '{col}'" -#: InvenTree/serializers.py:877 +#: InvenTree/serializers.py:861 #, fuzzy #| msgid "Part name" msgid "Remote Image" msgstr "商品名称" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:862 msgid "URL of remote image file" msgstr "远程图像文件的 URL" -#: InvenTree/serializers.py:896 +#: InvenTree/serializers.py:880 msgid "Downloading images from remote URL is not enabled" msgstr "未启用从远程 URL下载图像" -#: InvenTree/status.py:66 part/serializers.py:1181 +#: InvenTree/status.py:66 part/serializers.py:1244 msgid "Background worker check failed" msgstr "后台工作人员检查失败" @@ -727,29 +708,29 @@ msgstr "未配置电子邮件后端" msgid "InvenTree system health checks failed" msgstr "InventTree系统健康检查失败" -#: InvenTree/templatetags/inventree_extras.py:183 +#: InvenTree/templatetags/inventree_extras.py:184 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#: InvenTree/validators.py:32 InvenTree/validators.py:34 #, fuzzy #| msgid "Invalid value" msgid "Invalid physical unit" msgstr "无效值" -#: InvenTree/validators.py:39 +#: InvenTree/validators.py:40 msgid "Not a valid currency code" msgstr "不是有效的货币代码" -#: InvenTree/validators.py:121 InvenTree/validators.py:137 +#: InvenTree/validators.py:118 InvenTree/validators.py:134 msgid "Overage value must not be negative" msgstr "备损值不能为负数" -#: InvenTree/validators.py:139 +#: InvenTree/validators.py:136 msgid "Overage must not exceed 100%" msgstr "备损不能超过 100%" -#: InvenTree/validators.py:145 +#: InvenTree/validators.py:142 msgid "Invalid value for overage" msgstr "无效的备损值" @@ -777,62 +758,63 @@ msgstr "系统信息" msgid "About InvenTree" msgstr "关于 InventTree" -#: build/api.py:255 +#: build/api.py:247 msgid "Build must be cancelled before it can be deleted" msgstr "在删除前必须取消生产" -#: build/api.py:299 part/models.py:4116 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: build/api.py:291 build/serializers.py:1279 part/models.py:4258 +#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 +#: templates/js/translated/build.js:2702 #: templates/js/translated/table_filters.js:190 -#: templates/js/translated/table_filters.js:583 +#: templates/js/translated/table_filters.js:597 msgid "Consumable" msgstr "" -#: build/api.py:300 part/models.py:4110 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 +#: build/api.py:292 build/serializers.py:1280 part/models.py:4252 +#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 +#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 -#: templates/js/translated/table_filters.js:587 +#: templates/js/translated/table_filters.js:601 msgid "Optional" msgstr "可选项" -#: build/api.py:301 templates/js/translated/table_filters.js:408 -#: templates/js/translated/table_filters.js:579 +#: build/api.py:293 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:593 msgid "Tracked" msgstr "" -#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 -#: templates/js/translated/build.js:2629 +#: build/api.py:295 part/admin.py:144 templates/js/translated/build.js:1917 +#: templates/js/translated/build.js:2820 #: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:571 +#: templates/js/translated/table_filters.js:585 msgid "Allocated" msgstr "" -#: build/api.py:311 company/models.py:904 company/serializers.py:384 +#: build/api.py:303 company/models.py:891 company/serializers.py:395 #: 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/bom.js:1162 templates/js/translated/build.js:2752 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:234 -#: templates/js/translated/part.js:693 templates/js/translated/part.js:695 -#: templates/js/translated/part.js:700 +#: templates/js/translated/model_renderers.js:235 +#: 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 +#: templates/js/translated/table_filters.js:589 msgid "Available" msgstr "空闲" -#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/models.py:86 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 +#: stock/serializers.py:84 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 +#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 msgid "Build Order" msgstr "生产订单" -#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/models.py:87 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 @@ -843,63 +825,82 @@ msgstr "生产订单" msgid "Build Orders" msgstr "生产订单" -#: build/models.py:131 +#: build/models.py:135 +#, fuzzy +#| msgid "Some stock items have been overallocated" +msgid "Assembly BOM has not been validated" +msgstr "一些库存项已被过度分配" + +#: build/models.py:142 +#, fuzzy +#| msgid "Print build order report" +msgid "Build order cannot be created for an inactive part" +msgstr "打印构建订单报告" + +#: build/models.py:149 +#, fuzzy +#| msgid "Build output cannot be specified for allocation of untracked parts" +msgid "Build order cannot be created for an unlocked part" +msgstr "对于未被追踪的部件,无法指定生产产出" + +#: build/models.py:163 msgid "Invalid choice for parent build" msgstr "上级生产选项无效" -#: build/models.py:142 order/models.py:240 +#: build/models.py:174 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:148 +#: build/models.py:180 #, fuzzy #| msgid "Order cannot be cancelled" msgid "Build order part cannot be changed" msgstr "无法取消订单" -#: build/models.py:209 +#: build/models.py:241 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:4131 part/templates/part/upload_bom.html:54 +#: build/models.py:242 build/serializers.py:1278 order/models.py:468 +#: order/models.py:979 order/models.py:1373 order/models.py:2135 +#: part/admin.py:414 part/models.py:4273 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/build.js:1011 templates/js/translated/build.js:2685 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2135 +#: templates/js/translated/return_order.js:727 #: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "引用" -#: build/models.py:221 +#: build/models.py:253 #, fuzzy #| msgid "Brief description of the build" msgid "Brief description of the build (optional)" msgstr "生产的简短描述." -#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/models.py:261 build/templates/build/build_base.html:191 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "上级生产" -#: build/models.py:230 +#: build/models.py:262 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:1500 part/api.py:1794 part/models.py:393 part/models.py:3038 -#: part/models.py:3182 part/models.py:3326 part/models.py:3349 -#: part/models.py:3370 part/models.py:3392 part/models.py:3523 -#: part/models.py:3833 part/models.py:3989 part/models.py:4082 -#: part/models.py:4443 part/serializers.py:1127 part/serializers.py:1733 +#: build/models.py:267 build/serializers.py:1269 +#: build/templates/build/build_base.html:105 +#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:765 +#: order/models.py:1503 order/models.py:1658 order/models.py:1659 +#: part/api.py:1507 part/api.py:1803 part/models.py:423 part/models.py:3119 +#: part/models.py:3263 part/models.py:3411 part/models.py:3432 +#: part/models.py:3454 part/models.py:3590 part/models.py:3930 +#: part/models.py:4093 part/models.py:4224 part/models.py:4583 +#: part/serializers.py:1190 part/serializers.py:1834 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -910,178 +911,185 @@ msgstr "此次生产匹配的订单" #: 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:399 -#: stock/serializers.py:821 templates/InvenTree/search.html:82 +#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 +#: stock/serializers.py:916 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/barcode.js:577 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/build.js:1002 templates/js/translated/build.js:1485 +#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 +#: templates/js/translated/build.js:2507 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:1944 templates/js/translated/part.js:2016 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1947 templates/js/translated/part.js:2019 +#: templates/js/translated/part.js:2327 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/purchase_order.js:1367 +#: templates/js/translated/purchase_order.js:1918 +#: templates/js/translated/purchase_order.js:2077 #: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:709 +#: templates/js/translated/return_order.js:708 #: 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 +#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 +#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 +#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 +#: templates/js/translated/stock.js:3319 msgid "Part" msgstr "商品" -#: build/models.py:243 +#: build/models.py:275 msgid "Select part to build" msgstr "选择要生产的商品" -#: build/models.py:248 +#: build/models.py:280 msgid "Sales Order Reference" msgstr "相关销售订单" -#: build/models.py:252 +#: build/models.py:284 msgid "SalesOrder to which this build is allocated" msgstr "此次生产匹配的销售订单" -#: build/models.py:257 build/serializers.py:1000 -#: templates/js/translated/build.js:1731 +#: build/models.py:289 build/serializers.py:1040 +#: templates/js/translated/build.js:1904 #: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "来源地点" -#: build/models.py:261 +#: build/models.py:293 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "此次生产从哪个仓储位置获取库存(留空即可从任何仓储位置取出)" -#: build/models.py:266 +#: build/models.py:298 msgid "Destination Location" msgstr "目标地点" -#: build/models.py:270 +#: build/models.py:302 msgid "Select location where the completed items will be stored" msgstr "选择已完成项目仓储地点" -#: build/models.py:274 +#: build/models.py:306 msgid "Build Quantity" msgstr "生产数量" -#: build/models.py:277 +#: build/models.py:309 msgid "Number of stock items to build" msgstr "要生产的项目数量" -#: build/models.py:281 +#: build/models.py:313 msgid "Completed items" msgstr "已完成项目" -#: build/models.py:283 +#: build/models.py:315 msgid "Number of stock items which have been completed" msgstr "已完成的库存项目数量" -#: build/models.py:287 +#: build/models.py:319 msgid "Build Status" msgstr "生产状态" -#: build/models.py:291 +#: build/models.py:323 msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:300 build/serializers.py:287 order/serializers.py:582 -#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1465 -#: templates/js/translated/purchase_order.js:1129 +#: build/models.py:332 build/serializers.py:297 build/serializers.py:1190 +#: order/serializers.py:665 stock/models.py:859 stock/serializers.py:76 +#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 +#: templates/js/translated/stock.js:1199 msgid "Batch Code" msgstr "批量代码" -#: build/models.py:304 build/serializers.py:288 +#: build/models.py:336 build/serializers.py:298 msgid "Batch code for this build output" msgstr "此生产产出的批量代码" -#: build/models.py:307 order/models.py:316 order/serializers.py:121 -#: part/models.py:1123 part/templates/part/part_base.html:310 +#: build/models.py:339 order/models.py:316 order/serializers.py:126 +#: part/models.py:1222 part/templates/part/part_base.html:319 #: templates/js/translated/return_order.js:338 #: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "创建日期" -#: build/models.py:311 +#: build/models.py:343 msgid "Target completion date" msgstr "预计完成日期" -#: build/models.py:312 +#: build/models.py:344 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 +#: build/models.py:347 order/models.py:527 order/models.py:2180 +#: templates/js/translated/build.js:2419 msgid "Completion Date" msgstr "完成日期:" -#: build/models.py:321 +#: build/models.py:353 msgid "completed by" msgstr "完成人" -#: build/models.py:329 templates/js/translated/build.js:2207 +#: build/models.py:361 templates/js/translated/build.js:2379 msgid "Issued by" msgstr "发布者" -#: build/models.py:330 +#: build/models.py:362 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:143 -#: 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:1140 -#: part/templates/part/part_base.html:390 +#: build/models.py:370 build/templates/build/build_base.html:212 +#: build/templates/build/detail.html:122 common/models.py:165 +#: order/models.py:334 order/templates/order/order_base.html:222 +#: order/templates/order/return_order_base.html:191 +#: order/templates/order/sales_order_base.html:235 part/models.py:1239 +#: part/templates/part/part_base.html:399 #: 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/build.js:2391 +#: templates/js/translated/purchase_order.js:1833 #: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:531 +#: templates/js/translated/table_filters.js:545 msgid "Responsible" msgstr "责任人" -#: build/models.py:339 +#: build/models.py:371 msgid "User or group responsible for this build order" msgstr "构建此订单的用户或组" -#: build/models.py:344 build/templates/build/detail.html:108 +#: build/models.py:376 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 +#: order/templates/order/order_base.html:172 +#: order/templates/order/return_order_base.html:148 +#: order/templates/order/sales_order_base.html:187 +#: part/templates/part/part_base.html:392 stock/models.py:855 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "外部链接" -#: build/models.py:349 +#: build/models.py:377 common/models.py:3265 part/models.py:1057 +#: stock/models.py:855 +msgid "Link to external URL" +msgstr "链接到外部 URL" + +#: build/models.py:381 msgid "Build Priority" msgstr "创建优先级" -#: build/models.py:352 +#: build/models.py:384 msgid "Priority of this build order" msgstr "此构建订单的优先级" -#: build/models.py:359 common/models.py:127 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 +#: build/models.py:391 common/models.py:135 common/models.py:149 +#: order/admin.py:18 order/models.py:298 +#: templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2316 +#: templates/js/translated/purchase_order.js:1780 #: templates/js/translated/return_order.js:317 #: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 @@ -1091,73 +1099,74 @@ msgstr "此构建订单的优先级" msgid "Project Code" msgstr "商品二维码" -#: build/models.py:360 +#: build/models.py:392 #, fuzzy #| msgid "Priority of this build order" msgid "Project code for this build order" msgstr "此构建订单的优先级" -#: build/models.py:593 build/models.py:658 +#: build/models.py:639 build/models.py:766 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:615 +#: build/models.py:661 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生产订单 {build} 已完成" -#: build/models.py:621 +#: build/models.py:667 msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:847 build/models.py:932 +#: build/models.py:955 build/models.py:1040 msgid "No build output specified" msgstr "未指定生产产出" -#: build/models.py:850 +#: build/models.py:958 msgid "Build output is already completed" msgstr "生产产出已完成" -#: build/models.py:853 +#: build/models.py:961 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:434 -#: order/serializers.py:577 part/serializers.py:1491 part/serializers.py:1891 -#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:604 +#: build/models.py:1044 build/serializers.py:230 build/serializers.py:279 +#: build/serializers.py:907 order/models.py:565 order/serializers.py:494 +#: order/serializers.py:660 part/serializers.py:1567 part/serializers.py:1997 +#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 msgid "Quantity must be greater than zero" msgstr "数量必须大于0" -#: build/models.py:941 build/serializers.py:225 +#: build/models.py:1049 build/serializers.py:235 #, fuzzy #| msgid "Quantity must be greater than zero" msgid "Quantity cannot be greater than the output quantity" msgstr "数量必须大于0" -#: build/models.py:1001 build/serializers.py:548 +#: build/models.py:1109 build/serializers.py:558 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1352 +#: build/models.py:1450 #, fuzzy #| msgid "Delete parameters" msgid "Build Order Line Item" msgstr "删除参数" -#: build/models.py:1377 +#: build/models.py:1475 #, fuzzy #| msgid "Build Notes" 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:2508 -#: order/models.py:1308 order/models.py:1967 order/serializers.py:1340 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 -#: part/forms.py:48 part/models.py:3196 part/models.py:4104 +#: build/models.py:1489 build/models.py:1745 build/serializers.py:217 +#: build/serializers.py:264 build/serializers.py:1285 +#: build/templates/build/build_base.html:110 +#: build/templates/build/detail.html:34 common/models.py:2571 +#: order/models.py:1356 order/models.py:2041 order/serializers.py:1455 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 +#: part/forms.py:48 part/models.py:3277 part/models.py:4246 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 @@ -1166,436 +1175,602 @@ msgstr "生产备注" #: 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:595 +#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 +#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 #: 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/barcode.js:579 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 +#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:236 -#: templates/js/translated/order.js:304 templates/js/translated/part.js:962 -#: templates/js/translated/part.js:1812 templates/js/translated/part.js:3342 +#: templates/js/translated/model_renderers.js:237 +#: templates/js/translated/order.js:329 templates/js/translated/part.js:965 +#: templates/js/translated/part.js:1815 templates/js/translated/part.js:3357 #: 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/purchase_order.js:1922 +#: templates/js/translated/purchase_order.js:2141 #: 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 +#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 +#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 +#: templates/js/translated/stock.js:3188 msgid "Quantity" msgstr "数量" -#: build/models.py:1392 +#: build/models.py:1490 #, fuzzy #| msgid "Stock required for build order" msgid "Required quantity for build order" msgstr "生产订单所需的库存" -#: build/models.py:1472 +#: build/models.py:1570 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定生产产出,因为主部件已经被标记为可追踪的" -#: build/models.py:1481 +#: build/models.py:1579 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:1491 order/models.py:1918 +#: build/models.py:1589 order/models.py:1992 msgid "Stock item is over-allocated" msgstr "库存物品分配过度!" -#: build/models.py:1497 order/models.py:1921 +#: build/models.py:1595 order/models.py:1995 msgid "Allocation quantity must be greater than zero" msgstr "分配数量必须大于0" -#: build/models.py:1503 +#: build/models.py:1601 msgid "Quantity must be 1 for serialized stock" msgstr "序列化库存的数量必须是 1" -#: build/models.py:1562 +#: build/models.py:1660 #, fuzzy #| msgid "Selected stock item not found in BOM" msgid "Selected stock item does not match BOM line" msgstr "在BOM中找不到选定的库存项" -#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1184 -#: order/serializers.py:1205 stock/models.py:360 stock/serializers.py:92 -#: stock/serializers.py:698 stock/serializers.py:1184 stock/serializers.py:1296 +#: build/models.py:1732 build/serializers.py:887 order/serializers.py:1292 +#: order/serializers.py:1313 stock/models.py:376 stock/serializers.py:93 +#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 #: 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/build.js:1918 #: 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 +#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 +#: templates/js/translated/stock.js:3061 msgid "Stock Item" msgstr "库存项" -#: build/models.py:1635 +#: build/models.py:1733 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:1648 +#: build/models.py:1746 msgid "Stock quantity to allocate to build" msgstr "分配到生产的数量" -#: build/models.py:1656 +#: build/models.py:1754 msgid "Install into" msgstr "安装到" -#: build/models.py:1657 +#: build/models.py:1755 msgid "Destination stock item" msgstr "目标库存项" -#: build/serializers.py:157 build/serializers.py:876 -#: templates/js/translated/build.js:1322 +#: build/serializers.py:94 build/serializers.py:1182 build/serializers.py:1270 +#: part/admin.py:41 part/admin.py:408 part/models.py:4095 part/stocktake.py:220 +#: stock/admin.py:156 +msgid "Part Name" +msgstr "" + +#: build/serializers.py:106 +#, fuzzy +#| msgid "Part QR Code" +msgid "Project Code Label" +msgstr "商品二维码" + +#: build/serializers.py:167 build/serializers.py:916 +#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 msgid "Build Output" msgstr "生产产出" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "Build output does not match the parent build" msgstr "生产产出与对应生产不匹配" -#: build/serializers.py:173 +#: build/serializers.py:183 msgid "Output part does not match BuildOrder part" msgstr "产出部件与生产订单部件不匹配" -#: build/serializers.py:177 +#: build/serializers.py:187 msgid "This build output has already been completed" msgstr "此生产产出已经完成" -#: build/serializers.py:188 +#: build/serializers.py:198 msgid "This build output is not fully allocated" msgstr "生产产出未被完成分配" -#: build/serializers.py:208 build/serializers.py:255 +#: build/serializers.py:218 build/serializers.py:265 msgid "Enter quantity for build output" msgstr "输入生产产出数量" -#: build/serializers.py:276 +#: build/serializers.py:286 msgid "Integer quantity required for trackable parts" msgstr "对于可追踪的部件,需要整数型数值" -#: build/serializers.py:279 +#: build/serializers.py:289 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "需要整数型数值,因为BOM包含可追踪的部件" -#: build/serializers.py:294 order/serializers.py:590 order/serializers.py:1344 -#: stock/serializers.py:615 templates/js/translated/purchase_order.js:1153 -#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +#: build/serializers.py:304 order/serializers.py:673 order/serializers.py:1459 +#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 +#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:295 +#: build/serializers.py:305 msgid "Enter serial numbers for build outputs" msgstr "输入生产产出的序列号" -#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 -#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 -#: part/serializers.py:1147 stock/serializers.py:101 stock/serializers.py:626 -#: stock/serializers.py:786 stock/serializers.py:882 stock/serializers.py:1328 -#: stock/serializers.py:1584 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 +#: build/serializers.py:310 build/serializers.py:451 build/serializers.py:523 +#: order/serializers.py:649 order/serializers.py:773 order/serializers.py:1776 +#: part/serializers.py:1210 stock/serializers.py:102 stock/serializers.py:691 +#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 +#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:578 +#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 +#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 +#: templates/js/translated/purchase_order.js:1210 +#: templates/js/translated/purchase_order.js:1320 #: 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 +#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 +#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 +#: templates/js/translated/stock.js:2955 msgid "Location" msgstr "地点" -#: build/serializers.py:301 +#: build/serializers.py:311 #, fuzzy #| msgid "Stock item created" msgid "Stock location for build output" msgstr "库存项已创建" -#: build/serializers.py:315 +#: build/serializers.py:325 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:316 +#: build/serializers.py:326 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项分配对应的序列号" -#: build/serializers.py:331 +#: build/serializers.py:341 #, 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 +#: build/serializers.py:366 stock/api.py:1033 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" -#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +#: build/serializers.py:413 build/serializers.py:475 build/serializers.py:564 msgid "A list of build outputs must be provided" msgstr "必须提供生产产出列表" -#: build/serializers.py:442 +#: build/serializers.py:452 #, fuzzy #| msgid "Stock item created" msgid "Stock location for scrapped outputs" msgstr "库存项已创建" -#: build/serializers.py:448 +#: build/serializers.py:458 #, fuzzy #| msgid "Stock Locations" msgid "Discard Allocations" msgstr "仓储地点" -#: build/serializers.py:449 +#: build/serializers.py:459 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:464 #, fuzzy #| msgid "Location for completed build outputs" msgid "Reason for scrapping build output(s)" msgstr "已完成生产产出的仓储地点" -#: build/serializers.py:514 +#: build/serializers.py:524 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:598 stock/admin.py:165 -#: stock/serializers.py:933 stock/serializers.py:1472 +#: build/serializers.py:530 build/templates/build/build_base.html:159 +#: build/templates/build/detail.html:62 order/models.py:477 +#: order/models.py:1003 order/models.py:2159 order/serializers.py:681 +#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 #: 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/barcode.js:252 templates/js/translated/build.js:2363 +#: templates/js/translated/purchase_order.js:1371 +#: templates/js/translated/purchase_order.js:1792 #: 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 +#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 +#: templates/js/translated/stock.js:3204 msgid "Status" msgstr "状态" -#: build/serializers.py:526 +#: build/serializers.py:536 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:527 +#: build/serializers.py:537 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未完成分配,完成产出" -#: build/serializers.py:612 +#: build/serializers.py:649 #, fuzzy #| msgid "Remove Allocated Stock" msgid "Consume Allocated Stock" msgstr "移除已分配的库存" -#: build/serializers.py:613 +#: build/serializers.py:650 #, 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:619 +#: build/serializers.py:656 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:620 +#: build/serializers.py:657 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的生产产出" -#: build/serializers.py:647 +#: build/serializers.py:684 msgid "Not permitted" msgstr "" -#: build/serializers.py:648 +#: build/serializers.py:685 msgid "Accept as consumed by this build order" msgstr "接受此构建订单所消耗的内容" -#: build/serializers.py:649 +#: build/serializers.py:686 msgid "Deallocate before completing this build order" msgstr "在完成此构建订单前取消分配" -#: build/serializers.py:679 +#: build/serializers.py:716 msgid "Overallocated Stock" msgstr "超出分配的库存" -#: build/serializers.py:681 +#: build/serializers.py:718 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "你想如何处理分配给构建订单的额外库存物品" -#: build/serializers.py:691 +#: build/serializers.py:728 msgid "Some stock items have been overallocated" msgstr "一些库存项已被过度分配" -#: build/serializers.py:696 +#: build/serializers.py:733 msgid "Accept Unallocated" msgstr "接受未分配的" -#: build/serializers.py:697 +#: build/serializers.py:734 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 +#: build/serializers.py:744 templates/js/translated/build.js:316 msgid "Required stock has not been fully allocated" msgstr "所需库存尚未完全分配" -#: build/serializers.py:712 order/serializers.py:302 order/serializers.py:1247 +#: build/serializers.py:749 order/serializers.py:340 order/serializers.py:1360 msgid "Accept Incomplete" msgstr "接受未完成" -#: build/serializers.py:713 +#: build/serializers.py:750 msgid "Accept that the required number of build outputs have not been completed" msgstr "接受所需的生产产出未完成" -#: build/serializers.py:723 templates/js/translated/build.js:319 +#: build/serializers.py:760 templates/js/translated/build.js:320 msgid "Required build quantity has not been completed" msgstr "所需生产数量尚未完成" -#: build/serializers.py:732 templates/js/translated/build.js:303 +#: build/serializers.py:769 +#, fuzzy +#| msgid "Build order output created" +msgid "Build order must be in production state" +msgstr "已创建生产订单输出" + +#: build/serializers.py:772 templates/js/translated/build.js:304 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:770 +#: build/serializers.py:810 #, fuzzy #| msgid "Build actions" msgid "Build Line" msgstr "生产操作" -#: build/serializers.py:780 +#: build/serializers.py:820 msgid "Build output" msgstr "生产产出" -#: build/serializers.py:788 +#: build/serializers.py:828 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:824 +#: build/serializers.py:864 #, fuzzy #| msgid "Delete parameters" msgid "Build Line Item" msgstr "删除参数" -#: build/serializers.py:838 +#: build/serializers.py:878 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单指向相同的部件" -#: build/serializers.py:853 stock/serializers.py:1197 +#: build/serializers.py:893 stock/serializers.py:1294 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:901 order/serializers.py:1238 +#: build/serializers.py:941 order/serializers.py:1346 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出了限制" -#: build/serializers.py:907 +#: build/serializers.py:947 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的部件的分配,必须指定生产产出" -#: build/serializers.py:914 +#: build/serializers.py:954 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的部件,无法指定生产产出" -#: build/serializers.py:938 order/serializers.py:1490 +#: build/serializers.py:978 order/serializers.py:1605 msgid "Allocation items must be provided" msgstr "必须提供分配的项" -#: build/serializers.py:1001 +#: build/serializers.py:1041 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部件来源的仓储地点(留空则可来源于任何仓储地点)" -#: build/serializers.py:1009 +#: build/serializers.py:1049 msgid "Exclude Location" msgstr "排除地点" -#: build/serializers.py:1010 +#: build/serializers.py:1050 msgid "Exclude stock items from this selected location" msgstr "从该选定的仓储地点排除库存项" -#: build/serializers.py:1015 +#: build/serializers.py:1055 msgid "Interchangeable Stock" msgstr "可互换的库存" -#: build/serializers.py:1016 +#: build/serializers.py:1056 msgid "Stock items in multiple locations can be used interchangeably" msgstr "多处地点的库存项可以互换使用" -#: build/serializers.py:1021 +#: build/serializers.py:1061 msgid "Substitute Stock" msgstr "可替换的库存" -#: build/serializers.py:1022 +#: build/serializers.py:1062 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的部件" -#: build/serializers.py:1027 +#: build/serializers.py:1067 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:1028 +#: build/serializers.py:1068 msgid "Allocate optional BOM items to build order" msgstr "分配可选的BOM项目来建立订单" -#: build/serializers.py:1050 +#: build/serializers.py:1090 msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1140 part/models.py:3999 part/models.py:4435 -#: stock/api.py:794 +#: build/serializers.py:1173 +#, fuzzy +#| msgid "Supplier Part Orders" +msgid "Supplier Part Number" +msgstr "供应商商品订单" + +#: build/serializers.py:1174 company/models.py:506 +msgid "Manufacturer Part Number" +msgstr "制造商商品编号" + +#: build/serializers.py:1175 stock/admin.py:53 stock/admin.py:175 +#: stock/serializers.py:457 +msgid "Location Name" +msgstr "" + +#: build/serializers.py:1176 +#, fuzzy +#| msgid "Build Order Reference" +msgid "Build Reference" +msgstr "相关生产订单" + +#: build/serializers.py:1177 +#, fuzzy +#| msgid "Reference" +msgid "BOM Reference" +msgstr "引用" + +#: build/serializers.py:1178 company/models.py:852 +#: company/templates/company/supplier_part.html:160 order/serializers.py:685 +#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/purchase_order.js:1169 +#: templates/js/translated/purchase_order.js:1332 +#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 +#: templates/js/translated/stock.js:2509 +msgid "Packaging" +msgstr "打包" + +#: build/serializers.py:1181 part/admin.py:39 part/admin.py:398 +#: part/models.py:4094 part/stocktake.py:219 stock/admin.py:152 +msgid "Part ID" +msgstr "商品ID" + +#: build/serializers.py:1183 build/serializers.py:1271 part/admin.py:402 +#: part/models.py:4096 +msgid "Part IPN" +msgstr "" + +#: build/serializers.py:1184 build/serializers.py:1273 part/admin.py:45 +#: part/stocktake.py:221 +msgid "Part Description" +msgstr "" + +#: build/serializers.py:1187 +#, fuzzy +#| msgid "Part ID" +msgid "BOM Part ID" +msgstr "商品ID" + +#: build/serializers.py:1188 +#, fuzzy +#| msgid "Part name" +msgid "BOM Part Name" +msgstr "商品名称" + +#: build/serializers.py:1191 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 +#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 +#: templates/js/translated/build.js:2527 +#: templates/js/translated/model_renderers.js:231 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:722 +#: 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:602 +msgid "Serial Number" +msgstr "序列号" + +#: build/serializers.py:1204 stock/serializers.py:593 +#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 +#: templates/js/translated/build.js:2516 +#, fuzzy +#| msgid "Allocated Parts" +msgid "Allocated Quantity" +msgstr "已分配的部件" + +#: build/serializers.py:1205 stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: build/serializers.py:1274 +#, fuzzy +#| msgid "Part Category" +msgid "Part Category ID" +msgstr "商品类别" + +#: build/serializers.py:1275 +#, fuzzy +#| msgid "Part Category" +msgid "Part Category Name" +msgstr "商品类别" + +#: build/serializers.py:1281 common/models.py:1513 part/admin.py:113 +#: part/models.py:1165 templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:790 +msgid "Trackable" +msgstr "可追踪" + +#: build/serializers.py:1282 +msgid "Inherited" +msgstr "" + +#: build/serializers.py:1283 part/models.py:4306 +#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 +#: templates/js/translated/build.js:2711 +msgid "Allow Variants" +msgstr "" + +#: build/serializers.py:1287 part/models.py:4103 part/models.py:4575 +#: stock/api.py:796 msgid "BOM Item" msgstr "BOM项" -#: build/serializers.py:1149 templates/js/translated/index.js:130 +#: build/serializers.py:1296 build/templates/build/detail.html:236 +#: build/templates/build/sidebar.html:16 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:835 part/serializers.py:1509 +#: build/serializers.py:1301 order/serializers.py:1170 part/admin.py:132 +#: part/bom.py:181 part/serializers.py:897 part/serializers.py:1600 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2613 templates/js/translated/part.js:710 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/build.js:2804 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2152 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1159 part/serializers.py:1511 -#: templates/js/translated/build.js:2617 +#: build/serializers.py:1306 order/serializers.py:1171 part/serializers.py:1602 +#: templates/js/translated/build.js:2808 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "正在生产" -#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1534 +#: build/serializers.py:1311 part/bom.py:180 part/serializers.py:1627 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "可用库存" +#: build/serializers.py:1315 +#, fuzzy +#| msgid "Substitute Stock" +msgid "Available Substitute Stock" +msgstr "可替换的库存" + +#: build/serializers.py:1316 +#, fuzzy +#| msgid "Available Stock" +msgid "Available Variant Stock" +msgstr "可用库存" + +#: build/serializers.py:1317 +#, fuzzy +#| msgid "Available Stock" +msgid "Total Available Stock" +msgstr "可用库存" + +#: build/serializers.py:1318 part/serializers.py:904 +#, fuzzy +#| msgid "External Link" +msgid "External 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 +#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 +#: templates/js/translated/table_filters.js:612 msgid "Pending" msgstr "待定" @@ -1603,15 +1778,21 @@ msgstr "待定" msgid "Production" msgstr "生产中" -#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 -#: order/status_codes.py:70 +#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 +#: order/status_codes.py:79 +msgid "On Hold" +msgstr "" + +#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 +#: order/status_codes.py:82 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 +#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 +#: importer/status_codes.py:19 order/status_codes.py:15 +#: order/status_codes.py:50 order/status_codes.py:81 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:168 report/models.py:444 msgid "Complete" msgstr "完成" @@ -1641,8 +1822,8 @@ msgstr "商品名称" #: 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 +#: stock/templates/stock/location.html:52 +#: templates/js/translated/filters.js:338 msgid "Barcode actions" msgstr "" @@ -1653,7 +1834,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:54 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1664,9 +1845,9 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:56 +#: templates/js/translated/barcode.js:527 +#: templates/js/translated/barcode.js:532 msgid "Unlink Barcode" msgstr "" @@ -1677,7 +1858,7 @@ msgstr "" #: 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 +#: stock/templates/stock/location.html:58 msgid "Link Barcode" msgstr "" @@ -1701,87 +1882,106 @@ 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:76 +#, fuzzy +#| msgid "Edit Build" +msgid "Hold Build" +msgstr "编辑生产" + #: build/templates/build/build_base.html:79 +msgid "Cancel Build" +msgstr "取消生产" + +#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "删除生产" -#: build/templates/build/build_base.html:84 -#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:87 +#, fuzzy +#| msgid "Delete Build" +msgid "Isueue Build" +msgstr "删除生产" + +#: build/templates/build/build_base.html:88 +#, fuzzy +#| msgid "Issued By" +msgid "Issue Build" +msgstr "发布者" + +#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:92 msgid "Complete Build" msgstr "生产完成" -#: build/templates/build/build_base.html:107 +#: build/templates/build/build_base.html:115 msgid "Build Description" msgstr "构建描述" -#: build/templates/build/build_base.html:117 +#: build/templates/build/build_base.html:125 msgid "No build outputs have been created for this build order" msgstr "针对此生产订单,尚未创建生产产出" -#: build/templates/build/build_base.html:124 +#: build/templates/build/build_base.html:132 msgid "Build Order is ready to mark as completed" msgstr "构建订单已准备好标记为已完成" -#: build/templates/build/build_base.html:129 +#: build/templates/build/build_base.html:137 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "创建订单无法完成,因为未完成的输出" -#: build/templates/build/build_base.html:134 +#: build/templates/build/build_base.html:142 msgid "Required build quantity has not yet been completed" msgstr "所需生产数量尚未完成" -#: build/templates/build/build_base.html:139 +#: build/templates/build/build_base.html:147 msgid "Stock has not been fully allocated to this Build Order" msgstr "库存尚未被完全分配到此构建订单" -#: build/templates/build/build_base.html:160 +#: build/templates/build/build_base.html:168 #: 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 +#: order/models.py:1391 order/serializers.py:174 +#: order/templates/order/order_base.html:191 +#: order/templates/order/return_order_base.html:167 +#: order/templates/order/sales_order_base.html:199 #: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1831 -#: templates/js/translated/purchase_order.js:1739 -#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1834 +#: templates/js/translated/purchase_order.js:1809 +#: templates/js/translated/purchase_order.js:2217 #: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:750 +#: templates/js/translated/return_order.js:749 #: 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 +#: build/templates/build/build_base.html:173 #, python-format msgid "This build was due on %(target)s" msgstr "此次生产的截止日期为 %(target)s" -#: 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 +#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:230 +#: order/templates/order/order_base.html:127 +#: order/templates/order/return_order_base.html:120 +#: order/templates/order/sales_order_base.html:129 #: 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 +#: templates/js/translated/table_filters.js:538 +#: templates/js/translated/table_filters.js:640 +#: templates/js/translated/table_filters.js:681 msgid "Overdue" msgstr "逾期" -#: build/templates/build/build_base.html:177 +#: build/templates/build/build_base.html:185 #: 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 +#: build/templates/build/build_base.html:198 +#: build/templates/build/detail.html:101 order/api.py:1404 order/models.py:893 +#: order/models.py:1650 order/models.py:1765 order/models.py:1924 #: 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 @@ -1791,33 +1991,45 @@ msgstr "已完成输出" #: 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 +#: templates/js/translated/stock.js:3008 msgid "Sales Order" msgstr "销售订单" -#: build/templates/build/build_base.html:197 +#: build/templates/build/build_base.html:205 #: 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 +#: build/templates/build/build_base.html:219 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 msgid "Priority" msgstr "优先级" -#: build/templates/build/build_base.html:269 +#: build/templates/build/build_base.html:267 +#, fuzzy +#| msgid "New Build Order" +msgid "Issue Build Order" +msgstr "新建生产订单" + +#: build/templates/build/build_base.html:271 +#, fuzzy +#| msgid "New Sales Order" +msgid "Issue this Build Order?" +msgstr "新建销售订单" + +#: build/templates/build/build_base.html:302 msgid "Delete Build Order" msgstr "删除生产订单" -#: build/templates/build/build_base.html:279 +#: build/templates/build/build_base.html:312 #, fuzzy #| msgid "Build Order" msgid "Build Order QR Code" msgstr "生产订单" -#: build/templates/build/build_base.html:291 +#: build/templates/build/build_base.html:324 #, fuzzy #| msgid "Print Build Orders" msgid "Link Barcode to Build Order" @@ -1835,8 +2047,8 @@ msgstr "库存来源" 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 +#: build/templates/build/detail.html:49 order/models.py:1532 +#: templates/js/translated/purchase_order.js:2259 msgid "Destination" msgstr "目的地" @@ -1848,23 +2060,23 @@ msgstr "目标位置未指定" msgid "Allocated Parts" msgstr "已分配的部件" -#: build/templates/build/detail.html:80 stock/admin.py:163 +#: build/templates/build/detail.html:80 stock/admin.py:162 #: 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/build.js:1553 +#: templates/js/translated/model_renderers.js:242 +#: templates/js/translated/purchase_order.js:1326 +#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 +#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 #: 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 +#: order/templates/order/order_base.html:178 +#: order/templates/order/return_order_base.html:154 +#: order/templates/order/sales_order_base.html:193 +#: templates/js/translated/build.js:2371 msgid "Created" msgstr "已创建" @@ -1873,8 +2085,8 @@ 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 +#: order/templates/order/sales_order_base.html:209 +#: templates/js/translated/table_filters.js:703 msgid "Completed" msgstr "已完成" @@ -1882,13 +2094,15 @@ msgstr "已完成" msgid "Build not complete" msgstr "生产未完成" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 msgid "Child Build Orders" msgstr "子生产订单" #: build/templates/build/detail.html:177 -msgid "Allocate Stock to Build" -msgstr "为生产分配库存" +#, fuzzy +#| msgid "Delete parameters" +msgid "Build Order Line Items" +msgstr "删除参数" #: build/templates/build/detail.html:181 #, fuzzy @@ -1914,7 +2128,7 @@ msgstr "自动分配" msgid "Manually allocate stock to build" msgstr "手动分配存货进行生成" -#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:188 msgid "Allocate Stock" msgstr "分配库存" @@ -1945,17 +2159,23 @@ msgstr "创建新构建输出" msgid "New Build Output" msgstr "新建构建输出" -#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 #, fuzzy #| msgid "Minimum Stock" msgid "Consumed Stock" msgstr "最低库存" -#: build/templates/build/detail.html:249 +#: build/templates/build/detail.html:261 msgid "Completed Build Outputs" msgstr "已完成构建输出" -#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:273 +#, fuzzy +#| msgid "Build status" +msgid "Build test statistics" +msgstr "生产状态" + +#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -1965,27 +2185,27 @@ msgstr "已完成构建输出" #: 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 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 +#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "附件" -#: build/templates/build/detail.html:276 +#: build/templates/build/detail.html:303 msgid "Build Notes" msgstr "生产备注" -#: build/templates/build/detail.html:437 +#: build/templates/build/detail.html:457 msgid "Allocation Complete" msgstr "分配完成" -#: build/templates/build/detail.html:438 +#: build/templates/build/detail.html:458 #, fuzzy #| msgid "Required stock has not been fully allocated" msgid "All lines have been fully allocated" msgstr "所需库存尚未完全分配" -#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +#: build/templates/build/index.html:18 part/templates/part/detail.html:335 msgid "New Build Order" msgstr "新建生产订单" @@ -1993,10 +2213,43 @@ msgstr "新建生产订单" msgid "Build Order Details" msgstr "生产订单详情" +#: build/templates/build/sidebar.html:8 order/serializers.py:82 +#: 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 "" + #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "未完成输出" +#: build/templates/build/sidebar.html:24 +#: part/templates/part/part_sidebar.html:56 +#, fuzzy +#| msgid "Destination" +msgid "Test Statistics" +msgstr "目的地" + +#: common/api.py:692 +#, fuzzy +#| msgid "Link" +msgid "Is Link" +msgstr "链接" + +#: common/api.py:700 +#, fuzzy +#| msgid "File" +msgid "Is File" +msgstr "文件" + +#: common/api.py:742 +msgid "User does not have permission to delete this attachment" +msgstr "" + #: common/currency.py:132 #, fuzzy #| msgid "Not a valid currency code" @@ -2015,7 +2268,7 @@ msgstr "不是有效的货币代码" msgid "No valid currency codes provided" msgstr "不是有效的货币代码" -#: common/currency.py:153 +#: common/currency.py:156 #, fuzzy #| msgid "Subcategories" msgid "No plugin" @@ -2060,1664 +2313,1724 @@ msgstr "{name.title()} 文件" msgid "Select {name} file to upload" msgstr "选择 {name} 文件上传" -#: common/models.py:69 +#: common/models.py:86 msgid "Updated" msgstr "已更新" -#: common/models.py:70 +#: common/models.py:87 msgid "Timestamp of last update" msgstr "最后一次更新时间" -#: common/models.py:103 +#: common/models.py:120 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:128 +#: common/models.py:150 msgid "Unique project code" msgstr "" -#: common/models.py:135 +#: common/models.py:157 #, fuzzy #| msgid "Part description" msgid "Project description" msgstr "商品描述" -#: common/models.py:144 +#: common/models.py:166 #, fuzzy #| msgid "User or group responsible for this order" msgid "User or group responsible for this project" msgstr "负责此订单的用户或群组" -#: common/models.py:764 +#: common/models.py:783 msgid "Settings key (must be unique - case insensitive)" msgstr "设置键值(必须是唯一的 - 大小写不敏感)" -#: common/models.py:768 +#: common/models.py:787 msgid "Settings value" msgstr "设定值" -#: common/models.py:820 +#: common/models.py:839 msgid "Chosen value is not a valid option" msgstr "选择的值不是一个有效的选项" -#: common/models.py:836 +#: common/models.py:855 msgid "Value must be a boolean value" msgstr "值必须是布尔量" -#: common/models.py:844 +#: common/models.py:863 msgid "Value must be an integer value" msgstr "值必须为整数" -#: common/models.py:881 +#: common/models.py:900 msgid "Key string must be unique" msgstr "关键字必须是唯一的" -#: common/models.py:1113 +#: common/models.py:1132 msgid "No group" msgstr "无群组" -#: common/models.py:1212 +#: common/models.py:1231 msgid "Restart required" msgstr "需要重启" -#: common/models.py:1214 +#: common/models.py:1233 msgid "A setting has been changed which requires a server restart" msgstr "设置已更改,需要服务器重启" -#: common/models.py:1221 +#: common/models.py:1240 #, fuzzy #| msgid "Printing Actions" msgid "Pending migrations" msgstr "打印操作" -#: common/models.py:1222 +#: common/models.py:1241 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1227 +#: common/models.py:1246 msgid "Server Instance Name" msgstr "服务器实例名称" -#: common/models.py:1229 +#: common/models.py:1248 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1233 +#: common/models.py:1252 msgid "Use instance name" msgstr "" -#: common/models.py:1234 +#: common/models.py:1253 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1239 +#: common/models.py:1258 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1240 +#: common/models.py:1259 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1245 company/models.py:108 company/models.py:109 +#: common/models.py:1264 company/models.py:111 company/models.py:112 msgid "Company name" msgstr "公司名称" -#: common/models.py:1246 +#: common/models.py:1265 msgid "Internal company name" msgstr "内部公司名称" -#: common/models.py:1250 +#: common/models.py:1269 msgid "Base URL" msgstr "" -#: common/models.py:1251 +#: common/models.py:1270 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1257 +#: common/models.py:1276 msgid "Default Currency" msgstr "" -#: common/models.py:1258 +#: common/models.py:1277 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1264 +#: common/models.py:1283 msgid "Supported Currencies" msgstr "" -#: common/models.py:1265 +#: common/models.py:1284 #, fuzzy #| msgid "Not a valid currency code" msgid "List of supported currency codes" msgstr "不是有效的货币代码" -#: common/models.py:1271 +#: common/models.py:1290 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1273 +#: common/models.py:1292 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1276 common/models.py:1332 common/models.py:1345 -#: common/models.py:1353 common/models.py:1362 common/models.py:1371 -#: common/models.py:1589 common/models.py:1611 common/models.py:1726 -#: common/models.py:2045 +#: common/models.py:1295 common/models.py:1351 common/models.py:1364 +#: common/models.py:1372 common/models.py:1381 common/models.py:1390 +#: common/models.py:1627 common/models.py:1649 common/models.py:1764 +#: common/models.py:2138 msgid "days" msgstr "天" -#: common/models.py:1280 +#: common/models.py:1299 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1281 +#: common/models.py:1300 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1286 +#: common/models.py:1305 msgid "Download from URL" msgstr "" -#: common/models.py:1288 +#: common/models.py:1307 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1294 +#: common/models.py:1313 msgid "Download Size Limit" msgstr "" -#: common/models.py:1295 +#: common/models.py:1314 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1301 +#: common/models.py:1320 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1303 +#: common/models.py:1322 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:1308 +#: common/models.py:1327 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1309 +#: common/models.py:1328 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1314 +#: common/models.py:1333 msgid "Require confirm" msgstr "" -#: common/models.py:1315 +#: common/models.py:1334 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1320 +#: common/models.py:1339 msgid "Tree Depth" msgstr "" -#: common/models.py:1322 +#: common/models.py:1341 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1328 +#: common/models.py:1347 msgid "Update Check Interval" msgstr "" -#: common/models.py:1329 +#: common/models.py:1348 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1335 +#: common/models.py:1354 msgid "Automatic Backup" msgstr "" -#: common/models.py:1336 +#: common/models.py:1355 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1341 +#: common/models.py:1360 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1342 +#: common/models.py:1361 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1348 +#: common/models.py:1367 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1350 +#: common/models.py:1369 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1357 +#: common/models.py:1376 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1359 +#: common/models.py:1378 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1366 +#: common/models.py:1385 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1368 +#: common/models.py:1387 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1375 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1376 +#: common/models.py:1395 #, fuzzy #| msgid "Enable barcode scanner support" msgid "Enable barcode scanner support in the web interface" msgstr "启用条形码扫描支持" -#: common/models.py:1381 +#: common/models.py:1400 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1382 +#: common/models.py:1401 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1388 +#: common/models.py:1407 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1389 +#: common/models.py:1408 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1394 +#: common/models.py:1413 +#, fuzzy +#| msgid "Barcode Data" +msgid "Barcode Show Data" +msgstr "条码数据" + +#: common/models.py:1414 +msgid "Display barcode data in browser as text" +msgstr "" + +#: common/models.py:1419 +#, fuzzy +#| msgid "Barcode Settings" +msgid "Barcode Generation Plugin" +msgstr "条形码设置" + +#: common/models.py:1420 +msgid "Plugin to use for internal barcode data generation" +msgstr "" + +#: common/models.py:1425 #, fuzzy #| msgid "Part description" msgid "Part Revisions" msgstr "商品描述" -#: common/models.py:1395 +#: common/models.py:1426 #, fuzzy #| msgid "Enable internal prices for parts" msgid "Enable revision field for Part" msgstr "启用内部商品价格" -#: common/models.py:1400 +#: common/models.py:1431 +msgid "Assembly Revision Only" +msgstr "" + +#: common/models.py:1432 +msgid "Only allow revisions for assembly parts" +msgstr "" + +#: common/models.py:1437 #, fuzzy #| msgid "Removed from assembly" msgid "Allow Deletion from Assembly" msgstr "已从组装中删除" -#: common/models.py:1401 +#: common/models.py:1438 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/models.py:1406 +#: common/models.py:1443 msgid "IPN Regex" msgstr "" -#: common/models.py:1407 +#: common/models.py:1444 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1410 +#: common/models.py:1447 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1411 +#: common/models.py:1448 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1416 +#: common/models.py:1453 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1417 +#: common/models.py:1454 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1422 +#: common/models.py:1459 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1423 +#: common/models.py:1460 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1428 +#: common/models.py:1465 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1429 +#: common/models.py:1466 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1434 +#: common/models.py:1471 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1435 +#: common/models.py:1472 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1477 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1441 +#: common/models.py:1478 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1446 part/admin.py:108 part/models.py:3841 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:228 +#: common/models.py:1483 part/admin.py:108 part/models.py:3938 +#: report/models.py:294 report/models.py:361 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:232 #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:786 msgid "Template" msgstr "模板" -#: common/models.py:1447 +#: common/models.py:1484 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1452 part/admin.py:91 part/admin.py:433 part/models.py:1060 -#: templates/js/translated/bom.js:1639 +#: common/models.py:1489 part/admin.py:91 part/admin.py:428 part/models.py:1153 +#: part/serializers.py:1573 templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 -#: templates/js/translated/table_filters.js:721 +#: templates/js/translated/table_filters.js:740 msgid "Assembly" msgstr "组装" -#: common/models.py:1453 +#: common/models.py:1490 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1458 part/admin.py:95 part/models.py:1066 -#: templates/js/translated/table_filters.js:729 +#: common/models.py:1495 part/admin.py:95 part/models.py:1159 +#: part/serializers.py:1594 templates/js/translated/table_filters.js:748 msgid "Component" msgstr "组件" -#: common/models.py:1459 +#: common/models.py:1496 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1464 part/admin.py:100 part/models.py:1078 +#: common/models.py:1501 part/admin.py:100 part/models.py:1171 msgid "Purchaseable" msgstr "可购买" -#: common/models.py:1465 +#: common/models.py:1502 msgid "Parts are purchaseable by default" msgstr "商品默认可购买" -#: common/models.py:1470 part/admin.py:104 part/models.py:1084 -#: templates/js/translated/table_filters.js:755 +#: common/models.py:1507 part/admin.py:104 part/models.py:1177 +#: templates/js/translated/table_filters.js:774 msgid "Salable" msgstr "可销售" -#: common/models.py:1471 +#: common/models.py:1508 msgid "Parts are salable by default" msgstr "商品默认可销售" -#: common/models.py:1476 part/admin.py:113 part/models.py:1072 -#: 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:1477 +#: common/models.py:1514 msgid "Parts are trackable by default" msgstr "商品默认可跟踪" -#: common/models.py:1482 part/admin.py:117 part/models.py:1094 +#: common/models.py:1519 part/admin.py:117 part/models.py:1193 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:775 +#: templates/js/translated/table_filters.js:794 msgid "Virtual" msgstr "虚拟" -#: common/models.py:1483 +#: common/models.py:1520 msgid "Parts are virtual by default" msgstr "商品默认是虚拟的" -#: common/models.py:1488 +#: common/models.py:1525 msgid "Show Import in Views" msgstr "视图中显示导入" -#: common/models.py:1489 +#: common/models.py:1526 msgid "Display the import wizard in some part views" msgstr "在一些商品视图中显示导入向导" -#: common/models.py:1494 +#: common/models.py:1531 msgid "Show related parts" msgstr "显示相关商品" -#: common/models.py:1495 +#: common/models.py:1532 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1500 +#: common/models.py:1537 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1501 +#: common/models.py:1538 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1506 templates/js/translated/part.js:107 +#: common/models.py:1543 templates/js/translated/part.js:108 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1508 +#: common/models.py:1545 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1514 +#: common/models.py:1551 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1515 +#: common/models.py:1552 msgid "Format to display the part name" msgstr "" -#: common/models.py:1521 +#: common/models.py:1558 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1522 +#: common/models.py:1559 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1526 +#: common/models.py:1564 #, fuzzy #| msgid "Parameter units" msgid "Enforce Parameter Units" msgstr "参数单位" -#: common/models.py:1528 +#: common/models.py:1566 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1534 +#: common/models.py:1572 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1536 +#: common/models.py:1574 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1547 +#: common/models.py:1585 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1549 +#: common/models.py:1587 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1560 +#: common/models.py:1598 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1562 +#: common/models.py:1600 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1568 +#: common/models.py:1606 msgid "Purchase History Override" msgstr "" -#: common/models.py:1570 +#: common/models.py:1608 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1576 +#: common/models.py:1614 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1578 +#: common/models.py:1616 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1584 +#: common/models.py:1622 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1586 +#: common/models.py:1624 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1593 +#: common/models.py:1631 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1594 +#: common/models.py:1632 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1599 +#: common/models.py:1637 msgid "Active Variants Only" msgstr "" -#: common/models.py:1601 +#: common/models.py:1639 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1607 +#: common/models.py:1645 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1609 +#: common/models.py:1647 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1616 +#: common/models.py:1654 msgid "Internal Prices" msgstr "内部价格" -#: common/models.py:1617 +#: common/models.py:1655 msgid "Enable internal prices for parts" msgstr "启用内部商品价格" -#: common/models.py:1622 +#: common/models.py:1660 msgid "Internal Price Override" msgstr "" -#: common/models.py:1624 +#: common/models.py:1662 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1630 +#: common/models.py:1668 msgid "Enable label printing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1669 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1636 +#: common/models.py:1674 msgid "Label Image DPI" msgstr "" -#: common/models.py:1638 +#: common/models.py:1676 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1644 +#: common/models.py:1682 msgid "Enable Reports" msgstr "" -#: common/models.py:1645 +#: common/models.py:1683 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1650 templates/stats.html:25 +#: common/models.py:1688 templates/stats.html:25 msgid "Debug Mode" msgstr "调试模式" -#: common/models.py:1651 +#: common/models.py:1689 msgid "Generate reports in debug mode (HTML output)" msgstr "在调试模式生成报告(HTML输出)" -#: common/models.py:1656 +#: common/models.py:1694 #, fuzzy #| msgid "No Reports Found" msgid "Log Report Errors" msgstr "没有找到报表" -#: common/models.py:1657 +#: common/models.py:1695 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1662 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:302 msgid "Page Size" msgstr "页面大小" -#: common/models.py:1663 +#: common/models.py:1701 msgid "Default page size for PDF reports" msgstr "PDF 报表默认页面大小" -#: common/models.py:1668 +#: common/models.py:1706 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1707 msgid "Enable generation of test reports" msgstr "启用生成测试报表" -#: common/models.py:1674 +#: common/models.py:1712 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1676 +#: common/models.py:1714 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1682 +#: common/models.py:1720 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1683 +#: common/models.py:1721 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1688 +#: common/models.py:1726 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1689 +#: common/models.py:1727 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1694 +#: common/models.py:1732 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1696 +#: common/models.py:1734 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1702 +#: common/models.py:1740 msgid "Batch Code Template" msgstr "" -#: common/models.py:1704 +#: common/models.py:1742 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1709 +#: common/models.py:1747 msgid "Stock Expiry" msgstr "库存到期" -#: common/models.py:1710 +#: common/models.py:1748 msgid "Enable stock expiry functionality" msgstr "启用库存到期功能" -#: common/models.py:1715 +#: common/models.py:1753 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/models.py:1716 +#: common/models.py:1754 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/models.py:1721 +#: common/models.py:1759 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1723 +#: common/models.py:1761 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1730 +#: common/models.py:1768 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1731 +#: common/models.py:1769 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1736 +#: common/models.py:1774 msgid "Stock Ownership Control" msgstr "库存所有权控制" -#: common/models.py:1737 +#: common/models.py:1775 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1742 +#: common/models.py:1780 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1743 +#: common/models.py:1781 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1747 +#: common/models.py:1786 #, fuzzy #| msgid "Select Stock Items" msgid "Show Installed Stock Items" msgstr "选择库存项" -#: common/models.py:1748 +#: common/models.py:1787 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1753 +#: common/models.py:1792 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1755 +#: common/models.py:1794 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1761 +#: common/models.py:1800 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1763 +#: common/models.py:1802 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/models.py:1769 +#: common/models.py:1808 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1771 +#: common/models.py:1810 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1777 common/models.py:1805 common/models.py:1827 -#: common/models.py:1863 +#: common/models.py:1816 common/models.py:1864 common/models.py:1886 +#: common/models.py:1922 #, fuzzy #| msgid "Responsible" msgid "Require Responsible Owner" msgstr "责任人" -#: common/models.py:1778 common/models.py:1806 common/models.py:1828 -#: common/models.py:1864 +#: common/models.py:1817 common/models.py:1865 common/models.py:1887 +#: common/models.py:1923 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1783 +#: common/models.py:1822 +#, fuzzy +#| msgid "Build to allocate parts" +msgid "Require Active Part" +msgstr "生产以分配部件" + +#: common/models.py:1823 +#, fuzzy +#| msgid "Print build order report" +msgid "Prevent build order creation for inactive parts" +msgstr "打印构建订单报告" + +#: common/models.py:1828 +#, fuzzy +#| msgid "Build to allocate parts" +msgid "Require Locked Part" +msgstr "生产以分配部件" + +#: common/models.py:1829 +#, fuzzy +#| msgid "Print build order report" +msgid "Prevent build order creation for unlocked parts" +msgstr "打印构建订单报告" + +#: common/models.py:1834 +msgid "Require Valid BOM" +msgstr "" + +#: common/models.py:1836 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "" + +#: common/models.py:1842 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1785 +#: common/models.py:1844 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1791 +#: common/models.py:1850 #, fuzzy #| msgid "Sales Orders" msgid "Enable Return Orders" msgstr "销售订单" -#: common/models.py:1792 +#: common/models.py:1851 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1797 +#: common/models.py:1856 #, fuzzy #| msgid "Build Order Reference" msgid "Return Order Reference Pattern" msgstr "相关生产订单" -#: common/models.py:1799 +#: common/models.py:1858 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1811 +#: common/models.py:1870 #, fuzzy #| msgid "Complete Build Order" msgid "Edit Completed Return Orders" msgstr "生产订单完成" -#: common/models.py:1813 +#: common/models.py:1872 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1819 +#: common/models.py:1878 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1821 +#: common/models.py:1880 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1833 +#: common/models.py:1892 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1834 +#: common/models.py:1893 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1839 +#: common/models.py:1898 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1841 +#: common/models.py:1900 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1847 +#: common/models.py:1906 #, fuzzy #| msgid "Build Order is incomplete" msgid "Mark Shipped Orders as Complete" msgstr "生产订单未完成" -#: common/models.py:1849 +#: common/models.py:1908 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/models.py:1855 +#: common/models.py:1914 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1857 +#: common/models.py:1916 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1869 +#: common/models.py:1928 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1871 +#: common/models.py:1930 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1877 +#: common/models.py:1936 #, fuzzy #| msgid "Create Purchase Order" msgid "Auto Complete Purchase Orders" msgstr "创建采购订单" -#: common/models.py:1879 +#: common/models.py:1938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1886 +#: common/models.py:1945 msgid "Enable password forgot" msgstr "" -#: common/models.py:1887 +#: common/models.py:1946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1892 +#: common/models.py:1951 msgid "Enable registration" msgstr "" -#: common/models.py:1893 +#: common/models.py:1952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1898 +#: common/models.py:1957 msgid "Enable SSO" msgstr "" -#: common/models.py:1899 +#: common/models.py:1958 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1904 +#: common/models.py:1963 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1906 +#: common/models.py:1965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1912 -msgid "Email required" +#: common/models.py:1971 +msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1913 -msgid "Require user to supply mail on signup" +#: common/models.py:1973 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/models.py:1918 -msgid "Auto-fill SSO users" +#: common/models.py:1979 +msgid "SSO group key" msgstr "" -#: common/models.py:1920 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1981 +msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/models.py:1926 -msgid "Mail twice" -msgstr "" - -#: common/models.py:1927 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1932 -msgid "Password twice" -msgstr "" - -#: common/models.py:1933 -msgid "On signup ask users twice for their password" -msgstr "" - -#: common/models.py:1938 -msgid "Allowed domains" -msgstr "" - -#: common/models.py:1940 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "" - -#: common/models.py:1946 -msgid "Group on signup" -msgstr "" - -#: common/models.py:1947 -msgid "Group to which new users are assigned on registration" -msgstr "" - -#: common/models.py:1952 -msgid "Enforce MFA" -msgstr "" - -#: common/models.py:1953 -msgid "Users must use multifactor security." -msgstr "" - -#: common/models.py:1958 -msgid "Check plugins on startup" -msgstr "" - -#: common/models.py:1960 -msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" - -#: common/models.py:1968 -msgid "Check for plugin updates" -msgstr "" - -#: common/models.py:1969 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/models.py:1975 -msgid "Enable URL integration" -msgstr "" - -#: common/models.py:1976 -msgid "Enable plugins to add URL routes" -msgstr "" - -#: common/models.py:1982 -msgid "Enable navigation integration" -msgstr "" - -#: common/models.py:1983 -msgid "Enable plugins to integrate into navigation" +#: common/models.py:1987 +msgid "SSO group map" msgstr "" #: common/models.py:1989 -msgid "Enable app integration" +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/models.py:1990 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:1996 -msgid "Enable schedule integration" +#: common/models.py:1995 +msgid "Remove groups outside of SSO" msgstr "" #: common/models.py:1997 -msgid "Enable plugins to run scheduled tasks" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" #: common/models.py:2003 -msgid "Enable event integration" +msgid "Email required" msgstr "" #: common/models.py:2004 +msgid "Require user to supply mail on signup" +msgstr "" + +#: common/models.py:2009 +msgid "Auto-fill SSO users" +msgstr "" + +#: common/models.py:2011 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "" + +#: common/models.py:2017 +msgid "Mail twice" +msgstr "" + +#: common/models.py:2018 +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:2023 +msgid "Password twice" +msgstr "" + +#: common/models.py:2024 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:2029 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:2031 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "" + +#: common/models.py:2037 +msgid "Group on signup" +msgstr "" + +#: common/models.py:2039 +msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +msgstr "" + +#: common/models.py:2045 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:2046 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:2051 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:2053 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:2061 +msgid "Check for plugin updates" +msgstr "" + +#: common/models.py:2062 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2068 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2069 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2075 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2076 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2082 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2083 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2089 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2090 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2096 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2010 +#: common/models.py:2103 #, fuzzy #| msgid "Sales Orders" msgid "Enable project codes" msgstr "销售订单" -#: common/models.py:2011 +#: common/models.py:2104 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2016 +#: common/models.py:2109 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2018 +#: common/models.py:2111 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2024 +#: common/models.py:2117 #, fuzzy #| msgid "Exclude Location" msgid "Exclude External Locations" msgstr "排除地点" -#: common/models.py:2026 +#: common/models.py:2119 #, fuzzy #| msgid "Exclude stock items from this selected location" msgid "Exclude stock items in external locations from stocktake calculations" msgstr "从该选定的仓储地点排除库存项" -#: common/models.py:2032 +#: common/models.py:2125 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2034 +#: common/models.py:2127 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2040 +#: common/models.py:2133 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2042 +#: common/models.py:2135 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2049 +#: common/models.py:2142 msgid "Display Users full names" msgstr "" -#: common/models.py:2050 +#: common/models.py:2143 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2055 +#: common/models.py:2148 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2056 +#: common/models.py:2149 #, fuzzy #| msgid "Enable generation of test reports" msgid "Enable test station data collection for test results" msgstr "启用生成测试报表" -#: common/models.py:2068 common/models.py:2478 +#: common/models.py:2161 common/models.py:2541 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2111 +#: common/models.py:2204 #, fuzzy #| msgid "Build to allocate parts" msgid "Hide inactive parts" msgstr "生产以分配部件" -#: common/models.py:2113 +#: common/models.py:2206 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2119 +#: common/models.py:2212 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2120 +#: common/models.py:2213 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2125 +#: common/models.py:2218 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2126 +#: common/models.py:2219 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2131 +#: common/models.py:2224 msgid "Show latest parts" msgstr "显示最近商品" -#: common/models.py:2132 +#: common/models.py:2225 msgid "Show latest parts on the homepage" msgstr "在主页上显示最近商品" -#: common/models.py:2137 +#: common/models.py:2230 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2138 +#: common/models.py:2231 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2143 +#: common/models.py:2236 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2144 +#: common/models.py:2237 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2149 +#: common/models.py:2242 msgid "Show low stock" msgstr "" -#: common/models.py:2150 +#: common/models.py:2243 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2155 +#: common/models.py:2248 msgid "Show depleted stock" msgstr "" -#: common/models.py:2156 +#: common/models.py:2249 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2161 +#: common/models.py:2254 msgid "Show needed stock" msgstr "" -#: common/models.py:2162 +#: common/models.py:2255 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2167 +#: common/models.py:2260 msgid "Show expired stock" msgstr "" -#: common/models.py:2168 +#: common/models.py:2261 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2173 +#: common/models.py:2266 msgid "Show stale stock" msgstr "" -#: common/models.py:2174 +#: common/models.py:2267 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2179 +#: common/models.py:2272 msgid "Show pending builds" msgstr "" -#: common/models.py:2180 +#: common/models.py:2273 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2185 +#: common/models.py:2278 msgid "Show overdue builds" msgstr "显示逾期生产" -#: common/models.py:2186 +#: common/models.py:2279 msgid "Show overdue builds on the homepage" msgstr "在主页上显示逾期的生产" -#: common/models.py:2191 +#: common/models.py:2284 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2192 +#: common/models.py:2285 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2197 +#: common/models.py:2290 msgid "Show overdue POs" msgstr "" -#: common/models.py:2198 +#: common/models.py:2291 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2203 +#: common/models.py:2296 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2204 +#: common/models.py:2297 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2209 +#: common/models.py:2302 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2210 +#: common/models.py:2303 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2215 +#: common/models.py:2308 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2216 +#: common/models.py:2309 #, fuzzy #| msgid "Show latest parts on the homepage" msgid "Show pending SO shipments on the homepage" msgstr "在主页上显示最近商品" -#: common/models.py:2221 +#: common/models.py:2314 msgid "Show News" msgstr "" -#: common/models.py:2222 +#: common/models.py:2315 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2227 +#: common/models.py:2320 msgid "Inline label display" msgstr "内嵌标签显示" -#: common/models.py:2229 +#: common/models.py:2322 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载" -#: common/models.py:2235 +#: common/models.py:2328 msgid "Default label printer" msgstr "" -#: common/models.py:2237 +#: common/models.py:2330 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2243 +#: common/models.py:2336 msgid "Inline report display" msgstr "" -#: common/models.py:2245 +#: common/models.py:2338 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载" -#: common/models.py:2251 +#: common/models.py:2344 msgid "Search Parts" msgstr "" -#: common/models.py:2252 +#: common/models.py:2345 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2257 +#: common/models.py:2350 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2258 +#: common/models.py:2351 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2263 +#: common/models.py:2356 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2264 +#: common/models.py:2357 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2269 +#: common/models.py:2362 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2270 +#: common/models.py:2363 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2275 +#: common/models.py:2368 msgid "Search Categories" msgstr "" -#: common/models.py:2276 +#: common/models.py:2369 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2281 +#: common/models.py:2374 msgid "Search Stock" msgstr "" -#: common/models.py:2282 +#: common/models.py:2375 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2287 +#: common/models.py:2380 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2289 +#: common/models.py:2382 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2388 msgid "Search Locations" msgstr "" -#: common/models.py:2296 +#: common/models.py:2389 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2301 +#: common/models.py:2394 msgid "Search Companies" msgstr "" -#: common/models.py:2302 +#: common/models.py:2395 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2307 +#: common/models.py:2400 msgid "Search Build Orders" msgstr "" -#: common/models.py:2308 +#: common/models.py:2401 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2313 +#: common/models.py:2406 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2314 +#: common/models.py:2407 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2319 +#: common/models.py:2412 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2321 +#: common/models.py:2414 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2420 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2328 +#: common/models.py:2421 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2333 +#: common/models.py:2426 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2335 +#: common/models.py:2428 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2434 #, fuzzy #| msgid "Purchase Orders" msgid "Search Return Orders" msgstr "采购订单" -#: common/models.py:2342 +#: common/models.py:2435 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2347 +#: common/models.py:2440 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2349 +#: common/models.py:2442 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2448 msgid "Search Preview Results" msgstr "搜索预览结果" -#: common/models.py:2357 +#: common/models.py:2450 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2456 #, fuzzy #| msgid "Search" msgid "Regex Search" msgstr "搜索" -#: common/models.py:2364 +#: common/models.py:2457 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2369 +#: common/models.py:2462 msgid "Whole Word Search" msgstr "" -#: common/models.py:2370 +#: common/models.py:2463 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2375 +#: common/models.py:2468 msgid "Show Quantity in Forms" msgstr "在表格中显示数量" -#: common/models.py:2376 +#: common/models.py:2469 msgid "Display available part quantity in some forms" msgstr "在某些表格中显示可用的商品数量" -#: common/models.py:2381 +#: common/models.py:2474 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2382 +#: common/models.py:2475 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2387 +#: common/models.py:2480 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2388 +#: common/models.py:2481 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2393 +#: common/models.py:2486 msgid "Date Format" msgstr "" -#: common/models.py:2394 +#: common/models.py:2487 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2407 part/templates/part/detail.html:41 +#: common/models.py:2500 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2408 +#: common/models.py:2501 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2413 part/templates/part/detail.html:62 +#: common/models.py:2506 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2415 +#: common/models.py:2508 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2421 +#: common/models.py:2514 msgid "Table String Length" msgstr "" -#: common/models.py:2423 +#: common/models.py:2516 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2429 -#, fuzzy -#| msgid "Select Label Template" -msgid "Default part label template" -msgstr "选择标签模板" - -#: common/models.py:2430 -msgid "The part label template to be automatically selected" -msgstr "" - -#: common/models.py:2435 -#, fuzzy -#| msgid "stock items selected" -msgid "Default stock item template" -msgstr "已选择库存项" - -#: common/models.py:2437 -msgid "The stock item label template to be automatically selected" -msgstr "" - -#: common/models.py:2443 -#, fuzzy -#| msgid "No stock location set" -msgid "Default stock location label template" -msgstr "未设置仓储地点" - -#: common/models.py:2445 -msgid "The stock location label template to be automatically selected" -msgstr "" - -#: common/models.py:2451 -#, fuzzy -#| msgid "No stock location set" -msgid "Default build line label template" -msgstr "未设置仓储地点" - -#: common/models.py:2453 -msgid "The build line label template to be automatically selected" -msgstr "" - -#: common/models.py:2459 +#: common/models.py:2522 msgid "Receive error reports" msgstr "" -#: common/models.py:2460 +#: common/models.py:2523 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2465 +#: common/models.py:2528 msgid "Last used printing machines" msgstr "" -#: common/models.py:2466 +#: common/models.py:2529 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2509 +#: common/models.py:2549 common/models.py:2550 common/models.py:2707 +#: common/models.py:2708 common/models.py:2953 common/models.py:2954 +#: common/models.py:3280 common/models.py:3281 importer/models.py:88 +#: part/models.py:3300 part/models.py:3387 part/models.py:3461 +#: part/models.py:3489 plugin/models.py:274 plugin/models.py:275 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3120 users/models.py:111 +msgid "User" +msgstr "用户" + +#: common/models.py:2572 msgid "Price break quantity" msgstr "" -#: common/models.py:2516 company/serializers.py:497 order/admin.py:42 -#: order/models.py:1382 order/models.py:2301 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1886 +#: common/models.py:2579 company/serializers.py:513 order/admin.py:42 +#: order/models.py:1430 order/models.py:2417 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1889 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:740 +#: templates/js/translated/return_order.js:739 msgid "Price" msgstr "价格" -#: common/models.py:2517 +#: common/models.py:2580 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2612 common/models.py:2797 +#: common/models.py:2684 common/models.py:2869 msgid "Endpoint" msgstr "" -#: common/models.py:2613 +#: common/models.py:2685 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2623 +#: common/models.py:2695 msgid "Name for this webhook" msgstr "" -#: common/models.py:2627 company/models.py:160 company/models.py:814 -#: machine/models.py:39 part/admin.py:88 part/models.py:1089 -#: plugin/models.py:66 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:2627 +#: common/models.py:2699 msgid "Is this webhook active" msgstr "" -#: common/models.py:2643 users/models.py:159 +#: common/models.py:2715 users/models.py:159 msgid "Token" msgstr "令牌" -#: common/models.py:2644 +#: common/models.py:2716 msgid "Token for access" msgstr "" -#: common/models.py:2652 +#: common/models.py:2724 msgid "Secret" msgstr "" -#: common/models.py:2653 +#: common/models.py:2725 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2761 +#: common/models.py:2833 msgid "Message ID" msgstr "" -#: common/models.py:2762 +#: common/models.py:2834 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2770 +#: common/models.py:2842 msgid "Host" msgstr "" -#: common/models.py:2771 +#: common/models.py:2843 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2779 +#: common/models.py:2851 msgid "Header" msgstr "" -#: common/models.py:2780 +#: common/models.py:2852 msgid "Header of this message" msgstr "" -#: common/models.py:2787 +#: common/models.py:2859 msgid "Body" msgstr "" -#: common/models.py:2788 +#: common/models.py:2860 msgid "Body of this message" msgstr "" -#: common/models.py:2798 +#: common/models.py:2870 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2803 +#: common/models.py:2875 msgid "Worked on" msgstr "" -#: common/models.py:2804 +#: common/models.py:2876 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2930 +#: common/models.py:3002 msgid "Id" msgstr "" -#: common/models.py:2932 templates/js/translated/company.js:965 +#: common/models.py:3004 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:2936 templates/js/translated/news.js:60 +#: common/models.py:3006 common/models.py:3264 company/models.py:149 +#: company/models.py:446 company/models.py:512 company/models.py:818 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 +#: part/admin.py:55 part/models.py:1056 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:229 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 +#: templates/js/translated/part.js:2472 +#: templates/js/translated/purchase_order.js:2110 +#: templates/js/translated/purchase_order.js:2274 +#: templates/js/translated/return_order.js:778 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "链接" + +#: common/models.py:3008 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:2938 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3010 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:2940 templates/js/translated/news.js:52 +#: common/models.py:3012 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Read" msgstr "" -#: common/models.py:2943 +#: common/models.py:3015 msgid "Was this news item read?" msgstr "" -#: common/models.py:2960 company/models.py:156 part/models.py:973 +#: common/models.py:3032 company/models.py:159 part/models.py:1066 #: 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 @@ -3727,56 +4040,123 @@ msgstr "" msgid "Image" msgstr "图片" -#: common/models.py:2960 +#: common/models.py:3032 #, fuzzy #| msgid "Image" msgid "Image file" msgstr "图片" -#: common/models.py:2972 +#: common/models.py:3044 common/models.py:3248 #, fuzzy #| msgid "Part Parameter Templates" msgid "Target model type for this image" msgstr "商品参数模板" -#: common/models.py:2976 +#: common/models.py:3048 #, fuzzy #| msgid "Part Parameter Templates" msgid "Target model ID for this image" msgstr "商品参数模板" -#: common/models.py:3017 +#: common/models.py:3070 +#, fuzzy +#| msgid "New Customer" +msgid "Custom Unit" +msgstr "新建客户" + +#: common/models.py:3091 +#, fuzzy +#| msgid "Key string must be unique" +msgid "Unit symbol must be unique" +msgstr "关键字必须是唯一的" + +#: common/models.py:3106 #, fuzzy #| msgid "Must be a valid number" msgid "Unit name must be a valid identifier" msgstr "必须是有效数字" -#: common/models.py:3036 +#: common/models.py:3125 #, fuzzy #| msgid "Part name" msgid "Unit name" msgstr "商品名称" -#: common/models.py:3043 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3132 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3044 +#: common/models.py:3133 #, fuzzy #| msgid "Optional Items" msgid "Optional unit symbol" msgstr "可选项目" -#: common/models.py:3051 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3139 templates/InvenTree/settings/settings_staff_js.html:71 #, fuzzy #| msgid "Destination" msgid "Definition" msgstr "目的地" -#: common/models.py:3052 +#: common/models.py:3140 msgid "Unit definition" msgstr "" +#: common/models.py:3198 common/models.py:3255 stock/models.py:2556 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:345 +msgid "Attachment" +msgstr "附件" + +#: common/models.py:3210 +msgid "Missing file" +msgstr "缺少文件" + +#: common/models.py:3211 +msgid "Missing external link" +msgstr "缺少外部链接" + +#: common/models.py:3256 +msgid "Select file to attach" +msgstr "选择附件" + +#: common/models.py:3271 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:360 +msgid "Comment" +msgstr "注释" + +#: common/models.py:3272 +#, fuzzy +#| msgid "Attachments" +msgid "Attachment comment" +msgstr "附件" + +#: common/models.py:3288 +#, fuzzy +#| msgid "upload date" +msgid "Upload date" +msgstr "上传日期" + +#: common/models.py:3289 +#, fuzzy +#| msgid "Select file to upload" +msgid "Date the file was uploaded" +msgstr "选择要上传的文件" + +#: common/models.py:3293 +#, fuzzy +#| msgid "File Fields" +msgid "File size" +msgstr "文件字段" + +#: common/models.py:3293 +msgid "File size in bytes" +msgstr "" + +#: common/models.py:3331 common/serializers.py:557 +msgid "Invalid model type specified for attachment" +msgstr "" + #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3795,7 +4175,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:460 msgid "Items Received" msgstr "" @@ -3813,93 +4193,117 @@ msgstr "收到定购单" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:375 msgid "Is Running" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:381 #, fuzzy #| msgid "Pending" msgid "Pending Tasks" msgstr "待定" -#: common/serializers.py:378 +#: common/serializers.py:387 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:384 +#: common/serializers.py:393 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Task ID" msgstr "" -#: common/serializers.py:399 +#: common/serializers.py:408 msgid "Unique task ID" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 msgid "Lock" msgstr "" -#: common/serializers.py:401 +#: common/serializers.py:410 #, fuzzy #| msgid "Stock Item" msgid "Lock time" msgstr "库存项" -#: common/serializers.py:403 +#: common/serializers.py:412 #, fuzzy #| msgid "Part name" msgid "Task name" msgstr "商品名称" -#: common/serializers.py:405 +#: common/serializers.py:414 #, fuzzy #| msgid "Production" msgid "Function" msgstr "生产中" -#: common/serializers.py:405 +#: common/serializers.py:414 #, fuzzy #| msgid "Part name" msgid "Function name" msgstr "商品名称" -#: common/serializers.py:407 +#: common/serializers.py:416 #, fuzzy #| msgid "Attachments" msgid "Arguments" msgstr "附件" -#: common/serializers.py:407 +#: common/serializers.py:416 msgid "Task arguments" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:419 #, fuzzy #| msgid "Keywords" msgid "Keyword Arguments" msgstr "关键词" -#: common/serializers.py:410 +#: common/serializers.py:419 msgid "Task keyword arguments" msgstr "" -#: common/validators.py:43 +#: common/serializers.py:529 +msgid "Filename" +msgstr "文件名" + +#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: common/serializers.py:563 +msgid "User does not have permission to create or edit attachments for this model" +msgstr "" + +#: common/validators.py:35 +#, fuzzy +#| msgid "No data rows provided" +msgid "No attachment model type provided" +msgstr "没有提供数据行" + +#: common/validators.py:41 +#, fuzzy +#| msgid "Invalid attachment directory" +msgid "Invalid attachment model type" +msgstr "非法的附件目录" + +#: common/validators.py:82 msgid "Minimum places cannot be greater than maximum places" msgstr "" -#: common/validators.py:57 +#: common/validators.py:94 msgid "Maximum places cannot be less than minimum places" msgstr "" -#: common/validators.py:68 +#: common/validators.py:105 msgid "An empty domain is not allowed." msgstr "不允许空域。" -#: common/validators.py:70 +#: common/validators.py:107 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "无效的域名: {domain}" @@ -3942,436 +4346,480 @@ msgstr "已导入商品" msgid "Previous Step" msgstr "" -#: company/api.py:164 +#: company/api.py:141 #, fuzzy #| msgid "Print actions" msgid "Part is Active" msgstr "打印操作" -#: company/api.py:168 +#: company/api.py:145 #, fuzzy #| msgid "Manufacturers" msgid "Manufacturer is Active" msgstr "制造商" -#: company/api.py:317 +#: company/api.py:278 #, fuzzy #| msgid "Supplier Part Pricing" msgid "Supplier Part is Active" msgstr "供应商商品价格" -#: company/api.py:321 +#: company/api.py:282 #, fuzzy #| msgid "Internal Prices" msgid "Internal Part is Active" msgstr "内部价格" -#: company/api.py:325 +#: company/api.py:286 #, fuzzy #| msgid "Supplier List" msgid "Supplier is Active" msgstr "供应商列表" -#: company/models.py:114 +#: company/models.py:100 company/models.py:371 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:814 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "公司" + +#: company/models.py:101 company/views.py:51 +#: templates/js/translated/search.js:192 +msgid "Companies" +msgstr "公司" + +#: company/models.py:117 msgid "Company description" msgstr "公司简介" -#: company/models.py:115 +#: company/models.py:118 msgid "Description of the company" msgstr "公司简介" -#: company/models.py:120 company/templates/company/company_base.html:106 +#: company/models.py:123 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 +#: company/models.py:123 msgid "Company website URL" msgstr "公司网站" -#: company/models.py:125 +#: company/models.py:128 msgid "Phone number" msgstr "电话号码" -#: company/models.py:127 +#: company/models.py:130 msgid "Contact phone number" msgstr "联系电话" -#: company/models.py:134 +#: company/models.py:137 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 +#: company/models.py:142 company/models.py:275 +#: company/templates/company/company_base.html:145 order/models.py:343 +#: order/templates/order/order_base.html:208 +#: order/templates/order/return_order_base.html:177 +#: order/templates/order/sales_order_base.html:221 msgid "Contact" msgstr "联系人" -#: company/models.py:141 +#: company/models.py:144 msgid "Point of contact" msgstr "" -#: company/models.py:147 +#: company/models.py:150 msgid "Link to external company information" msgstr "链接到外部公司信息" -#: company/models.py:160 +#: company/models.py:163 #, fuzzy #| msgid "Does this company manufacture parts?" msgid "Is this company active?" msgstr "该公司制造商品吗?" -#: company/models.py:165 -msgid "is customer" +#: company/models.py:168 +#, fuzzy +#| msgid "is customer" +msgid "Is customer" msgstr "是客户" -#: company/models.py:166 +#: company/models.py:169 msgid "Do you sell items to this company?" msgstr "您是否向该公司出售商品?" -#: company/models.py:171 -msgid "is supplier" +#: company/models.py:174 +#, fuzzy +#| msgid "is supplier" +msgid "Is supplier" msgstr "是供应商" -#: company/models.py:172 +#: company/models.py:175 msgid "Do you purchase items from this company?" msgstr "您是否从该公司采购商品?" -#: company/models.py:177 -msgid "is manufacturer" +#: company/models.py:180 +#, fuzzy +#| msgid "is manufacturer" +msgid "Is manufacturer" msgstr "是制造商" -#: company/models.py:178 +#: company/models.py:181 msgid "Does this company manufacture parts?" msgstr "该公司制造商品吗?" -#: company/models.py:186 +#: company/models.py:189 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:314 company/templates/company/company_base.html:124 +#: order/models.py:353 order/templates/order/order_base.html:215 +#: order/templates/order/return_order_base.html:184 +#: order/templates/order/sales_order_base.html:228 +msgid "Address" +msgstr "地址" -#: company/models.py:383 +#: company/models.py:315 company/templates/company/sidebar.html:35 +#, fuzzy +#| msgid "Address" +msgid "Addresses" +msgstr "地址" + +#: company/models.py:372 #, fuzzy #| msgid "Delete Company" msgid "Select company" msgstr "删除该公司" -#: company/models.py:388 +#: company/models.py:377 #, fuzzy #| msgid "Address" msgid "Address title" msgstr "地址" -#: company/models.py:389 +#: company/models.py:378 msgid "Title describing the address entry" msgstr "" -#: company/models.py:395 +#: company/models.py:384 #, fuzzy #| msgid "Company address" msgid "Primary address" msgstr "公司地址" -#: company/models.py:396 +#: company/models.py:385 #, fuzzy #| msgid "Contact email address" msgid "Set as primary address" msgstr "联系人电子邮件" -#: company/models.py:401 templates/js/translated/company.js:914 +#: company/models.py:390 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:402 +#: company/models.py:391 #, fuzzy #| msgid "Address" msgid "Address line 1" msgstr "地址" -#: company/models.py:408 templates/js/translated/company.js:915 +#: company/models.py:397 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:409 +#: company/models.py:398 #, fuzzy #| msgid "Address" msgid "Address line 2" msgstr "地址" -#: company/models.py:415 company/models.py:416 +#: company/models.py:404 company/models.py:405 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:422 +#: company/models.py:411 msgid "City/Region" msgstr "" -#: company/models.py:423 +#: company/models.py:412 msgid "Postal code city/region" msgstr "" -#: company/models.py:429 +#: company/models.py:418 msgid "State/Province" msgstr "" -#: company/models.py:430 +#: company/models.py:419 msgid "State or province" msgstr "" -#: company/models.py:436 templates/js/translated/company.js:1001 +#: company/models.py:425 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:437 +#: company/models.py:426 #, fuzzy #| msgid "Address" msgid "Address country" msgstr "地址" -#: company/models.py:443 +#: company/models.py:432 msgid "Courier shipping notes" msgstr "" -#: company/models.py:444 +#: company/models.py:433 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:450 +#: company/models.py:439 #, fuzzy #| msgid "Internal company name" msgid "Internal shipping notes" msgstr "内部公司名称" -#: company/models.py:451 +#: company/models.py:440 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:458 +#: company/models.py:447 #, fuzzy #| msgid "Description (optional)" msgid "Link to address information (external)" msgstr "描述 (可选)" -#: company/models.py:489 company/models.py:792 stock/models.py:768 -#: stock/serializers.py:398 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:532 -#: 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:542 -#: 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:1801 -#: 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/models.py:470 company/models.py:587 company/models.py:811 #: 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 +#: company/models.py:487 company/models.py:779 stock/models.py:787 +#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:489 company/models.py:781 +msgid "Select part" +msgstr "选择商品" + +#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:553 +#: 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:819 +msgid "Manufacturer" +msgstr "制造商" + +#: company/models.py:499 +msgid "Select manufacturer" +msgstr "选择制造商" + +#: company/models.py:505 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 order/serializers.py:551 +#: part/serializers.py:563 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:1804 +#: templates/js/translated/purchase_order.js:1921 +#: templates/js/translated/purchase_order.js:2123 +msgid "MPN" +msgstr "" + +#: company/models.py:513 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:522 +msgid "Manufacturer part description" +msgstr "制造商商品描述" + +#: company/models.py:575 +#, fuzzy +#| msgid "Manufacturer Part Number" +msgid "Manufacturer Part Parameter" +msgstr "制造商商品编号" + +#: company/models.py:594 msgid "Parameter name" msgstr "参数名称" -#: company/models.py:621 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2434 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1522 +#: company/models.py:600 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2548 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1496 +#: templates/js/translated/stock.js:1607 msgid "Value" msgstr "数值" -#: company/models.py:622 +#: company/models.py:601 msgid "Parameter value" msgstr "参数值" -#: company/models.py:629 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1053 part/models.py:3692 -#: part/templates/part/part_base.html:284 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1512 -#: templates/js/translated/part.js:1616 templates/js/translated/part.js:2370 +#: company/models.py:608 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1146 part/models.py:3764 +#: part/templates/part/part_base.html:293 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1515 +#: templates/js/translated/part.js:1619 templates/js/translated/part.js:2373 msgid "Units" msgstr "单位" -#: company/models.py:630 +#: company/models.py:609 msgid "Parameter units" msgstr "参数单位" -#: company/models.py:732 +#: company/models.py:662 company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:440 +#: order/serializers.py:486 stock/models.py:798 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/build.js:1052 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2365 +msgid "Supplier Part" +msgstr "供应商商品" + +#: company/models.py:719 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:739 +#: company/models.py:726 #, fuzzy #| msgid "Quantity must be greater than zero" msgid "Pack units must be greater than zero" msgstr "数量必须大于0" -#: company/models.py:753 +#: company/models.py:740 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:516 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:789 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:492 +#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 +#: part/serializers.py:537 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:1769 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1772 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1689 -#: templates/js/translated/table_filters.js:804 +#: templates/js/translated/purchase_order.js:1759 +#: templates/js/translated/table_filters.js:823 msgid "Supplier" msgstr "供应商" -#: company/models.py:803 +#: company/models.py:790 msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:809 part/serializers.py:527 +#: company/models.py:796 part/serializers.py:548 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:815 +#: company/models.py:802 #, fuzzy #| msgid "Delete supplier part" msgid "Is this supplier part active?" msgstr "删除供应商商品" -#: company/models.py:825 +#: company/models.py:812 msgid "Select manufacturer part" msgstr "选择制造商商品" -#: company/models.py:832 +#: company/models.py:819 msgid "URL for external supplier part link" msgstr "外部供货商商品链接URL" -#: company/models.py:841 +#: company/models.py:828 msgid "Supplier part description" msgstr "供应商商品描述" -#: company/models.py:848 company/templates/company/supplier_part.html:187 -#: part/admin.py:420 part/models.py:4139 part/templates/part/upload_bom.html:59 +#: company/models.py:835 company/templates/company/supplier_part.html:187 +#: order/serializers.py:693 part/admin.py:415 part/models.py:4281 +#: 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:711 +#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 +#: templates/js/translated/purchase_order.js:1344 msgid "Note" msgstr "备注" -#: company/models.py:857 part/models.py:2011 +#: company/models.py:844 part/models.py:2110 msgid "base cost" msgstr "" -#: company/models.py:858 part/models.py:2012 +#: company/models.py:845 part/models.py:2111 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低收费(例如库存费)" -#: company/models.py:865 company/templates/company/supplier_part.html:160 -#: stock/admin.py:229 stock/models.py:799 stock/serializers.py:1482 -#: 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 +#: company/models.py:853 msgid "Part packaging" msgstr "商品打包" -#: company/models.py:871 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 +#: company/models.py:858 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 #: 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 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/purchase_order.js:2171 msgid "Pack Quantity" msgstr "" -#: company/models.py:873 +#: company/models.py:860 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:892 part/models.py:2018 +#: company/models.py:879 part/models.py:2117 msgid "multiple" msgstr "" -#: company/models.py:893 +#: company/models.py:880 msgid "Order multiple" msgstr "" -#: company/models.py:905 +#: company/models.py:892 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:911 +#: company/models.py:898 msgid "Availability Updated" msgstr "" -#: company/models.py:912 +#: company/models.py:899 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:164 +#: company/models.py:1027 +#, fuzzy +#| msgid "Supplier Part Orders" +msgid "Supplier Price Break" +msgstr "供应商商品订单" + +#: company/serializers.py:174 msgid "Default currency used for this supplier" msgstr "该公司使用的默认货币" -#: company/serializers.py:382 part/admin.py:126 +#: company/serializers.py:210 +#, fuzzy +#| msgid "Company name" +msgid "Company Name" +msgstr "公司名称" + +#: company/serializers.py:393 part/admin.py:126 part/serializers.py:896 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 #: templates/js/translated/table_filters.js:355 @@ -4382,8 +4830,8 @@ 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:312 -#: templates/js/translated/part.js:815 templates/js/translated/part.js:1219 +#: templates/js/translated/model_renderers.js:313 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1222 msgid "Inactive" msgstr "" @@ -4422,7 +4870,7 @@ msgstr "删除该公司" #: 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 +#: report/templates/report/inventree_test_report.html:162 #, fuzzy #| msgid "Part name" msgid "Part image" @@ -4443,17 +4891,17 @@ msgstr "从 URL 下载图片" 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:1232 +#: company/templates/company/company_base.html:92 order/models.py:991 +#: order/models.py:2147 order/templates/order/return_order_base.html:134 +#: order/templates/order/sales_order_base.html:151 stock/models.py:840 +#: stock/models.py:841 stock/serializers.py:1329 #: 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 +#: templates/js/translated/stock.js:3043 +#: templates/js/translated/table_filters.js:827 msgid "Customer" msgstr "客户" @@ -4461,19 +4909,12 @@ msgstr "客户" 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 +#: part/templates/part/part_base.html:536 msgid "Remove Image" msgstr "" @@ -4482,19 +4923,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:530 +#: part/templates/part/part_base.html:539 #: 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 +#: part/templates/part/part_base.html:568 msgid "Upload Image" msgstr "上传图片" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:613 +#: part/templates/part/part_base.html:622 msgid "Download Image" msgstr "下载图片" @@ -4510,7 +4951,7 @@ msgstr "创建新的供应商商品" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:356 +#: part/templates/part/detail.html:372 msgid "New Supplier Part" msgstr "新建供应商商品" @@ -4523,7 +4964,7 @@ msgstr "制造商商品" msgid "Create new manufacturer part" msgstr "新建制造商商品" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 msgid "New Manufacturer Part" msgstr "新建制造商商品" @@ -4537,7 +4978,7 @@ msgstr "供货商库存" #: 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 +#: part/templates/part/detail.html:122 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 @@ -4560,7 +5001,7 @@ msgstr "新建采购订单" #: 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 +#: part/templates/part/detail.html:143 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 @@ -4646,7 +5087,7 @@ 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 +#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 msgid "Order part" msgstr "订购商品" @@ -4661,7 +5102,8 @@ msgid "Delete manufacturer part" msgstr "删除生产商商品" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:458 +#: company/templates/company/supplier_part.html:97 order/api.py:446 +#: order/serializers.py:559 msgid "Internal Part" msgstr "内部商品" @@ -4671,7 +5113,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:839 +#: part/admin.py:122 part/serializers.py:902 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4680,19 +5122,25 @@ 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 +#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "参数" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:200 +#: part/templates/part/detail.html:216 #: 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:1423 +#: company/templates/company/manufacturer_part.html:177 +#, fuzzy +#| msgid "Manufacturer Parts" +msgid "Manufacturer Part Notes" +msgstr "制造商商品" + +#: company/templates/company/manufacturer_part.html:225 +#: templates/js/translated/part.js:1426 msgid "Add Parameter" msgstr "添加参数" @@ -4718,21 +5166,6 @@ msgstr "" msgid "Contacts" msgstr "联系人" -#: company/templates/company/sidebar.html:35 -#, fuzzy -#| msgid "Address" -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" @@ -4741,7 +5174,7 @@ 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 +#: part/templates/part/detail.html:126 msgid "Order Part" msgstr "订购商品" @@ -4774,12 +5207,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:526 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1787 +#: company/templates/company/supplier_part.html:139 order/serializers.py:548 +#: part/bom.py:287 part/bom.py:319 part/serializers.py:547 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1790 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2028 +#: templates/js/translated/purchase_order.js:1920 +#: templates/js/translated/purchase_order.js:2098 msgid "SKU" msgstr "" @@ -4788,13 +5221,13 @@ msgid "Supplier Part Stock" msgstr "供货商商品库存" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 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 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 +#: templates/js/translated/stock.js:543 msgid "New Stock Item" msgstr "" @@ -4812,29 +5245,35 @@ msgstr "价格信息" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:276 +#: company/templates/company/supplier_part.html:270 +#, fuzzy +#| msgid "Supplier Parts" +msgid "Supplier Part Notes" +msgstr "供应商商品" + +#: company/templates/company/supplier_part.html:305 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:287 +#: company/templates/company/supplier_part.html:316 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:359 +#: company/templates/company/supplier_part.html:388 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:838 part/stocktake.py:224 -#: part/templates/part/category.html:183 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:919 stock/serializers.py:1083 -#: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:191 -#: stock/templates/stock/location.html:203 +#: part/serializers.py:900 part/stocktake.py:224 +#: part/templates/part/category.html:180 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 +#: stock/serializers.py:1014 stock/serializers.py:1192 +#: stock/templates/stock/location.html:167 +#: stock/templates/stock/location.html:188 +#: stock/templates/stock/location.html:200 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1061 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1064 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 #: users/models.py:206 msgid "Stock Items" msgstr "库存项" @@ -4860,10 +5299,6 @@ msgstr "客户信息" 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 "新建公司信息" @@ -4872,62 +5307,280 @@ msgstr "新建公司信息" msgid "Placed" msgstr "已添加" -#: machine/machine_types/label_printer.py:218 +#: importer/mixins.py:263 +#, fuzzy +#| msgid "Invalid value for overage" +msgid "Invalid export format" +msgstr "无效的备损值" + +#: importer/models.py:59 +msgid "Timestamp" +msgstr "" + +#: importer/models.py:64 +#, fuzzy +#| msgid "Select file to upload" +msgid "Data file to import" +msgstr "选择要上传的文件" + +#: importer/models.py:73 templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: importer/models.py:84 +#, fuzzy +#| msgid "Import Part" +msgid "Import status" +msgstr "导入商品" + +#: importer/models.py:94 +#, fuzzy +#| msgid "Build Details" +msgid "Field Defaults" +msgstr "生产详情" + +#: importer/models.py:101 +#, fuzzy +#| msgid "Print actions" +msgid "Field Overrides" +msgstr "打印操作" + +#: importer/models.py:108 +#, fuzzy +#| msgid "Filters" +msgid "Field Filters" +msgstr "筛选器" + +#: importer/models.py:230 +#, fuzzy +#| msgid "Required build quantity has not been completed" +msgid "Some required fields have not been mapped" +msgstr "所需生产数量尚未完成" + +#: importer/models.py:387 +msgid "Column is already mapped to a database field" +msgstr "" + +#: importer/models.py:392 +msgid "Field is already mapped to a data column" +msgstr "" + +#: importer/models.py:401 +msgid "Column mapping must be linked to a valid import session" +msgstr "" + +#: importer/models.py:406 +msgid "Column does not exist in the data file" +msgstr "" + +#: importer/models.py:413 +msgid "Field does not exist in the target model" +msgstr "" + +#: importer/models.py:417 +msgid "Selected field is read-only" +msgstr "" + +#: importer/models.py:422 importer/models.py:493 +#, fuzzy +#| msgid "Report Settings" +msgid "Import Session" +msgstr "报表设置" + +#: importer/models.py:426 +#, fuzzy +#| msgid "File Fields" +msgid "Field" +msgstr "文件字段" + +#: importer/models.py:428 +msgid "Column" +msgstr "" + +#: importer/models.py:497 +msgid "Row Index" +msgstr "" + +#: importer/models.py:500 +msgid "Original row data" +msgstr "" + +#: importer/models.py:503 part/models.py:3944 +msgid "Data" +msgstr "" + +#: importer/models.py:505 machine/models.py:110 +msgid "Errors" +msgstr "" + +#: importer/models.py:507 part/api.py:873 +msgid "Valid" +msgstr "" + +#: importer/operations.py:28 importer/operations.py:49 +#, fuzzy +#| msgid "Unsupported file format: {ext.upper()}" +msgid "Unsupported data file format" +msgstr "不支持的文件格式: {ext.uper()}" + +#: importer/operations.py:40 +msgid "Failed to open data file" +msgstr "" + +#: importer/operations.py:51 +#, fuzzy +#| msgid "Inline label display" +msgid "Invalid data file dimensions" +msgstr "内嵌标签显示" + +#: importer/serializers.py:91 +#, fuzzy +#| msgid "Build Details" +msgid "Invalid field defaults" +msgstr "生产详情" + +#: importer/serializers.py:104 +#, fuzzy +#| msgid "Invalid quantity provided" +msgid "Invalid field overrides" +msgstr "提供的数量无效" + +#: importer/serializers.py:117 +#, fuzzy +#| msgid "Build Details" +msgid "Invalid field filters" +msgstr "生产详情" + +#: importer/serializers.py:178 +msgid "Rows" +msgstr "" + +#: importer/serializers.py:179 +msgid "List of row IDs to accept" +msgstr "" + +#: importer/serializers.py:192 +#, fuzzy +#| msgid "No data rows provided" +msgid "No rows provided" +msgstr "没有提供数据行" + +#: importer/serializers.py:196 +msgid "Row does not belong to this session" +msgstr "" + +#: importer/serializers.py:199 +msgid "Row contains invalid data" +msgstr "" + +#: importer/serializers.py:202 +#, fuzzy +#| msgid "This build output has already been completed" +msgid "Row has already been completed" +msgstr "此生产产出已经完成" + +#: importer/status_codes.py:11 +msgid "Initializing" +msgstr "" + +#: importer/status_codes.py:12 +msgid "Mapping Columns" +msgstr "" + +#: importer/status_codes.py:13 +#, fuzzy +#| msgid "Import Part" +msgid "Importing Data" +msgstr "导入商品" + +#: importer/status_codes.py:16 +msgid "Processing Data" +msgstr "" + +#: importer/validators.py:21 +#, fuzzy +#| msgid "Image download exceeded maximum size" +msgid "Data file exceeds maximum size limit" +msgstr "图像下载超过最大尺寸" + +#: importer/validators.py:26 +msgid "Data file contains no headers" +msgstr "" + +#: importer/validators.py:29 +msgid "Data file contains too many columns" +msgstr "" + +#: importer/validators.py:32 +msgid "Data file contains too many rows" +msgstr "" + +#: importer/validators.py:53 +#, fuzzy +#| msgid "Must be a valid number" +msgid "Value must be a valid dictionary object" +msgstr "必须是有效数字" + +#: machine/machine_types/label_printer.py:215 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:219 +#: machine/machine_types/label_printer.py:216 #, fuzzy #| msgid "Number of stock items to build" msgid "Number of copies to print for each label" msgstr "要生产的项目数量" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:231 #, fuzzy #| msgid "Connection error" msgid "Connected" msgstr "连接错误" -#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: machine/machine_types/label_printer.py:232 order/api.py:1408 #: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:233 #, fuzzy #| msgid "Print Label" msgid "Printing" msgstr "打印标签" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:234 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:238 +#: machine/machine_types/label_printer.py:235 +msgid "Paper jam" +msgstr "" + +#: machine/machine_types/label_printer.py:236 #, fuzzy #| msgid "Rejected" msgid "Disconnected" msgstr "已拒绝" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:243 #, fuzzy #| msgid "Label name" msgid "Label Printer" msgstr "标签名称" -#: machine/machine_types/label_printer.py:246 +#: machine/machine_types/label_printer.py:244 #, fuzzy #| msgid "Allocate selected items" msgid "Directly print labels for various items." msgstr "分配选定项目" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:250 #, fuzzy #| msgid "Print actions" msgid "Printer Location" msgstr "打印操作" -#: machine/machine_types/label_printer.py:253 +#: machine/machine_types/label_printer.py:251 msgid "Scope the printer to a specific location" msgstr "" @@ -4969,10 +5622,6 @@ msgstr "" msgid "Initialized" msgstr "" -#: machine/models.py:110 -msgid "Errors" -msgstr "" - #: machine/models.py:117 #, fuzzy #| msgid "Build status" @@ -4991,88 +5640,88 @@ msgstr "" msgid "Config type" msgstr "" -#: order/admin.py:30 order/models.py:89 +#: order/admin.py:30 order/models.py:90 #: 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/order.js:352 +#: templates/js/translated/purchase_order.js:2195 #: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:161 order/serializers.py:92 -#: order/templates/order/order_base.html:118 -#: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:122 +#: order/api.py:149 order/serializers.py:93 +#: order/templates/order/order_base.html:123 +#: order/templates/order/return_order_base.html:116 +#: order/templates/order/sales_order_base.html:125 msgid "Order Status" msgstr "" -#: order/api.py:165 templates/js/translated/table_filters.js:194 -#: templates/js/translated/table_filters.js:779 +#: order/api.py:153 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:798 msgid "Has Pricing" msgstr "" -#: order/api.py:240 +#: order/api.py:228 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 +#: order/api.py:423 order/api.py:761 order/models.py:1484 order/models.py:1598 +#: order/models.py:1649 order/models.py:1764 order/models.py:1923 +#: order/models.py:2383 order/models.py:2439 #: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:441 order/api.py:838 +#: order/api.py:427 order/api.py:782 #, fuzzy #| msgid "Order Code" msgid "Order Complete" msgstr "订单编码" -#: order/api.py:462 +#: order/api.py:450 #, fuzzy #| msgid "Pending" 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/api.py:1402 order/models.py:380 order/models.py:1485 +#: order/models.py:1599 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 +#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1746 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1749 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 +#: templates/js/translated/purchase_order.js:1743 +#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 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/api.py:1406 order/models.py:2091 order/models.py:2384 +#: order/models.py:2440 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 +#: templates/js/translated/stock.js:3025 #, fuzzy #| msgid "Returned" msgid "Return Order" msgstr "已退回" -#: order/models.py:90 +#: order/models.py:91 #, fuzzy #| msgid "User or group responsible for this order" msgid "Total price for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:95 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:71 #, fuzzy #| msgid "Currency" msgid "Order Currency" msgstr "货币" -#: order/models.py:98 order/serializers.py:73 +#: order/models.py:99 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5094,7 +5743,7 @@ msgstr "描述 (可选)" msgid "Select project code for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: order/models.py:303 order/models.py:1385 order/models.py:1817 msgid "Link to external page" msgstr "" @@ -5122,566 +5771,632 @@ msgstr "此构建订单的优先级" msgid "Company address for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:464 order/models.py:929 +#: order/models.py:469 order/models.py:980 msgid "Order reference" msgstr "" -#: order/models.py:472 order/models.py:953 +#: order/models.py:478 msgid "Purchase order status" msgstr "" -#: order/models.py:487 +#: order/models.py:493 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 +#: order/models.py:504 order/templates/order/order_base.html:153 +#: templates/js/translated/purchase_order.js:1772 msgid "Supplier Reference" msgstr "" -#: order/models.py:499 +#: order/models.py:505 msgid "Supplier order reference code" msgstr "" -#: order/models.py:508 +#: order/models.py:514 msgid "received by" msgstr "" -#: order/models.py:514 order/models.py:2094 +#: order/models.py:520 order/models.py:2173 msgid "Issue Date" msgstr "" -#: order/models.py:515 order/models.py:2095 +#: order/models.py:521 order/models.py:2174 msgid "Date order was issued" msgstr "" -#: order/models.py:522 order/models.py:2102 +#: order/models.py:528 order/models.py:2181 msgid "Date order was completed" msgstr "" -#: order/models.py:566 +#: order/models.py:572 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:760 +#: order/models.py:807 msgid "Quantity must be a positive number" msgstr "数量必须大于0" -#: order/models.py:941 +#: order/models.py:992 msgid "Company to which the items are being sold" msgstr "向其出售该商品的公司" -#: order/models.py:964 order/models.py:2087 +#: order/models.py:1004 +#, fuzzy +#| msgid "Sales Order Settings" +msgid "Sales order status" +msgstr "销售订单设置" + +#: order/models.py:1015 order/models.py:2166 msgid "Customer Reference " msgstr "" -#: order/models.py:965 order/models.py:2088 +#: order/models.py:1016 order/models.py:2167 msgid "Customer order reference code" msgstr "" -#: order/models.py:969 order/models.py:1707 +#: order/models.py:1020 order/models.py:1771 #: templates/js/translated/sales_order.js:879 #: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:978 +#: order/models.py:1029 msgid "shipped by" msgstr "" -#: order/models.py:1027 +#: order/models.py:1078 #, fuzzy #| msgid "Build output is already completed" msgid "Order is already complete" msgstr "生产产出已完成" -#: order/models.py:1030 +#: order/models.py:1081 #, fuzzy #| msgid "Order cannot be cancelled" msgid "Order is already cancelled" msgstr "无法取消订单" -#: order/models.py:1034 +#: order/models.py:1085 #, fuzzy #| msgid "Build Order is ready to mark as completed" msgid "Only an open order can be marked as complete" msgstr "构建订单已准备好标记为已完成" -#: order/models.py:1038 +#: order/models.py:1089 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1043 +#: order/models.py:1094 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1309 +#: order/models.py:1357 msgid "Item quantity" msgstr "" -#: order/models.py:1326 +#: order/models.py:1374 msgid "Line item reference" msgstr "" -#: order/models.py:1333 +#: order/models.py:1381 msgid "Line item notes" msgstr "" -#: order/models.py:1345 +#: order/models.py:1393 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1366 +#: order/models.py:1414 #, fuzzy #| msgid "Description (optional)" msgid "Line item description (optional)" msgstr "描述 (可选)" -#: order/models.py:1372 +#: order/models.py:1420 msgid "Context" msgstr "" -#: order/models.py:1373 +#: order/models.py:1421 msgid "Additional context for this line" msgstr "" -#: order/models.py:1383 +#: order/models.py:1431 msgid "Unit price" msgstr "" -#: order/models.py:1416 +#: order/models.py:1445 +#, fuzzy +#| msgid "Delete parameters" +msgid "Purchase Order Line Item" +msgstr "删除参数" + +#: order/models.py:1469 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1423 +#: order/models.py:1476 msgid "deleted" msgstr "" -#: order/models.py:1451 +#: order/models.py:1504 msgid "Supplier part" msgstr "供应商商品" -#: order/models.py:1458 order/templates/order/order_base.html:196 -#: templates/js/translated/part.js:1870 templates/js/translated/part.js:1902 -#: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2169 -#: templates/js/translated/return_order.js:763 +#: order/models.py:1511 order/templates/order/order_base.html:201 +#: templates/js/translated/part.js:1873 templates/js/translated/part.js:1905 +#: templates/js/translated/purchase_order.js:1369 +#: templates/js/translated/purchase_order.js:2239 +#: templates/js/translated/return_order.js:762 #: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:602 +#: templates/js/translated/table_filters.js:616 msgid "Received" msgstr "" -#: order/models.py:1459 +#: order/models.py:1512 msgid "Number of items received" msgstr "" -#: order/models.py:1467 stock/models.py:940 stock/serializers.py:532 +#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2311 +#: templates/js/translated/stock.js:2396 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:1468 +#: order/models.py:1521 msgid "Unit purchase price" msgstr "" -#: order/models.py:1483 +#: order/models.py:1536 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1574 +#: order/models.py:1587 +#, fuzzy +#| msgid "Purchase Order Settings" +msgid "Purchase Order Extra Line" +msgstr "采购订单设置" + +#: order/models.py:1616 +#, fuzzy +#| msgid "Delete parameters" +msgid "Sales Order Line Item" +msgstr "删除参数" + +#: order/models.py:1637 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1579 +#: order/models.py:1642 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: order/models.py:1668 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 +#: order/models.py:1669 msgid "Unit sale price" msgstr "" -#: order/models.py:1615 order/status_codes.py:43 +#: order/models.py:1678 order/status_codes.py:48 #: 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 +#: order/models.py:1679 msgid "Shipped quantity" msgstr "" -#: order/models.py:1708 +#: order/models.py:1751 +#, fuzzy +#| msgid "Sales Order Settings" +msgid "Sales Order Shipment" +msgstr "销售订单设置" + +#: order/models.py:1772 msgid "Date of shipment" msgstr "" -#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +#: order/models.py:1778 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1715 +#: order/models.py:1779 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1723 +#: order/models.py:1787 msgid "Checked By" msgstr "" -#: order/models.py:1724 +#: order/models.py:1788 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1731 order/models.py:1944 order/serializers.py:1355 -#: order/serializers.py:1465 templates/js/translated/model_renderers.js:454 +#: order/models.py:1795 order/models.py:2018 order/serializers.py:1470 +#: order/serializers.py:1580 templates/js/translated/model_renderers.js:455 msgid "Shipment" msgstr "" -#: order/models.py:1732 +#: order/models.py:1796 msgid "Shipment number" msgstr "" -#: order/models.py:1740 +#: order/models.py:1804 msgid "Tracking Number" msgstr "" -#: order/models.py:1741 +#: order/models.py:1805 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1748 +#: order/models.py:1812 msgid "Invoice Number" msgstr "" -#: order/models.py:1749 +#: order/models.py:1813 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1769 +#: order/models.py:1833 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1772 +#: order/models.py:1836 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1890 order/models.py:1892 +#: order/models.py:1912 +#, fuzzy +#| msgid "Sales Order Settings" +msgid "Sales Order Extra Line" +msgstr "销售订单设置" + +#: order/models.py:1941 +#, fuzzy +#| msgid "Sales Order Settings" +msgid "Sales Order Allocation" +msgstr "销售订单设置" + +#: order/models.py:1964 order/models.py:1966 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1899 +#: order/models.py:1973 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1902 +#: order/models.py:1976 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1905 +#: order/models.py:1979 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1924 order/serializers.py:1232 +#: order/models.py:1998 order/serializers.py:1340 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1927 +#: order/models.py:2001 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1928 plugin/base/barcodes/api.py:481 +#: order/models.py:2002 plugin/base/barcodes/api.py:524 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1936 +#: order/models.py:2010 msgid "Line" msgstr "" -#: order/models.py:1945 +#: order/models.py:2019 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1958 order/models.py:2275 -#: templates/js/translated/return_order.js:721 +#: order/models.py:2032 order/models.py:2391 +#: templates/js/translated/return_order.js:720 msgid "Item" msgstr "" -#: order/models.py:1959 +#: order/models.py:2033 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1968 +#: order/models.py:2042 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2057 +#: order/models.py:2136 #, fuzzy #| msgid "Build Order Reference" msgid "Return Order reference" msgstr "相关生产订单" -#: order/models.py:2069 +#: order/models.py:2148 #, fuzzy #| msgid "Company from which the items are being ordered" msgid "Company from which items are being returned" msgstr "订购该商品的公司" -#: order/models.py:2081 +#: order/models.py:2160 msgid "Return order status" msgstr "" -#: order/models.py:2260 +#: order/models.py:2362 +#, fuzzy +#| msgid "Delete parameters" +msgid "Return Order Line Item" +msgstr "删除参数" + +#: order/models.py:2376 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2276 +#: order/models.py:2392 #, fuzzy #| msgid "Returned from customer" msgid "Select item to return from customer" msgstr "从客户退货" -#: order/models.py:2282 +#: order/models.py:2398 msgid "Received Date" msgstr "" -#: order/models.py:2283 +#: order/models.py:2399 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: order/models.py:2410 templates/js/translated/return_order.js:731 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2295 +#: order/models.py:2411 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2302 +#: order/models.py:2418 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:81 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/models.py:2428 +#, fuzzy +#| msgid "Build Order Settings" +msgid "Return Order Extra Line" +msgstr "生产订单设置" -#: order/serializers.py:85 +#: order/serializers.py:86 #, fuzzy #| msgid "Completed items" msgid "Completed Lines" msgstr "已完成项目" -#: order/serializers.py:288 +#: order/serializers.py:326 msgid "Order cannot be cancelled" msgstr "无法取消订单" -#: order/serializers.py:303 order/serializers.py:1248 +#: order/serializers.py:341 order/serializers.py:1361 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:313 order/serializers.py:1258 +#: order/serializers.py:351 order/serializers.py:1371 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:441 +#: order/serializers.py:501 msgid "Order is not open" msgstr "" -#: order/serializers.py:462 +#: order/serializers.py:522 #, fuzzy #| msgid "Part Pricing" msgid "Auto Pricing" msgstr "商品价格" -#: order/serializers.py:464 +#: order/serializers.py:524 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:474 +#: order/serializers.py:534 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:480 +#: order/serializers.py:540 #, fuzzy #| msgid "Select Stock Items" msgid "Merge Items" msgstr "选择库存项" -#: order/serializers.py:482 +#: order/serializers.py:542 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:500 +#: order/serializers.py:555 part/models.py:1032 +msgid "Internal Part Number" +msgstr "内部商品编号" + +#: order/serializers.py:563 +#, fuzzy +#| msgid "Internal Part Number" +msgid "Internal Part Name" +msgstr "内部商品编号" + +#: order/serializers.py:579 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:503 +#: order/serializers.py:582 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:511 +#: order/serializers.py:590 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:512 +#: order/serializers.py:591 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:551 order/serializers.py:1326 +#: order/serializers.py:634 order/serializers.py:1441 msgid "Line Item" msgstr "" -#: order/serializers.py:557 +#: order/serializers.py:640 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:567 order/serializers.py:675 order/serializers.py:1681 +#: order/serializers.py:650 order/serializers.py:774 order/serializers.py:1777 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:583 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:666 templates/js/translated/purchase_order.js:1130 +#: templates/js/translated/stock.js:1200 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:591 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:674 templates/js/translated/purchase_order.js:1155 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:602 templates/js/translated/barcode.js:52 +#: order/serializers.py:686 +msgid "Override packaging information for incoming stock items" +msgstr "" + +#: order/serializers.py:694 +#, fuzzy +#| msgid "Destination stock item" +msgid "Additional note for incoming stock items" +msgstr "目标库存项" + +#: order/serializers.py:701 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:603 +#: order/serializers.py:702 #, fuzzy #| msgid "Scan Barcode" msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:619 +#: order/serializers.py:718 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:643 +#: order/serializers.py:742 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:691 order/serializers.py:1697 +#: order/serializers.py:790 order/serializers.py:1793 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:806 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:817 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1075 +#: order/serializers.py:1182 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1243 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1196 order/serializers.py:1335 +#: order/serializers.py:1304 order/serializers.py:1450 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1215 +#: order/serializers.py:1323 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1345 +#: order/serializers.py:1460 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1367 order/serializers.py:1473 +#: order/serializers.py:1482 order/serializers.py:1588 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1370 order/serializers.py:1476 +#: order/serializers.py:1485 order/serializers.py:1591 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1417 +#: order/serializers.py:1532 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1424 +#: order/serializers.py:1539 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1747 msgid "Return order line item" msgstr "" -#: order/serializers.py:1657 +#: order/serializers.py:1753 #, fuzzy #| msgid "Build output does not match Build Order" msgid "Line item does not match return order" msgstr "生产产出与订单不匹配" -#: order/serializers.py:1660 +#: order/serializers.py:1756 #, fuzzy #| msgid "This build output has already been completed" msgid "Line item has already been received" msgstr "此生产产出已经完成" -#: order/serializers.py:1689 +#: order/serializers.py:1785 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1767 +#: order/serializers.py:1868 #, 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 +#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 msgid "Lost" msgstr "丢失" -#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 msgid "Returned" msgstr "已退回" -#: order/status_codes.py:40 order/status_codes.py:67 +#: order/status_codes.py:45 order/status_codes.py:77 msgid "In Progress" msgstr "" -#: order/status_codes.py:85 +#: order/status_codes.py:101 #, fuzzy #| msgid "Returned" msgid "Return" msgstr "已退回" -#: order/status_codes.py:88 +#: order/status_codes.py:104 msgid "Repair" msgstr "" -#: order/status_codes.py:91 +#: order/status_codes.py:107 #, fuzzy #| msgid "Placed" msgid "Replace" msgstr "已添加" -#: order/status_codes.py:94 +#: order/status_codes.py:110 msgid "Refund" msgstr "" -#: order/status_codes.py:97 +#: order/status_codes.py:113 #, fuzzy #| msgid "Rejected" msgid "Reject" @@ -5728,93 +6443,101 @@ 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 +#: order/templates/order/order_base.html:73 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +#, fuzzy +#| msgid "Build Order" +msgid "Hold order" +msgstr "生产订单" + +#: order/templates/order/order_base.html:78 +#: order/templates/order/return_order_base.html:81 +#: order/templates/order/sales_order_base.html:80 +msgid "Cancel order" +msgstr "取消订单" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/order_base.html:85 +#: order/templates/order/return_order_base.html:85 +#: order/templates/order/return_order_base.html:86 +#: order/templates/order/sales_order_base.html:86 +#: order/templates/order/sales_order_base.html:87 #, fuzzy #| msgid "Build Order" msgid "Issue Order" msgstr "生产订单" -#: order/templates/order/order_base.html:83 -#: order/templates/order/return_order_base.html:86 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:89 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 +#: order/templates/order/order_base.html:89 +#: order/templates/order/return_order_base.html:90 +#: order/templates/order/sales_order_base.html:100 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:91 +#: order/templates/order/order_base.html:96 #, fuzzy #| msgid "Supplier part" 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 +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:104 +#: order/templates/order/sales_order_base.html:113 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 +#: order/templates/order/order_base.html:116 +#: order/templates/order/return_order_base.html:109 +#: order/templates/order/sales_order_base.html:118 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:141 +#: order/templates/order/order_base.html:146 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:161 +#: order/templates/order/order_base.html:159 +#: order/templates/order/sales_order_base.html:164 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 +#: order/templates/order/order_base.html:165 +#: order/templates/order/sales_order_base.html:170 +#: order/templates/order/sales_order_base.html:180 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:179 -#: order/templates/order/return_order_base.html:157 +#: order/templates/order/order_base.html:184 +#: order/templates/order/return_order_base.html:160 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:224 +#: order/templates/order/order_base.html:229 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 +#: order/templates/order/order_base.html:233 +#: order/templates/order/return_order_base.html:202 +#: order/templates/order/sales_order_base.html:246 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:314 +#: order/templates/order/order_base.html:335 #, fuzzy #| msgid "Purchase Orders" msgid "Purchase Order QR Code" msgstr "采购订单" -#: order/templates/order/order_base.html:326 +#: order/templates/order/order_base.html:347 #, fuzzy #| msgid "Create Purchase Order" msgid "Link Barcode to Purchase Order" @@ -5869,13 +6592,13 @@ msgstr "" #: 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/bom.js:133 templates/js/translated/build.js:530 +#: templates/js/translated/build.js:1802 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/purchase_order.js:1288 #: 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/js/translated/stock.js:720 templates/js/translated/stock.js:889 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "移除行" @@ -5978,33 +6701,33 @@ msgstr "打印构建订单报告" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:155 +#: order/templates/order/return_order_base.html:141 +#: order/templates/order/sales_order_base.html:158 #: 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 +#: order/templates/order/return_order_base.html:198 +#: order/templates/order/sales_order_base.html:242 #: 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:1073 -#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/part.js:1076 +#: templates/js/translated/purchase_order.js:1822 #: 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 +#: order/templates/order/return_order_base.html:273 #, fuzzy #| msgid "Returned" msgid "Return Order QR Code" msgstr "已退回" -#: order/templates/order/return_order_base.html:271 +#: order/templates/order/return_order_base.html:285 #, fuzzy #| msgid "Create Purchase Order" msgid "Link Barcode to Return Order" @@ -6020,42 +6743,42 @@ msgstr "生产订单详情" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:88 -#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:91 +#: order/templates/order/sales_order_base.html:92 #, fuzzy #| msgid "Match Items" msgid "Ship Items" msgstr "匹配项" -#: order/templates/order/sales_order_base.html:92 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:95 +#: order/templates/order/sales_order_base.html:96 #, fuzzy #| msgid "Shipped" msgid "Mark As Shipped" msgstr "已发货" -#: order/templates/order/sales_order_base.html:96 +#: order/templates/order/sales_order_base.html:99 #: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:135 +#: order/templates/order/sales_order_base.html:138 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:176 #: 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 +#: order/templates/order/sales_order_base.html:339 #, fuzzy #| msgid "Sales Order" msgid "Sales Order QR Code" msgstr "销售订单" -#: order/templates/order/sales_order_base.html:333 +#: order/templates/order/sales_order_base.html:351 #, fuzzy #| msgid "New Sales Order" msgid "Link Barcode to Sales Order" @@ -6071,7 +6794,8 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 +#: templates/js/translated/filters.js:299 msgid "Actions" msgstr "" @@ -6101,35 +6825,21 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:406 part/models.py:3990 part/stocktake.py:219 -#: stock/admin.py:153 -msgid "Part ID" -msgstr "商品ID" - -#: part/admin.py:41 part/admin.py:413 part/models.py:3991 part/stocktake.py:220 -#: stock/admin.py:157 -msgid "Part Name" -msgstr "" - -#: part/admin.py:45 part/stocktake.py:221 -msgid "Part Description" -msgstr "" - -#: part/admin.py:48 part/models.py:948 part/templates/part/part_base.html:269 +#: part/admin.py:48 part/models.py:1031 part/templates/part/part_base.html:269 #: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1227 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2036 +#: templates/js/translated/part.js:1230 templates/js/translated/part.js:2344 +#: templates/js/translated/stock.js:2121 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:957 part/templates/part/part_base.html:277 -#: report/models.py:161 templates/js/translated/part.js:1232 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:1040 part/templates/part/part_base.html:286 +#: report/models.py:162 templates/js/translated/part.js:1235 +#: templates/js/translated/part.js:2350 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:930 -#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +#: part/admin.py:53 part/admin.py:319 part/models.py:1013 +#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 msgid "Keywords" msgstr "关键词" @@ -6143,7 +6853,8 @@ msgstr "商品名称" msgid "Category ID" msgstr "类别 ID" -#: part/admin.py:67 part/admin.py:304 part/stocktake.py:223 +#: part/admin.py:67 part/admin.py:304 part/serializers.py:878 +#: part/stocktake.py:223 msgid "Category Name" msgstr "" @@ -6155,11 +6866,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:916 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:999 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1044 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1137 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "最低库存" @@ -6167,177 +6878,201 @@ msgstr "最低库存" msgid "Used In" msgstr "" -#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:236 -#: templates/js/translated/part.js:715 templates/js/translated/part.js:2153 +#: part/admin.py:150 part/serializers.py:895 +#: part/templates/part/part_base.html:241 stock/admin.py:235 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2156 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3114 part/models.py:3128 -#: templates/js/translated/part.js:970 +#: part/admin.py:155 part/models.py:3195 part/models.py:3209 +#: templates/js/translated/part.js:973 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3121 part/models.py:3135 -#: templates/js/translated/part.js:980 +#: part/admin.py:158 part/models.py:3202 part/models.py:3216 +#: templates/js/translated/part.js:983 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:216 +#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:88 -#: part/templates/part/category.html:101 +#: part/admin.py:320 part/templates/part/category.html:85 +#: part/templates/part/category.html:98 msgid "Category Path" msgstr "类别路径" -#: part/admin.py:325 part/models.py:394 part/serializers.py:118 -#: part/serializers.py:274 part/serializers.py:393 -#: 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/admin.py:325 part/models.py:424 part/serializers.py:130 +#: part/serializers.py:290 part/serializers.py:414 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 +#: part/templates/part/category.html:138 part/templates/part/category.html:158 #: 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:2819 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "商品" -#: part/admin.py:386 +#: part/admin.py:378 msgid "BOM Level" msgstr "" -#: part/admin.py:389 +#: part/admin.py:381 msgid "BOM Item ID" msgstr "" -#: part/admin.py:399 +#: part/admin.py:391 msgid "Parent IPN" msgstr "" -#: part/admin.py:410 part/models.py:3992 -msgid "Part IPN" -msgstr "" +#: part/admin.py:405 +#, fuzzy +#| msgid "Part description" +msgid "Part Revision" +msgstr "商品描述" -#: part/admin.py:423 part/serializers.py:1281 +#: part/admin.py:418 part/serializers.py:1344 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:428 part/serializers.py:1296 +#: part/admin.py:423 part/serializers.py:1359 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:110 +#: part/api.py:104 msgid "Starred" msgstr "" -#: part/api.py:112 +#: part/api.py:106 msgid "Filter by starred categories" msgstr "" -#: part/api.py:129 stock/api.py:318 +#: part/api.py:123 stock/api.py:312 msgid "Depth" msgstr "" -#: part/api.py:129 +#: part/api.py:123 msgid "Filter by category depth" msgstr "" -#: part/api.py:147 stock/api.py:336 +#: part/api.py:141 stock/api.py:330 +#, fuzzy +#| msgid "Levels" +msgid "Top Level" +msgstr "等级" + +#: part/api.py:143 +#, fuzzy +#| msgid "Create new part category" +msgid "Filter by top-level categories" +msgstr "新建商品类别" + +#: part/api.py:156 stock/api.py:345 msgid "Cascade" msgstr "" -#: part/api.py:149 +#: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:169 templates/js/translated/part.js:308 +#: part/api.py:179 templates/js/translated/part.js:308 #, fuzzy #| msgid "parent" msgid "Parent" msgstr "上级项" -#: part/api.py:171 +#: part/api.py:181 #, fuzzy #| msgid "Create new part category" msgid "Filter by parent category" msgstr "新建商品类别" -#: part/api.py:204 +#: part/api.py:214 msgid "Exclude Tree" msgstr "" -#: part/api.py:206 +#: part/api.py:216 #, fuzzy #| msgid "Exclude stock items from this selected location" msgid "Exclude sub-categories under the specified category" msgstr "从该选定的仓储地点排除库存项" -#: part/api.py:455 +#: part/api.py:441 #, fuzzy #| msgid "Units" msgid "Has Results" msgstr "单位" -#: part/api.py:622 +#: part/api.py:608 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:640 +#: part/api.py:626 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:656 +#: part/api.py:642 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:740 +#: part/api.py:726 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:887 -msgid "Valid" -msgstr "" - -#: part/api.py:888 +#: part/api.py:874 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:894 +#: part/api.py:880 msgid "This option must be selected" msgstr "" -#: part/api.py:1111 +#: part/api.py:916 +#, fuzzy +#| msgid "Part description" +msgid "Is Revision" +msgstr "商品描述" + +#: part/api.py:926 +#, fuzzy +#| msgid "Part description" +msgid "Has Revisions" +msgstr "商品描述" + +#: part/api.py:1117 msgid "BOM Valid" msgstr "" -#: part/api.py:1514 part/models.py:940 part/models.py:3420 part/models.py:3935 -#: part/serializers.py:408 part/serializers.py:1137 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1521 part/models.py:1023 part/models.py:3482 part/models.py:4039 +#: part/serializers.py:429 part/serializers.py:1200 +#: part/templates/part/part_base.html:260 stock/api.py:783 #: 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:2380 msgid "Category" msgstr "类别" -#: part/api.py:1802 +#: part/api.py:1811 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:103 part/models.py:983 -#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +#: part/bom.py:178 part/models.py:107 part/models.py:1076 +#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 +#: templates/js/translated/part.js:2394 msgid "Default Location" msgstr "默认仓储地点" -#: part/bom.py:171 part/serializers.py:840 +#: part/bom.py:179 part/serializers.py:903 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6346,1079 +7081,1217 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:84 part/models.py:3936 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:4040 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "商品类别" -#: part/models.py:85 part/templates/part/category.html:136 +#: part/models.py:89 part/templates/part/category.html:133 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "商品类别" -#: part/models.py:104 +#: part/models.py:108 msgid "Default location for parts in this category" msgstr "此类别商品的默认仓储地点" -#: part/models.py:109 stock/models.py:173 templates/js/translated/part.js:2810 -#: templates/js/translated/stock.js:2772 +#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2825 +#: templates/js/translated/stock.js:2856 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:111 +#: part/models.py:115 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:120 +#: part/models.py:124 msgid "Default keywords" msgstr "" -#: part/models.py:121 +#: part/models.py:125 msgid "Default keywords for parts in this category" msgstr "此类别商品的默认关键字" -#: part/models.py:127 stock/models.py:85 stock/models.py:156 -#: templates/InvenTree/settings/settings_staff_js.html:456 +#: part/models.py:131 stock/models.py:90 stock/models.py:169 +#: templates/InvenTree/settings/settings_staff_js.html:445 msgid "Icon" msgstr "" -#: part/models.py:128 stock/models.py:157 +#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 +#: stock/models.py:170 msgid "Icon (optional)" msgstr "" -#: part/models.py:150 +#: part/models.py:178 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:483 +#: part/models.py:518 +#, fuzzy +#| msgid "Print actions" +msgid "Cannot delete this part as it is locked" +msgstr "打印操作" + +#: part/models.py:521 #, fuzzy #| msgid "Print actions" msgid "Cannot delete this part as it is still active" msgstr "打印操作" -#: part/models.py:490 +#: part/models.py:526 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:528 +#: part/models.py:564 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:576 part/models.py:583 +#: part/models.py:612 part/models.py:619 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:595 +#: part/models.py:631 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:660 +#: part/models.py:694 #, fuzzy, python-brace-format #| msgid "IPN must match regex pattern {pat}" msgid "IPN must match regex pattern {pattern}" msgstr "IPN 必须匹配正则表达式 {pat}" -#: part/models.py:740 +#: part/models.py:702 +msgid "Part cannot be a revision of itself" +msgstr "" + +#: part/models.py:709 +msgid "Cannot make a revision of a part which is already a revision" +msgstr "" + +#: part/models.py:716 +#, fuzzy +#| msgid "Destination location not specified" +msgid "Revision code must be specified" +msgstr "目标位置未指定" + +#: part/models.py:723 +msgid "Revisions are only allowed for assembly parts" +msgstr "" + +#: part/models.py:730 +msgid "Cannot make a revision of a template part" +msgstr "" + +#: part/models.py:736 +#, fuzzy +#| msgid "Build output must point to the same build" +msgid "Parent part must point to the same template" +msgstr "生产产出必须指向相同的生产" + +#: part/models.py:815 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:845 +#: part/models.py:916 msgid "Duplicate IPN not allowed in part settings" msgstr "在商品设置中不允许重复的IPN" -#: part/models.py:855 +#: part/models.py:925 +#, fuzzy +#| msgid "Attachment with this filename already exists" +msgid "Duplicate part revision already exists." +msgstr "使用此文件名的附件已存在" + +#: part/models.py:935 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:870 +#: part/models.py:950 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:899 part/models.py:3991 +#: part/models.py:982 part/models.py:4095 msgid "Part name" msgstr "商品名称" -#: part/models.py:904 +#: part/models.py:987 msgid "Is Template" msgstr "" -#: part/models.py:905 +#: part/models.py:988 msgid "Is this part a template part?" msgstr "" -#: part/models.py:915 +#: part/models.py:998 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:923 +#: part/models.py:1006 #, fuzzy #| msgid "Description (optional)" msgid "Part description (optional)" msgstr "描述 (可选)" -#: part/models.py:931 +#: part/models.py:1014 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的关键字" -#: part/models.py:941 +#: part/models.py:1024 msgid "Part category" msgstr "商品类别" -#: part/models.py:949 -msgid "Internal Part Number" -msgstr "内部商品编号" - -#: part/models.py:956 +#: part/models.py:1039 msgid "Part revision or version number" msgstr "商品版本号" -#: part/models.py:981 +#: part/models.py:1049 +msgid "Is this part a revision of another part?" +msgstr "" + +#: part/models.py:1050 part/templates/part/part_base.html:277 +#, fuzzy +#| msgid "Part description" +msgid "Revision Of" +msgstr "商品描述" + +#: part/models.py:1074 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1027 part/templates/part/part_base.html:376 +#: part/models.py:1120 part/templates/part/part_base.html:385 msgid "Default Supplier" msgstr "" -#: part/models.py:1028 +#: part/models.py:1121 msgid "Default supplier part" msgstr "默认供应商商品" -#: part/models.py:1035 +#: part/models.py:1128 msgid "Default Expiry" msgstr "" -#: part/models.py:1036 +#: part/models.py:1129 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1045 +#: part/models.py:1138 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1054 +#: part/models.py:1147 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1061 +#: part/models.py:1154 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1067 +#: part/models.py:1160 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1073 +#: part/models.py:1166 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1079 +#: part/models.py:1172 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1085 +#: part/models.py:1178 msgid "Can this part be sold to customers?" msgstr "此商品可以销售给客户吗?" -#: part/models.py:1089 +#: part/models.py:1182 msgid "Is this part active?" msgstr "" -#: part/models.py:1095 +#: part/models.py:1187 templates/js/translated/part.js:818 +#: templates/js/translated/table_filters.js:735 +#, fuzzy +#| msgid "Stock Item" +msgid "Locked" +msgstr "库存项" + +#: part/models.py:1188 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Locked parts cannot be edited" +msgstr "无法取消订单" + +#: part/models.py:1194 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟商品,如软件产品或许可证吗?" -#: part/models.py:1101 +#: part/models.py:1200 msgid "BOM checksum" msgstr "" -#: part/models.py:1102 +#: part/models.py:1201 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1110 +#: part/models.py:1209 msgid "BOM checked by" msgstr "" -#: part/models.py:1115 +#: part/models.py:1214 msgid "BOM checked date" msgstr "" -#: part/models.py:1131 +#: part/models.py:1230 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1141 +#: part/models.py:1240 #, fuzzy #| msgid "User or group responsible for this order" msgid "Owner responsible for this part" msgstr "负责此订单的用户或群组" -#: part/models.py:1146 part/templates/part/part_base.html:339 +#: part/models.py:1245 part/templates/part/part_base.html:348 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2487 msgid "Last Stocktake" msgstr "" -#: part/models.py:2019 +#: part/models.py:2118 msgid "Sell multiple" msgstr "" -#: part/models.py:3028 +#: part/models.py:3109 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3044 +#: part/models.py:3125 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3045 +#: part/models.py:3126 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3051 +#: part/models.py:3132 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3052 +#: part/models.py:3133 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3058 +#: part/models.py:3139 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3059 +#: part/models.py:3140 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3065 +#: part/models.py:3146 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3066 +#: part/models.py:3147 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3072 +#: part/models.py:3153 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3073 +#: part/models.py:3154 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3079 +#: part/models.py:3160 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3080 +#: part/models.py:3161 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3086 +#: part/models.py:3167 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3087 +#: part/models.py:3168 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3093 +#: part/models.py:3174 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3094 +#: part/models.py:3175 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3100 +#: part/models.py:3181 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3101 +#: part/models.py:3182 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3107 +#: part/models.py:3188 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3189 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3115 +#: part/models.py:3196 msgid "Override minimum cost" msgstr "" -#: part/models.py:3122 +#: part/models.py:3203 msgid "Override maximum cost" msgstr "" -#: part/models.py:3129 +#: part/models.py:3210 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3136 +#: part/models.py:3217 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3142 +#: part/models.py:3223 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3143 +#: part/models.py:3224 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3149 +#: part/models.py:3230 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3150 +#: part/models.py:3231 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3156 +#: part/models.py:3237 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3157 +#: part/models.py:3238 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3163 +#: part/models.py:3244 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3164 +#: part/models.py:3245 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3183 +#: part/models.py:3264 msgid "Part for stocktake" msgstr "" -#: part/models.py:3188 +#: part/models.py:3269 msgid "Item Count" msgstr "" -#: part/models.py:3189 +#: part/models.py:3270 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3197 +#: part/models.py:3278 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3201 part/models.py:3284 +#: part/models.py:3282 part/models.py:3365 #: 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:1086 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:543 +#: templates/js/translated/part.js:1089 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 +#: templates/js/translated/purchase_order.js:1801 +#: templates/js/translated/stock.js:2905 msgid "Date" msgstr "" -#: part/models.py:3202 +#: part/models.py:3283 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3210 +#: part/models.py:3291 msgid "Additional notes" msgstr "" -#: part/models.py:3220 +#: part/models.py:3301 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3226 +#: part/models.py:3307 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3227 +#: part/models.py:3308 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3233 +#: part/models.py:3314 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3234 +#: part/models.py:3315 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3290 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3371 templates/InvenTree/settings/settings_staff_js.html:532 msgid "Report" msgstr "" -#: part/models.py:3291 +#: part/models.py:3372 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3296 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3377 templates/InvenTree/settings/settings_staff_js.html:539 msgid "Part Count" msgstr "" -#: part/models.py:3297 +#: part/models.py:3378 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3307 +#: part/models.py:3388 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3469 +#: part/models.py:3398 +#, fuzzy +#| msgid "Sale Price" +msgid "Part Sale Price Break" +msgstr "销售价格" + +#: part/models.py:3510 +#, fuzzy +#| msgid "Parameter Template" +msgid "Part Test Template" +msgstr "参数模板" + +#: part/models.py:3536 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3490 part/models.py:3654 +#: part/models.py:3557 part/models.py:3726 #, fuzzy #| msgid "Key string must be unique" msgid "Choices must be unique" msgstr "关键字必须是唯一的" -#: part/models.py:3501 +#: part/models.py:3568 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3512 +#: part/models.py:3579 #, fuzzy #| msgid "Attachment with this filename already exists" msgid "Test template with the same key already exists for part" msgstr "使用此文件名的附件已存在" -#: part/models.py:3529 templates/js/translated/part.js:2880 +#: part/models.py:3596 templates/js/translated/part.js:2895 msgid "Test Name" msgstr "" -#: part/models.py:3530 +#: part/models.py:3597 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3536 +#: part/models.py:3603 msgid "Test Key" msgstr "" -#: part/models.py:3537 +#: part/models.py:3604 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3544 +#: part/models.py:3611 msgid "Test Description" msgstr "" -#: part/models.py:3545 +#: part/models.py:3612 msgid "Enter description for this test" msgstr "" -#: part/models.py:3549 report/models.py:208 -#: templates/js/translated/part.js:2901 -#: templates/js/translated/table_filters.js:481 +#: part/models.py:3616 report/models.py:209 +#: templates/js/translated/part.js:2916 +#: templates/js/translated/table_filters.js:495 msgid "Enabled" msgstr "已启用" -#: part/models.py:3549 +#: part/models.py:3616 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3554 templates/js/translated/part.js:2909 -#: templates/js/translated/table_filters.js:477 +#: part/models.py:3621 templates/js/translated/part.js:2924 +#: templates/js/translated/table_filters.js:491 msgid "Required" msgstr "" -#: part/models.py:3555 +#: part/models.py:3622 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3560 templates/js/translated/part.js:2917 +#: part/models.py:3627 templates/js/translated/part.js:2932 msgid "Requires Value" msgstr "" -#: part/models.py:3561 +#: part/models.py:3628 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3566 templates/js/translated/part.js:2924 +#: part/models.py:3633 templates/js/translated/part.js:2939 msgid "Requires Attachment" msgstr "" -#: part/models.py:3568 +#: part/models.py:3635 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3574 part/models.py:3713 templates/js/translated/part.js:1637 +#: part/models.py:3641 part/models.py:3785 templates/js/translated/part.js:1640 msgid "Choices" msgstr "" -#: part/models.py:3575 +#: part/models.py:3642 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3629 +#: part/models.py:3674 +#, fuzzy +#| msgid "Part Parameter Templates" +msgid "Part Parameter Template" +msgstr "商品参数模板" + +#: part/models.py:3701 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3634 +#: part/models.py:3706 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3671 +#: part/models.py:3743 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3686 +#: part/models.py:3758 msgid "Parameter Name" msgstr "" -#: part/models.py:3693 +#: part/models.py:3765 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3701 +#: part/models.py:3773 msgid "Parameter description" msgstr "" -#: part/models.py:3707 templates/js/translated/part.js:1628 -#: templates/js/translated/table_filters.js:825 +#: part/models.py:3779 templates/js/translated/part.js:1631 +#: templates/js/translated/table_filters.js:844 msgid "Checkbox" msgstr "" -#: part/models.py:3708 +#: part/models.py:3780 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3714 +#: part/models.py:3786 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3791 +#: part/models.py:3820 +#, fuzzy +#| msgid "Part Parameters" +msgid "Part Parameter" +msgstr "商品参数" + +#: part/models.py:3846 +msgid "Parameter cannot be modified - part is locked" +msgstr "" + +#: part/models.py:3882 #, fuzzy #| msgid "Invalid choice for parent build" msgid "Invalid choice for parameter value" msgstr "上级生产选项无效" -#: part/models.py:3834 +#: part/models.py:3931 msgid "Parent Part" msgstr "" -#: part/models.py:3842 part/models.py:3943 part/models.py:3944 +#: part/models.py:3939 part/models.py:4047 part/models.py:4048 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "参数模板" -#: part/models.py:3847 -msgid "Data" -msgstr "" - -#: part/models.py:3848 +#: part/models.py:3945 msgid "Parameter Value" msgstr "" -#: part/models.py:3950 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3995 +#, fuzzy +#| msgid "Create Category Parameter Template" +msgid "Part Category Parameter Template" +msgstr "创建类别参数模板" + +#: part/models.py:4054 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "默认值" -#: part/models.py:3951 +#: part/models.py:4055 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3989 +#: part/models.py:4093 msgid "Part ID or part name" msgstr "" -#: part/models.py:3990 +#: part/models.py:4094 msgid "Unique part ID value" msgstr "" -#: part/models.py:3992 +#: part/models.py:4096 msgid "Part IPN value" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "Level" msgstr "" -#: part/models.py:3993 +#: part/models.py:4097 msgid "BOM level" msgstr "" -#: part/models.py:4083 +#: part/models.py:4208 +msgid "BOM item cannot be modified - assembly is locked" +msgstr "" + +#: part/models.py:4215 +msgid "BOM item cannot be modified - variant assembly is locked" +msgstr "" + +#: part/models.py:4225 msgid "Select parent part" msgstr "" -#: part/models.py:4093 +#: part/models.py:4235 msgid "Sub part" msgstr "" -#: part/models.py:4094 +#: part/models.py:4236 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4105 +#: part/models.py:4247 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4111 +#: part/models.py:4253 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4117 +#: part/models.py:4259 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4124 part/templates/part/upload_bom.html:55 +#: part/models.py:4266 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4125 +#: part/models.py:4267 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4132 +#: part/models.py:4274 msgid "BOM item reference" msgstr "" -#: part/models.py:4140 +#: part/models.py:4282 msgid "BOM item notes" msgstr "" -#: part/models.py:4146 +#: part/models.py:4288 msgid "Checksum" msgstr "" -#: part/models.py:4147 +#: part/models.py:4289 msgid "BOM line checksum" msgstr "" -#: part/models.py:4152 templates/js/translated/table_filters.js:174 +#: part/models.py:4294 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4153 +#: part/models.py:4295 #, fuzzy #| msgid "Some stock items have been overallocated" msgid "This BOM item has been validated" msgstr "一些库存项已被过度分配" -#: part/models.py:4158 part/templates/part/upload_bom.html:57 +#: part/models.py:4300 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:4159 +#: part/models.py:4301 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4164 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1046 -msgid "Allow Variants" -msgstr "" - -#: part/models.py:4165 +#: part/models.py:4307 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4250 stock/models.py:664 +#: part/models.py:4392 stock/models.py:685 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4260 part/models.py:4262 +#: part/models.py:4402 part/models.py:4404 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4402 +#: part/models.py:4542 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4423 +#: part/models.py:4563 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4436 +#: part/models.py:4576 msgid "Parent BOM item" msgstr "" -#: part/models.py:4444 +#: part/models.py:4584 msgid "Substitute part" msgstr "" -#: part/models.py:4460 +#: part/models.py:4600 msgid "Part 1" msgstr "" -#: part/models.py:4468 +#: part/models.py:4608 msgid "Part 2" msgstr "" -#: part/models.py:4469 +#: part/models.py:4609 msgid "Select Related Part" msgstr "" -#: part/models.py:4488 +#: part/models.py:4628 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4493 +#: part/models.py:4633 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:120 part/serializers.py:142 -#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/serializers.py:124 +#, fuzzy +#| msgid "Part Category" +msgid "Parent Category" +msgstr "商品类别" + +#: part/serializers.py:125 templates/js/translated/part.js:309 +msgid "Parent part category" +msgstr "" + +#: part/serializers.py:132 part/serializers.py:158 +#: part/templates/part/category.html:119 part/templates/part/category.html:204 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "子类别" -#: part/serializers.py:187 +#: part/serializers.py:197 msgid "Results" msgstr "" -#: part/serializers.py:188 +#: part/serializers.py:198 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:212 part/serializers.py:230 stock/serializers.py:538 +#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:275 +#: part/serializers.py:291 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:420 #, fuzzy #| msgid "Rejected" msgid "No parts selected" msgstr "已拒绝" -#: part/serializers.py:409 +#: part/serializers.py:430 #, fuzzy #| msgid "Set category" msgid "Select category" msgstr "设置类别" -#: part/serializers.py:444 +#: part/serializers.py:465 msgid "Original Part" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:466 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:450 +#: part/serializers.py:471 msgid "Copy Image" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:472 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:457 part/templates/part/detail.html:277 +#: part/serializers.py:478 part/templates/part/detail.html:293 msgid "Copy BOM" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:479 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:485 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:486 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:471 +#: part/serializers.py:492 #, fuzzy #| msgid "Company Notes" msgid "Copy Notes" msgstr "公司备注" -#: part/serializers.py:472 +#: part/serializers.py:493 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:490 +#: part/serializers.py:511 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:513 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:520 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:521 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:517 +#: part/serializers.py:538 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:554 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:564 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:550 +#: part/serializers.py:571 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:559 +#: part/serializers.py:580 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:591 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:577 +#: part/serializers.py:598 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:901 #, fuzzy -#| msgid "External Link" -msgid "External Stock" -msgstr "外部链接" +#| msgid "Part description" +msgid "Revisions" +msgstr "商品描述" -#: part/serializers.py:843 +#: part/serializers.py:906 #, fuzzy #| msgid "Unallocate Stock" msgid "Unallocated Stock" msgstr "未分配库存" -#: part/serializers.py:846 +#: part/serializers.py:909 #, fuzzy #| msgid "Part Stock" msgid "Variant Stock" msgstr "商品库存" -#: part/serializers.py:876 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:472 +#: part/serializers.py:939 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "复制部件" -#: part/serializers.py:877 +#: part/serializers.py:940 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:883 templates/js/translated/part.js:102 +#: part/serializers.py:946 templates/js/translated/part.js:103 msgid "Initial Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:947 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:890 +#: part/serializers.py:953 msgid "Supplier Information" msgstr "" -#: part/serializers.py:891 +#: part/serializers.py:954 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:899 +#: part/serializers.py:962 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:900 +#: part/serializers.py:963 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:905 +#: part/serializers.py:968 #, fuzzy #| msgid "Existing barcode found" msgid "Existing Image" msgstr "发现现有条码" -#: part/serializers.py:906 +#: part/serializers.py:969 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:986 #, fuzzy #| msgid "Part image not found" msgid "Image file does not exist" msgstr "未找到商品图像" -#: part/serializers.py:1129 +#: part/serializers.py:1192 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1202 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1149 +#: part/serializers.py:1212 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1155 +#: part/serializers.py:1218 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1219 #, fuzzy #| msgid "Exclude stock items from this selected location" msgid "Exclude stock items in external locations" msgstr "从该选定的仓储地点排除库存项" -#: part/serializers.py:1161 +#: part/serializers.py:1224 msgid "Generate Report" msgstr "" -#: part/serializers.py:1162 +#: part/serializers.py:1225 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1167 +#: part/serializers.py:1230 msgid "Update Parts" msgstr "" -#: part/serializers.py:1168 +#: part/serializers.py:1231 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1176 +#: part/serializers.py:1239 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1282 +#: part/serializers.py:1345 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1289 +#: part/serializers.py:1352 #, fuzzy #| msgid "Uses default currency" msgid "Minimum price currency" msgstr "使用默认货币" -#: part/serializers.py:1297 +#: part/serializers.py:1360 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1304 +#: part/serializers.py:1367 #, fuzzy #| msgid "Uses default currency" msgid "Maximum price currency" msgstr "使用默认货币" -#: part/serializers.py:1333 +#: part/serializers.py:1396 msgid "Update" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1397 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1357 +#: part/serializers.py:1420 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1364 +#: part/serializers.py:1427 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1367 +#: part/serializers.py:1430 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1574 +#, fuzzy +#| msgid "Select Label Template" +msgid "Select the parent assembly" +msgstr "选择标签模板" + +#: part/serializers.py:1583 +#, fuzzy +#| msgid "Component" +msgid "Component Name" +msgstr "组件" + +#: part/serializers.py:1586 +#, fuzzy +#| msgid "Component" +msgid "Component IPN" +msgstr "组件" + +#: part/serializers.py:1589 +#, fuzzy +#| msgid "Company description" +msgid "Component Description" +msgstr "公司简介" + +#: part/serializers.py:1595 +#, fuzzy +#| msgid "Select Label Template" +msgid "Select the component part" +msgstr "选择标签模板" + +#: part/serializers.py:1604 part/templates/part/part_base.html:235 +#: templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/serializers.py:1835 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1742 +#: part/serializers.py:1843 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1743 +#: part/serializers.py:1844 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1849 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1749 +#: part/serializers.py:1850 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1754 +#: part/serializers.py:1855 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1755 +#: part/serializers.py:1856 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1760 +#: part/serializers.py:1861 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1761 +#: part/serializers.py:1862 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1795 +#: part/serializers.py:1899 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1796 +#: part/serializers.py:1900 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1826 +#: part/serializers.py:1932 msgid "No part column specified" msgstr "" -#: part/serializers.py:1870 +#: part/serializers.py:1976 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1979 msgid "No matching part found" msgstr "" -#: part/serializers.py:1876 +#: part/serializers.py:1982 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1885 +#: part/serializers.py:1991 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1893 +#: part/serializers.py:1999 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1914 +#: part/serializers.py:2022 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:225 templates/js/translated/part.js:1067 -#: templates/js/translated/part.js:1822 templates/js/translated/part.js:1878 -#: templates/js/translated/purchase_order.js:2084 +#: part/stocktake.py:225 templates/js/translated/part.js:1070 +#: templates/js/translated/part.js:1825 templates/js/translated/part.js:1881 +#: templates/js/translated/purchase_order.js:2154 msgid "Total Quantity" msgstr "" @@ -7438,11 +8311,11 @@ msgstr "" msgid "A new stocktake report is available for download" msgstr "" -#: part/tasks.py:38 +#: part/tasks.py:37 msgid "Low stock notification" msgstr "" -#: part/tasks.py:40 +#: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" @@ -7468,65 +8341,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "一些库存项已被过度分配" -#: part/templates/part/category.html:35 +#: part/templates/part/category.html:32 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:41 part/templates/part/category.html:45 +#: part/templates/part/category.html:38 part/templates/part/category.html:42 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:49 +#: part/templates/part/category.html:46 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:55 +#: part/templates/part/category.html:52 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:60 +#: part/templates/part/category.html:57 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:61 +#: part/templates/part/category.html:58 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:65 +#: part/templates/part/category.html:62 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:66 +#: part/templates/part/category.html:63 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:102 +#: part/templates/part/category.html:99 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:127 +#: part/templates/part/category.html:124 msgid "Parts (Including subcategories)" msgstr "商品 (包括子类别)" -#: part/templates/part/category.html:165 +#: part/templates/part/category.html:162 msgid "Create new part" msgstr "新建商品" -#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 msgid "New Part" msgstr "新商品" -#: part/templates/part/category.html:192 +#: part/templates/part/category.html:189 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "商品参数" -#: part/templates/part/category.html:211 +#: part/templates/part/category.html:208 msgid "Create new part category" msgstr "新建商品类别" -#: part/templates/part/category.html:212 +#: part/templates/part/category.html:209 msgid "New Category" msgstr "" @@ -7572,9 +8445,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:256 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2216 users/models.py:204 +#: templates/js/translated/stock.js:2301 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7586,101 +8459,107 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:106 +#, fuzzy +#| msgid "Parameter Template" +msgid "Part Test Statistics" +msgstr "参数模板" + +#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:156 +#: part/templates/part/detail.html:172 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:171 +#: part/templates/part/detail.html:187 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:191 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:176 +#: part/templates/part/detail.html:192 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:199 +#: part/templates/part/detail.html:215 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:271 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 +#: part/templates/part/detail.html:276 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:282 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:272 +#: part/templates/part/detail.html:288 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:292 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:294 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:313 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:329 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:352 +#: part/templates/part/detail.html:368 msgid "Part Suppliers" msgstr "商品供应商" -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:388 msgid "Part Manufacturers" msgstr "商品制造商" -#: part/templates/part/detail.html:657 +#: part/templates/part/detail.html:672 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:665 +#: part/templates/part/detail.html:680 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:750 +#: part/templates/part/detail.html:765 msgid "Add Test Result Template" msgstr "" @@ -7715,13 +8594,13 @@ 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 +#: templates/js/translated/order.js:154 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 +#: templates/js/translated/order.js:155 msgid "Select file format" msgstr "" @@ -7739,7 +8618,7 @@ 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 +#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 msgid "Print Label" msgstr "打印标签" @@ -7749,7 +8628,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:80 msgid "Stock actions" msgstr "" @@ -7761,7 +8640,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:2296 msgid "Part actions" msgstr "" @@ -7812,7 +8691,7 @@ msgid "Part is virtual (not a physical part)" msgstr "商品是虚拟的(不是实体零件)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:681 +#: part/templates/part/part_base.html:690 msgid "Show Part Details" msgstr "" @@ -7826,51 +8705,47 @@ msgstr "" 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 +#: part/templates/part/part_base.html:300 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1265 templates/js/translated/part.js:2444 +#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1268 templates/js/translated/part.js:2460 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:352 +#: part/templates/part/part_base.html:361 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:356 +#: part/templates/part/part_base.html:365 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:444 +#: part/templates/part/part_base.html:453 msgid "Part QR Code" msgstr "商品二维码" -#: part/templates/part/part_base.html:461 +#: part/templates/part/part_base.html:470 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:511 +#: part/templates/part/part_base.html:520 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:537 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:579 +#: part/templates/part/part_base.html:588 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:675 +#: part/templates/part/part_base.html:684 msgid "Hide Part Details" msgstr "" @@ -7924,13 +8799,13 @@ 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/loc_link.html:3 stock/templates/stock/location.html:21 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1243 templates/js/translated/part.js:2146 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +#: templates/js/translated/part.js:1246 templates/js/translated/part.js:2149 +#: templates/js/translated/part.js:2408 templates/js/translated/stock.js:1066 +#: templates/js/translated/stock.js:2155 templates/navbar.html:31 msgid "Stock" msgstr "库存" @@ -7968,17 +8843,17 @@ 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/helpers.js:103 #: 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:252 +#: part/templates/part/prices.html:28 stock/admin.py:251 #: 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 +#: templates/js/translated/stock.js:2331 msgid "Last Updated" msgstr "" @@ -8054,9 +8929,9 @@ msgid "Update Pricing" msgstr "商品价格" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:227 -#: templates/js/translated/part.js:705 templates/js/translated/part.js:2141 -#: templates/js/translated/part.js:2143 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2144 +#: templates/js/translated/part.js:2146 msgid "No Stock" msgstr "" @@ -8134,7 +9009,7 @@ msgstr "未找到商品图像" msgid "Part Pricing" msgstr "商品价格" -#: plugin/api.py:170 +#: plugin/api.py:172 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8146,122 +9021,132 @@ msgstr "未指定操作" msgid "No matching action found" msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 -#: plugin/base/barcodes/api.py:503 +#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 +#: plugin/base/barcodes/api.py:546 msgid "No match found for barcode data" msgstr "未找到匹配条形码数据" -#: plugin/base/barcodes/api.py:128 +#: plugin/base/barcodes/api.py:129 msgid "Match found for barcode data" msgstr "找到匹配条形码数据" -#: plugin/base/barcodes/api.py:154 -#: templates/js/translated/purchase_order.js:1406 +#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 +msgid "Model is not supported" +msgstr "" + +#: plugin/base/barcodes/api.py:168 +#, fuzzy +#| msgid "Part image not found" +msgid "Model instance not found" +msgstr "未找到商品图像" + +#: plugin/base/barcodes/api.py:197 +#: templates/js/translated/purchase_order.js:1468 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:293 +#: plugin/base/barcodes/api.py:336 #, fuzzy #| msgid "No matching action found" msgid "No matching part data found" msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:310 +#: plugin/base/barcodes/api.py:353 #, fuzzy #| msgid "No supplier parts found" msgid "No matching supplier parts found" msgstr "未找到供应商商品" -#: plugin/base/barcodes/api.py:314 +#: plugin/base/barcodes/api.py:357 #, fuzzy #| msgid "No supplier parts found" msgid "Multiple matching supplier parts found" msgstr "未找到供应商商品" -#: plugin/base/barcodes/api.py:338 +#: plugin/base/barcodes/api.py:381 #, fuzzy #| msgid "Delete supplier part" msgid "Matched supplier part" msgstr "删除供应商商品" -#: plugin/base/barcodes/api.py:387 +#: plugin/base/barcodes/api.py:430 #, fuzzy #| msgid "This build output has already been completed" msgid "Item has already been received" msgstr "此生产产出已经完成" -#: plugin/base/barcodes/api.py:424 +#: plugin/base/barcodes/api.py:467 #, fuzzy #| msgid "No match found for barcode data" msgid "No match for supplier barcode" msgstr "未找到匹配条形码数据" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:510 #, fuzzy #| msgid "No supplier parts found" msgid "Multiple matching line items found" msgstr "未找到供应商商品" -#: plugin/base/barcodes/api.py:470 +#: plugin/base/barcodes/api.py:513 #, fuzzy #| msgid "No matching action found" msgid "No matching line item found" msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:526 +#: plugin/base/barcodes/api.py:569 #, fuzzy #| msgid "Selected stock item not found in BOM" msgid "Stock item does not match line item" msgstr "在BOM中找不到选定的库存项" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 #: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:559 +#: plugin/base/barcodes/api.py:602 #, fuzzy #| msgid "Stock quantity to allocate to build" msgid "Stock item allocated to sales order" msgstr "分配到生产的数量" -#: plugin/base/barcodes/api.py:563 +#: plugin/base/barcodes/api.py:606 #, fuzzy #| msgid "No user information" msgid "Not enough information" msgstr "没有用户信息" -#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:197 +#: plugin/base/barcodes/mixins.py:222 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:201 +#: plugin/base/barcodes/mixins.py:226 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:206 +#: plugin/base/barcodes/mixins.py:231 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:440 +#: plugin/base/barcodes/mixins.py:465 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:471 +#: plugin/base/barcodes/mixins.py:496 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:479 +#: plugin/base/barcodes/mixins.py:504 #, fuzzy #| msgid "Received against purchase order" msgid "Received purchase order line item" @@ -8273,79 +9158,91 @@ msgstr "收到定购单" msgid "Scanned barcode data" msgstr "扫描条形码" -#: plugin/base/barcodes/serializers.py:81 +#: plugin/base/barcodes/serializers.py:30 +#, fuzzy +#| msgid "User or group responsible for this order" +msgid "Model name to generate barcode for" +msgstr "负责此订单的用户或群组" + +#: plugin/base/barcodes/serializers.py:35 +#, fuzzy +#| msgid "User or group responsible for this order" +msgid "Primary key of model object to generate barcode for" +msgstr "负责此订单的用户或群组" + +#: plugin/base/barcodes/serializers.py:105 #, fuzzy #| msgid "Purchase Order Settings" msgid "Purchase Order to allocate items against" msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:87 +#: plugin/base/barcodes/serializers.py:111 #, fuzzy #| msgid "Purchase Order Settings" msgid "Purchase order is not pending" msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:129 #, fuzzy #| msgid "Purchase Order Settings" msgid "PurchaseOrder to receive items against" msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:135 #, fuzzy #| msgid "Email backend not configured" msgid "Purchase order has not been placed" msgstr "未配置电子邮件后端" -#: plugin/base/barcodes/serializers.py:119 +#: plugin/base/barcodes/serializers.py:143 #, fuzzy #| msgid "Location not specified" msgid "Location to receive items into" msgstr "未指定仓储地点" -#: plugin/base/barcodes/serializers.py:125 +#: plugin/base/barcodes/serializers.py:149 #, fuzzy #| msgid "Create new stock location" msgid "Cannot select a structural location" msgstr "新建仓储地点" -#: plugin/base/barcodes/serializers.py:139 +#: plugin/base/barcodes/serializers.py:163 #, fuzzy #| msgid "Purchase Order Settings" msgid "Sales Order to allocate items against" msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:145 +#: plugin/base/barcodes/serializers.py:169 #, fuzzy #| msgid "Purchase Order Settings" msgid "Sales order is not pending" msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:153 +#: plugin/base/barcodes/serializers.py:177 #, fuzzy #| msgid "Purchase Order Settings" msgid "Sales order line item to allocate items against" msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:160 +#: plugin/base/barcodes/serializers.py:184 #, fuzzy #| msgid "Purchase Order Settings" msgid "Sales order shipment to allocate items against" msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:166 +#: plugin/base/barcodes/serializers.py:190 #, fuzzy #| msgid "This build output has already been completed" msgid "Shipment has already been delivered" msgstr "此生产产出已经完成" -#: plugin/base/barcodes/serializers.py:171 +#: plugin/base/barcodes/serializers.py:195 #, fuzzy #| msgid "Stock quantity to allocate to build" msgid "Quantity to allocate" msgstr "分配到生产的数量" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 msgid "Label printing failed" msgstr "" @@ -8367,25 +9264,53 @@ msgstr "重命名文件出错" msgid "No items provided to print" msgstr "没有为模板提供有效对象" -#: plugin/builtin/barcodes/inventree_barcode.py:25 +#: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:30 #: 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/labels/label_sheet.py:64 #: 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/barcodes/inventree_barcode.py:34 +#, fuzzy +#| msgid "Enter barcode data" +msgid "Internal Barcode Format" +msgstr "输入条形码数据" + +#: plugin/builtin/barcodes/inventree_barcode.py:35 +#, fuzzy +#| msgid "User or group responsible for this order" +msgid "Select an internal barcode format" +msgstr "负责此订单的用户或群组" + +#: plugin/builtin/barcodes/inventree_barcode.py:37 +msgid "JSON barcodes (human readable)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:38 +msgid "Short barcodes (space optimized)" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:43 +msgid "Short Barcode Prefix" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:45 +msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +msgstr "" + #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8445,12 +9370,14 @@ msgid "Provides native support for printing PDF labels" msgstr "打印标签前必须选择商品" #: plugin/builtin/labels/inventree_label.py:28 +#: plugin/builtin/labels/label_sheet.py:70 #, fuzzy #| msgid "Debug Mode" msgid "Debug mode" msgstr "调试模式" #: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/label_sheet.py:71 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8464,59 +9391,59 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "打印标签前必须选择商品" -#: plugin/builtin/labels/inventree_machine.py:151 +#: plugin/builtin/labels/inventree_machine.py:149 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:168 +#: plugin/builtin/labels/inventree_machine.py:166 msgid "Options" msgstr "选项" -#: plugin/builtin/labels/label_sheet.py:29 +#: plugin/builtin/labels/label_sheet.py:30 #, fuzzy #| msgid "Default page size for PDF reports" msgid "Page size for the label sheet" msgstr "PDF 报表默认页面大小" -#: plugin/builtin/labels/label_sheet.py:34 +#: plugin/builtin/labels/label_sheet.py:35 #, fuzzy #| msgid "Label" msgid "Skip Labels" msgstr "标签" -#: plugin/builtin/labels/label_sheet.py:35 +#: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" msgstr "" -#: plugin/builtin/labels/label_sheet.py:41 +#: plugin/builtin/labels/label_sheet.py:42 msgid "Border" msgstr "" -#: plugin/builtin/labels/label_sheet.py:42 +#: plugin/builtin/labels/label_sheet.py:43 msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:48 report/models.py:308 msgid "Landscape" msgstr "" -#: plugin/builtin/labels/label_sheet.py:48 +#: plugin/builtin/labels/label_sheet.py:49 msgid "Print the label sheet in landscape mode" msgstr "" -#: plugin/builtin/labels/label_sheet.py:60 +#: plugin/builtin/labels/label_sheet.py:61 msgid "InvenTree Label Sheet Printer" msgstr "" -#: plugin/builtin/labels/label_sheet.py:61 +#: plugin/builtin/labels/label_sheet.py:62 msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:99 +#: plugin/builtin/labels/label_sheet.py:107 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:133 +#: plugin/builtin/labels/label_sheet.py:141 msgid "No labels were generated" msgstr "" @@ -8663,7 +9590,7 @@ msgid "Is the plugin active" msgstr "" #: plugin/models.py:157 templates/js/translated/table_filters.js:370 -#: templates/js/translated/table_filters.js:504 +#: templates/js/translated/table_filters.js:518 msgid "Installed" msgstr "" @@ -8681,7 +9608,7 @@ msgstr "" msgid "Package Plugin" msgstr "打包" -#: plugin/models.py:220 report/models.py:474 +#: plugin/models.py:220 report/models.py:475 #: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" @@ -8695,17 +9622,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:597 +#: plugin/registry.py:534 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:600 +#: plugin/registry.py:537 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:602 +#: plugin/registry.py:539 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8838,12 +9765,8 @@ msgstr "" msgid "No valid objects provided to template" msgstr "没有为模板提供有效对象" -#: report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: report/api.py:103 report/models.py:439 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 #: templates/js/translated/return_order.js:353 #: templates/js/translated/sales_order.js:887 #: templates/js/translated/sales_order.js:1047 @@ -8891,175 +9814,175 @@ msgstr "重命名文件出错" msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:41 +#: report/helpers.py:43 msgid "A4" msgstr "" -#: report/helpers.py:42 +#: report/helpers.py:44 msgid "A3" msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:45 msgid "Legal" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:46 msgid "Letter" msgstr "" -#: report/models.py:118 +#: report/models.py:119 #, fuzzy #| msgid "Attachment with this filename already exists" msgid "Template file with this name already exists" msgstr "使用此文件名的附件已存在" -#: report/models.py:150 +#: report/models.py:151 msgid "Template name" msgstr "" -#: report/models.py:156 +#: report/models.py:157 #, fuzzy #| msgid "Company description" msgid "Template description" msgstr "公司简介" -#: report/models.py:162 +#: report/models.py:163 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:202 +#: report/models.py:203 msgid "Filename Pattern" msgstr "文件名样式" -#: report/models.py:203 +#: report/models.py:204 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:208 +#: report/models.py:209 #, fuzzy #| msgid "Label template is enabled" msgid "Template is enabled" msgstr "标签模板已启用" -#: report/models.py:214 +#: report/models.py:215 #, fuzzy #| msgid "Part Parameter Templates" msgid "Target model type for template" msgstr "商品参数模板" -#: report/models.py:234 +#: report/models.py:235 msgid "Filters" msgstr "筛选器" -#: report/models.py:235 +#: report/models.py:236 #, 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 +#: report/models.py:295 report/models.py:362 #, fuzzy #| msgid "Template" msgid "Template file" msgstr "模板" -#: report/models.py:302 +#: report/models.py:303 #, fuzzy #| msgid "Default page size for PDF reports" msgid "Page size for PDF reports" msgstr "PDF 报表默认页面大小" -#: report/models.py:308 +#: report/models.py:309 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 +#: report/models.py:368 msgid "Width [mm]" msgstr "宽度 [mm]" -#: report/models.py:368 +#: report/models.py:369 msgid "Label width, specified in mm" msgstr "标注宽度,以毫米为单位。" -#: report/models.py:374 +#: report/models.py:375 msgid "Height [mm]" msgstr "高度 [mm]" -#: report/models.py:375 +#: report/models.py:376 msgid "Label height, specified in mm" msgstr "标注高度,以毫米为单位。" -#: report/models.py:438 +#: report/models.py:439 #, fuzzy #| msgid "Number of stock items to build" msgid "Number of items to process" msgstr "要生产的项目数量" -#: report/models.py:444 +#: report/models.py:445 msgid "Report generation is complete" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2177 +#: report/models.py:449 templates/js/translated/build.js:2349 msgid "Progress" msgstr "" -#: report/models.py:448 +#: report/models.py:449 #, fuzzy #| msgid "Report Settings" msgid "Report generation progress" msgstr "报表设置" -#: report/models.py:456 +#: report/models.py:457 #, fuzzy #| msgid "Delete Template" msgid "Report Template" msgstr "删除模板" -#: report/models.py:463 report/models.py:486 +#: report/models.py:464 report/models.py:487 #, fuzzy #| msgid "Output Actions" msgid "Output File" msgstr "输出操作" -#: report/models.py:464 report/models.py:487 +#: report/models.py:465 report/models.py:488 #, fuzzy #| msgid "Delete outputs" msgid "Generated output file" msgstr "删除输出" -#: report/models.py:475 +#: report/models.py:476 #, fuzzy #| msgid "Select supplier" msgid "Label output plugin" msgstr "选择供应商" -#: report/models.py:479 +#: report/models.py:480 #, fuzzy #| msgid "Label template file" msgid "Label Template" msgstr "标签模板文件" -#: report/models.py:502 +#: report/models.py:503 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:504 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:511 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:529 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:530 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:537 msgid "Asset file description" msgstr "" @@ -9118,10 +10041,10 @@ 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/order.js:341 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/purchase_order.js:2185 #: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "单价" @@ -9136,26 +10059,13 @@ 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/purchase_order.js:2087 #: templates/js/translated/sales_order.js:1842 +#: templates/test_statistics_table.html:8 +#: templates/test_statistics_table.html:19 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 #, fuzzy #| msgid "Stock item created" @@ -9171,793 +10081,855 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1495 +#: templates/js/translated/stock.js:1580 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2428 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2542 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:130 +#: report/templates/report/inventree_test_report.html:129 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:132 +#: report/templates/report/inventree_test_report.html:131 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:139 +#: report/templates/report/inventree_test_report.html:138 #, fuzzy #| msgid "Restart required" msgid "No result (required)" msgstr "需要重启" -#: report/templates/report/inventree_test_report.html:141 +#: report/templates/report/inventree_test_report.html:140 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:154 -#: stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report.html:153 +#: stock/serializers.py:599 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 +#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 +#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 +#: templates/js/translated/stock.js:3194 msgid "Serial" msgstr "" -#: report/templatetags/report.py:96 +#: report/templatetags/report.py:98 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#: report/templatetags/report.py:154 report/templatetags/report.py:233 #, fuzzy #| msgid "Part image not found" msgid "Image file not found" msgstr "未找到商品图像" -#: report/templatetags/report.py:242 +#: report/templatetags/report.py:258 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:283 +#: report/templatetags/report.py:299 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:52 stock/admin.py:172 +#: stock/admin.py:51 stock/admin.py:171 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 +#: stock/admin.py:63 stock/templates/stock/location.html:128 +#: stock/templates/stock/location.html:134 msgid "Location Path" msgstr "" -#: stock/admin.py:149 +#: stock/admin.py:148 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:168 +#: stock/admin.py:167 #, fuzzy #| msgid "Status" msgid "Status Code" msgstr "状态" -#: stock/admin.py:180 +#: stock/admin.py:179 msgid "Supplier Part ID" msgstr "供应商商品ID" -#: stock/admin.py:185 +#: stock/admin.py:184 #, fuzzy #| msgid "Supplier Part" msgid "Supplier Part SKU" msgstr "供应商商品" -#: stock/admin.py:190 +#: stock/admin.py:189 msgid "Supplier ID" msgstr "" -#: stock/admin.py:196 +#: stock/admin.py:195 msgid "Supplier Name" msgstr "" -#: stock/admin.py:201 +#: stock/admin.py:200 msgid "Customer ID" msgstr "" -#: stock/admin.py:206 stock/models.py:806 +#: stock/admin.py:205 stock/models.py:825 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:211 +#: stock/admin.py:210 msgid "Build ID" msgstr "" -#: stock/admin.py:221 +#: stock/admin.py:220 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:226 +#: stock/admin.py:225 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:241 +#: stock/admin.py:240 msgid "Review Needed" msgstr "" -#: stock/admin.py:246 +#: stock/admin.py:245 #, fuzzy #| msgid "Delete Template" msgid "Delete on Deplete" msgstr "删除模板" -#: stock/admin.py:261 stock/models.py:900 +#: stock/admin.py:260 stock/models.py:919 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2230 users/models.py:124 +#: templates/js/translated/stock.js:2315 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:318 +#: stock/api.py:312 #, fuzzy #| msgid "Print Order Reports" msgid "Filter by location depth" msgstr "打印订单报表" -#: stock/api.py:338 +#: stock/api.py:332 +#, fuzzy +#| msgid "Delete location" +msgid "Filter by top-level locations" +msgstr "删除仓储地" + +#: stock/api.py:347 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:359 +#: stock/api.py:369 stock/serializers.py:1186 #, fuzzy #| msgid "Print actions" msgid "Parent Location" msgstr "打印操作" -#: stock/api.py:360 +#: stock/api.py:370 #, fuzzy #| msgid "Delete location" msgid "Filter by parent location" msgstr "删除仓储地" -#: stock/api.py:615 templates/js/translated/table_filters.js:427 +#: stock/api.py:617 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:805 #, fuzzy #| msgid "Part name" msgid "Part Tree" msgstr "商品名称" -#: stock/api.py:833 +#: stock/api.py:835 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:839 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: stock/api.py:842 stock/serializers.py:604 +#: stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:929 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:935 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:966 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:976 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:1007 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:59 +#: stock/models.py:64 #, fuzzy #| msgid "Stock Location" msgid "Stock Location type" msgstr "仓储地点" -#: stock/models.py:60 +#: stock/models.py:65 #, fuzzy #| msgid "Stock Locations" msgid "Stock Location types" msgstr "仓储地点" -#: stock/models.py:86 +#: stock/models.py:91 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:123 stock/models.py:788 +#: stock/models.py:131 stock/models.py:807 #: 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 +#: stock/models.py:132 stock/templates/stock/location.html:183 #: 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/models.py:180 stock/models.py:968 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:167 stock/models.py:950 +#: stock/models.py:181 stock/models.py:969 msgid "Select Owner" msgstr "" -#: stock/models.py:175 +#: stock/models.py:189 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 +#: stock/models.py:196 templates/js/translated/stock.js:2865 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:183 +#: stock/models.py:197 msgid "This is an external stock location" msgstr "" -#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: stock/models.py:203 templates/js/translated/stock.js:2874 #: templates/js/translated/table_filters.js:246 #, fuzzy #| msgid "Location" msgid "Location type" msgstr "地点" -#: stock/models.py:193 +#: stock/models.py:207 #, fuzzy #| msgid "Stock item created" msgid "Stock location type of this location" msgstr "库存项已创建" -#: stock/models.py:262 +#: stock/models.py:279 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:643 +#: stock/models.py:664 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:670 stock/serializers.py:422 +#: stock/models.py:691 stock/serializers.py:480 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:687 +#: stock/models.py:708 #, 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:697 stock/models.py:710 +#: stock/models.py:718 stock/models.py:731 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:700 +#: stock/models.py:721 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:724 +#: stock/models.py:743 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:729 +#: stock/models.py:748 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:742 +#: stock/models.py:761 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:758 +#: stock/models.py:777 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:770 +#: stock/models.py:789 msgid "Base part" msgstr "" -#: stock/models.py:780 +#: stock/models.py:799 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:792 +#: stock/models.py:811 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:800 stock/serializers.py:1483 +#: stock/models.py:819 stock/serializers.py:1580 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:811 +#: stock/models.py:830 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:830 +#: stock/models.py:849 msgid "Serial number for this item" msgstr "" -#: stock/models.py:844 stock/serializers.py:1466 +#: stock/models.py:863 stock/serializers.py:1563 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:849 +#: stock/models.py:868 msgid "Stock Quantity" msgstr "" -#: stock/models.py:859 +#: stock/models.py:878 msgid "Source Build" msgstr "" -#: stock/models.py:862 +#: stock/models.py:881 msgid "Build for this stock item" msgstr "" -#: stock/models.py:869 stock/templates/stock/item_base.html:363 +#: stock/models.py:888 stock/templates/stock/item_base.html:363 #, fuzzy #| msgid "Issued By" msgid "Consumed By" msgstr "发布者" -#: stock/models.py:872 +#: stock/models.py:891 #, fuzzy #| msgid "BuildOrder to which this build is allocated" msgid "Build order which consumed this stock item" msgstr "此次生产匹配的订单" -#: stock/models.py:881 +#: stock/models.py:900 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:904 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:891 +#: stock/models.py:910 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:902 +#: stock/models.py:921 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:920 +#: stock/models.py:939 msgid "Delete on deplete" msgstr "" -#: stock/models.py:921 +#: stock/models.py:940 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:941 +#: stock/models.py:960 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:972 +#: stock/models.py:991 msgid "Converted to part" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1511 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1496 +#: stock/models.py:1517 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1504 +#: stock/models.py:1525 #, 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:1510 +#: stock/models.py:1531 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1515 +#: stock/models.py:1536 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1523 stock/serializers.py:661 +#: stock/models.py:1544 stock/serializers.py:726 msgid "Serial numbers already exist" msgstr "序列号已存在" -#: stock/models.py:1620 +#: stock/models.py:1641 #, fuzzy #| msgid "Part image not found" msgid "Test template does not exist" msgstr "未找到商品图像" -#: stock/models.py:1638 +#: stock/models.py:1659 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1642 +#: stock/models.py:1663 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1645 +#: stock/models.py:1666 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1669 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1672 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1654 +#: stock/models.py:1675 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1661 stock/serializers.py:1372 +#: stock/models.py:1682 stock/serializers.py:1469 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1665 +#: stock/models.py:1686 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1673 +#: stock/models.py:1694 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1678 +#: stock/models.py:1699 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1960 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2326 +#: stock/models.py:2341 +#, fuzzy +#| msgid "Stock Item" +msgid "Stock Item Tracking" +msgstr "库存项" + +#: stock/models.py:2374 msgid "Entry notes" msgstr "" -#: stock/models.py:2394 +#: stock/models.py:2414 +#, fuzzy +#| msgid "Stock Items" +msgid "Stock Item Test Result" +msgstr "库存项" + +#: stock/models.py:2447 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2399 +#: stock/models.py:2452 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2404 +#: stock/models.py:2457 #, fuzzy #| msgid "Invalid value for overage" msgid "Invalid value for this test" msgstr "无效的备损值" -#: stock/models.py:2428 +#: stock/models.py:2542 msgid "Test result" msgstr "" -#: stock/models.py:2435 +#: stock/models.py:2549 msgid "Test output value" msgstr "" -#: stock/models.py:2443 +#: stock/models.py:2557 msgid "Test result attachment" msgstr "" -#: stock/models.py:2447 +#: stock/models.py:2561 msgid "Test notes" msgstr "" -#: stock/models.py:2455 templates/js/translated/stock.js:1548 +#: stock/models.py:2569 templates/js/translated/stock.js:1633 #, fuzzy #| msgid "Destination" msgid "Test station" msgstr "目的地" -#: stock/models.py:2456 +#: stock/models.py:2570 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2462 +#: stock/models.py:2576 msgid "Started" msgstr "" -#: stock/models.py:2463 +#: stock/models.py:2577 #, fuzzy #| msgid "Timestamp of last update" msgid "The timestamp of the test start" msgstr "最后一次更新时间" -#: stock/models.py:2469 +#: stock/models.py:2583 #, fuzzy #| msgid "Danish" msgid "Finished" msgstr "丹麦语" -#: stock/models.py:2470 +#: stock/models.py:2584 #, fuzzy #| msgid "Timestamp of last update" msgid "The timestamp of the test finish" msgstr "最后一次更新时间" -#: stock/serializers.py:75 +#: stock/serializers.py:76 msgid "Generated batch code" msgstr "" -#: stock/serializers.py:84 +#: stock/serializers.py:85 #, fuzzy #| msgid "Delete Build Order" msgid "Select build order" msgstr "删除生产订单" -#: stock/serializers.py:93 +#: stock/serializers.py:94 #, fuzzy #| msgid "Selected stock item not found in BOM" msgid "Select stock item to generate batch code for" msgstr "在BOM中找不到选定的库存项" -#: stock/serializers.py:102 +#: stock/serializers.py:103 #, fuzzy #| msgid "Select location where the completed items will be stored" msgid "Select location to generate batch code for" msgstr "选择已完成项目仓储地点" -#: stock/serializers.py:111 +#: stock/serializers.py:112 #, fuzzy #| msgid "User or group responsible for this order" msgid "Select part to generate batch code for" msgstr "负责此订单的用户或群组" -#: stock/serializers.py:120 +#: stock/serializers.py:121 #, fuzzy #| msgid "Create new purchase order" msgid "Select purchase order" msgstr "新建采购订单" -#: stock/serializers.py:127 +#: stock/serializers.py:128 #, fuzzy #| msgid "Enter quantity for build output" msgid "Enter quantity for batch code" msgstr "输入生产产出数量" -#: stock/serializers.py:150 +#: stock/serializers.py:151 #, fuzzy #| msgid "Assigned serial number" msgid "Generated serial number" msgstr "已分配序列号" -#: stock/serializers.py:159 +#: stock/serializers.py:160 #, fuzzy #| msgid "Trackable parts can have serial numbers specified" msgid "Select part to generate serial number for" msgstr "可追踪商品可以指定序列号" -#: stock/serializers.py:167 +#: stock/serializers.py:168 #, fuzzy #| msgid "Enter serial numbers for new items" msgid "Quantity of serial numbers to generate" msgstr "输入新项目的序列号" -#: stock/serializers.py:229 +#: stock/serializers.py:233 #, fuzzy #| msgid "User or group responsible for this order" msgid "Test template for this result" msgstr "负责此订单的用户或群组" -#: stock/serializers.py:248 +#: stock/serializers.py:254 #, fuzzy #| msgid "Allocation items must be provided" msgid "Template ID or test name must be provided" msgstr "必须提供分配的项" -#: stock/serializers.py:280 +#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:316 +#: stock/serializers.py:323 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/serializers.py:453 +#, fuzzy +#| msgid "Source stock item" +msgid "Parent stock item" +msgstr "源库存项" + +#: stock/serializers.py:472 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:534 +#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: stock/serializers.py:606 +#, fuzzy +#| msgid "Stock Item" +msgid "Tracking Items" +msgstr "库存项" + +#: stock/serializers.py:612 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:631 +#, fuzzy +#| msgid "Part Pricing" +msgid "Minimum Pricing" +msgstr "商品价格" + +#: stock/serializers.py:637 +#, fuzzy +#| msgid "Part Pricing" +msgid "Maximum Pricing" +msgstr "商品价格" + +#: stock/serializers.py:661 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:609 +#: stock/serializers.py:674 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:616 +#: stock/serializers.py:681 msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:627 stock/serializers.py:1329 stock/serializers.py:1585 +#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 msgid "Destination stock location" msgstr "目标库存位置" -#: stock/serializers.py:634 +#: stock/serializers.py:699 msgid "Optional note field" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:709 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:764 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:706 +#: stock/serializers.py:771 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:707 +#: stock/serializers.py:772 #, fuzzy #| msgid "Enter quantity for build output" msgid "Enter the quantity of items to install" msgstr "输入生产产出数量" -#: stock/serializers.py:712 stock/serializers.py:792 stock/serializers.py:888 -#: stock/serializers.py:938 +#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 +#: stock/serializers.py:1033 msgid "Add transaction note (optional)" msgstr "添加交易备注 (可选)" -#: stock/serializers.py:720 +#: stock/serializers.py:785 #, fuzzy #| msgid "Quantity must be a positive number" msgid "Quantity to install must be at least 1" msgstr "数量必须大于0" -#: stock/serializers.py:728 +#: stock/serializers.py:793 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:739 +#: stock/serializers.py:804 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:752 +#: stock/serializers.py:817 #, 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:787 +#: stock/serializers.py:852 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:903 +#, fuzzy +#| msgid "Unsupported file type" +msgid "Unsupported statistic type: " +msgstr "不支持的文件类型" + +#: stock/serializers.py:917 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:835 +#: stock/serializers.py:930 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:947 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:883 +#: stock/serializers.py:978 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:920 +#: stock/serializers.py:1015 #, fuzzy #| msgid "Selected stock item not found in BOM" msgid "Select stock items to change status" msgstr "在BOM中找不到选定的库存项" -#: stock/serializers.py:926 +#: stock/serializers.py:1021 #, fuzzy #| msgid "Stock item created" msgid "No stock items selected" msgstr "库存项已创建" -#: stock/serializers.py:1022 stock/serializers.py:1085 -#: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:220 +#: stock/serializers.py:1117 stock/serializers.py:1194 +#: stock/templates/stock/location.html:162 +#: stock/templates/stock/location.html:219 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1201 +#: stock/serializers.py:1187 templates/js/translated/stock.js:160 +msgid "Parent stock location" +msgstr "" + +#: stock/serializers.py:1298 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1205 +#: stock/serializers.py:1302 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1306 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1233 +#: stock/serializers.py:1330 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1239 +#: stock/serializers.py:1336 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1247 +#: stock/serializers.py:1344 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1257 stock/serializers.py:1511 +#: stock/serializers.py:1354 stock/serializers.py:1608 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1433 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1438 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1342 +#: stock/serializers.py:1439 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1347 +#: stock/serializers.py:1444 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1348 +#: stock/serializers.py:1445 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1358 +#: stock/serializers.py:1455 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1425 +#: stock/serializers.py:1522 #, fuzzy #| msgid "Change" msgid "No Change" msgstr "更改" -#: stock/serializers.py:1454 +#: stock/serializers.py:1551 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1570 #, fuzzy #| msgid "Stock item created" msgid "Stock item status code" msgstr "库存项已创建" -#: stock/serializers.py:1501 +#: stock/serializers.py:1598 msgid "Stock transaction notes" msgstr "" @@ -9989,7 +10961,7 @@ msgstr "隔离" msgid "Legacy stock tracking entry" msgstr "旧库存跟踪条目" -#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +#: stock/status_codes.py:42 templates/js/translated/stock.js:550 msgid "Stock item created" msgstr "库存项已创建" @@ -10047,7 +11019,7 @@ msgstr "从父项拆分" msgid "Split child item" msgstr "拆分子项" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 msgid "Merged stock items" msgstr "合并的库存项目" @@ -10069,7 +11041,7 @@ msgstr "生产订单输出已完成" msgid "Build order output rejected" msgstr "已创建生产订单输出" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 msgid "Consumed by build order" msgstr "被生产订单消耗" @@ -10120,7 +11092,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:276 msgid "Delete Test Data" msgstr "" @@ -10136,15 +11108,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:264 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1701 +#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 msgid "Add Test Result" msgstr "" @@ -10157,8 +11129,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:70 -#: templates/js/translated/filters.js:431 +#: stock/templates/stock/location.html:67 +#: templates/js/translated/filters.js:434 msgid "Printing actions" msgstr "" @@ -10167,17 +11139,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1806 +#: templates/js/translated/stock.js:1891 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1815 +#: templates/js/translated/stock.js:1900 msgid "Remove stock" msgstr "" @@ -10186,12 +11158,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1887 +#: templates/js/translated/stock.js:1972 msgid "Assign to customer" msgstr "" @@ -10232,14 +11204,10 @@ 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 +#: templates/js/translated/build.js:2295 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 "" @@ -10249,7 +11217,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:149 +#: stock/templates/stock/location.html:146 msgid "Read only" msgstr "" @@ -10295,12 +11263,8 @@ msgstr "" 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 +#: templates/js/translated/build.js:2552 msgid "No location set" msgstr "未设置仓储地点" @@ -10317,11 +11281,6 @@ msgstr "" 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" @@ -10332,7 +11291,7 @@ msgid "No stocktake performed" msgstr "" #: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:2037 #, fuzzy #| msgid "Stock Item" msgid "stock item" @@ -10366,7 +11325,7 @@ msgstr "" msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:657 +#: stock/templates/stock/item_base.html:656 msgid "Return to Stock" msgstr "" @@ -10378,90 +11337,90 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:35 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:42 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:60 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:61 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:72 #, fuzzy #| msgid "Print Order Reports" msgid "Print Location Report" msgstr "打印订单报表" -#: stock/templates/stock/location.html:104 +#: stock/templates/stock/location.html:101 msgid "Location actions" msgstr "仓储地操作" -#: stock/templates/stock/location.html:106 +#: stock/templates/stock/location.html:103 msgid "Edit location" msgstr "编辑仓储地" -#: stock/templates/stock/location.html:108 +#: stock/templates/stock/location.html:105 msgid "Delete location" msgstr "删除仓储地" -#: stock/templates/stock/location.html:138 +#: stock/templates/stock/location.html:135 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:144 +#: stock/templates/stock/location.html:141 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:148 +#: stock/templates/stock/location.html:145 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 +#: stock/templates/stock/location.html:173 #, fuzzy #| msgid "Location" msgid "Location Type" msgstr "地点" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:223 msgid "Create new stock location" msgstr "新建仓储地点" -#: stock/templates/stock/location.html:225 +#: stock/templates/stock/location.html:224 msgid "New Location" msgstr "新建仓储地点" -#: stock/templates/stock/location.html:295 -#: templates/js/translated/stock.js:2572 +#: stock/templates/stock/location.html:298 +#: templates/js/translated/stock.js:2657 #, fuzzy #| msgid "Stock Location" msgid "stock location" msgstr "仓储地点" -#: stock/templates/stock/location.html:317 +#: stock/templates/stock/location.html:320 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:390 +#: stock/templates/stock/location.html:393 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:401 +#: stock/templates/stock/location.html:404 msgid "Link Barcode to Stock Location" msgstr "" @@ -10477,10 +11436,6 @@ msgstr "" 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 "" @@ -10731,11 +11686,11 @@ msgstr "" msgid "Part Settings" msgstr "商品设置" -#: templates/InvenTree/settings/part.html:43 +#: templates/InvenTree/settings/part.html:44 msgid "Part Import" msgstr "商品导入" -#: templates/InvenTree/settings/part.html:47 +#: templates/InvenTree/settings/part.html:48 msgid "Import Part" msgstr "导入商品" @@ -10847,7 +11802,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/table_filters.js:510 msgid "Builtin" msgstr "" @@ -10857,7 +11812,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:514 msgid "Sample" msgstr "" @@ -10968,9 +11923,9 @@ 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:393 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:411 +#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:252 users/models.py:406 msgid "Delete" msgstr "删除" @@ -10999,7 +11954,7 @@ msgid "No project codes found" msgstr "无指定参数" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2228 +#: templates/js/translated/build.js:2400 msgid "group" msgstr "" @@ -11022,12 +11977,12 @@ msgid "No category parameter templates found" msgstr "未找到类别参数模板" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1646 +#: templates/js/translated/part.js:1649 msgid "Edit Template" msgstr "编辑模板" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1647 +#: templates/js/translated/part.js:1650 msgid "Delete Template" msgstr "删除模板" @@ -11037,50 +11992,50 @@ msgstr "删除模板" msgid "Edit Category Parameter Template" msgstr "删除类别参数模板" -#: templates/InvenTree/settings/settings_staff_js.html:353 +#: templates/InvenTree/settings/settings_staff_js.html:352 msgid "Delete Category Parameter Template" msgstr "删除类别参数模板" -#: templates/InvenTree/settings/settings_staff_js.html:388 +#: templates/InvenTree/settings/settings_staff_js.html:387 msgid "Create Category Parameter Template" msgstr "创建类别参数模板" -#: templates/InvenTree/settings/settings_staff_js.html:418 +#: templates/InvenTree/settings/settings_staff_js.html:416 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:440 +#: templates/InvenTree/settings/settings_staff_js.html:439 #, fuzzy #| msgid "No stock location set" msgid "No stock location types found" msgstr "未设置仓储地点" -#: templates/InvenTree/settings/settings_staff_js.html:461 +#: templates/InvenTree/settings/settings_staff_js.html:464 #, fuzzy #| msgid "Location actions" msgid "Location count" msgstr "仓储地操作" -#: templates/InvenTree/settings/settings_staff_js.html:466 -#: templates/InvenTree/settings/settings_staff_js.html:480 +#: templates/InvenTree/settings/settings_staff_js.html:469 +#: templates/InvenTree/settings/settings_staff_js.html:483 #, fuzzy #| msgid "Edit location" msgid "Edit Location Type" msgstr "编辑仓储地" -#: templates/InvenTree/settings/settings_staff_js.html:467 +#: templates/InvenTree/settings/settings_staff_js.html:470 #, fuzzy #| msgid "Delete location" msgid "Delete Location type" msgstr "删除仓储地" -#: templates/InvenTree/settings/settings_staff_js.html:490 +#: templates/InvenTree/settings/settings_staff_js.html:493 #, fuzzy #| msgid "Delete location" msgid "Delete Location Type" msgstr "删除仓储地" -#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/settings_staff_js.html:503 #: templates/InvenTree/settings/stock.html:38 #, fuzzy #| msgid "New Location" @@ -11107,7 +12062,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2200 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" @@ -11160,18 +12115,6 @@ msgstr "帐户设置" 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 "" @@ -11439,7 +12382,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:589 +#: templates/js/translated/helpers.js:592 msgid "copy to clipboard" msgstr "" @@ -11463,7 +12406,7 @@ msgstr "" 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 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 msgid "Confirm" msgstr "确认" @@ -11696,7 +12639,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:2556 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 msgid "Required Quantity" msgstr "" @@ -11710,15 +12653,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3219 +#: templates/js/translated/part.js:3234 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 msgid "No response from the InvenTree server" msgstr "" @@ -11730,27 +12673,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 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 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 msgid "The requested resource could not be located on the server" msgstr "" @@ -11762,11 +12705,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11802,29 +12745,29 @@ msgstr "" msgid "Delete attachments" msgstr "删除参数" -#: templates/js/translated/attachment.js:253 +#: templates/js/translated/attachment.js:260 #, fuzzy #| msgid "Attachments" msgid "Attachment actions" msgstr "附件" -#: templates/js/translated/attachment.js:275 +#: templates/js/translated/attachment.js:294 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:315 +#: templates/js/translated/attachment.js:334 msgid "Edit Attachment" msgstr "编辑附件" -#: templates/js/translated/attachment.js:346 +#: templates/js/translated/attachment.js:365 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:366 +#: templates/js/translated/attachment.js:385 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:374 +#: templates/js/translated/attachment.js:393 msgid "Delete attachment" msgstr "" @@ -11857,85 +12800,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:372 +#: templates/js/translated/barcode.js:403 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +#: templates/js/translated/barcode.js:451 templates/navbar.html:114 msgid "Scan Barcode" msgstr "扫描条形码" -#: templates/js/translated/barcode.js:458 +#: templates/js/translated/barcode.js:489 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:498 +#: templates/js/translated/barcode.js:529 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:504 +#: templates/js/translated/barcode.js:535 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:610 +#: templates/js/translated/barcode.js:641 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:612 +#: templates/js/translated/barcode.js:643 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:615 -#: templates/js/translated/barcode.js:812 +#: templates/js/translated/barcode.js:646 +#: templates/js/translated/barcode.js:843 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:678 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:687 +#: templates/js/translated/barcode.js:718 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:691 +#: templates/js/translated/barcode.js:722 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:698 +#: templates/js/translated/barcode.js:729 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:707 +#: templates/js/translated/barcode.js:738 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:726 +#: templates/js/translated/barcode.js:757 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:728 +#: templates/js/translated/barcode.js:759 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:762 +#: templates/js/translated/barcode.js:793 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:806 +#: templates/js/translated/barcode.js:837 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:875 -#: templates/js/translated/barcode.js:884 +#: templates/js/translated/barcode.js:906 +#: templates/js/translated/barcode.js:915 msgid "Barcode does not match a valid location" msgstr "" @@ -11952,8 +12895,8 @@ 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/modals.js:75 templates/js/translated/modals.js:629 +#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 #: 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" @@ -12073,7 +13016,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 msgid "Variant stock allowed" msgstr "" @@ -12093,32 +13036,32 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 #, fuzzy #| msgid "External Link" msgid "External stock" msgstr "外部链接" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 #: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 -#: templates/js/translated/part.js:1257 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 +#: templates/js/translated/part.js:1260 #: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 msgid "Consumable item" msgstr "" @@ -12150,7 +13093,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 msgid "Required Part" msgstr "" @@ -12158,130 +13101,130 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:142 +#: templates/js/translated/build.js:143 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:190 +#: templates/js/translated/build.js:191 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:222 +#: templates/js/translated/build.js:223 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:231 +#: templates/js/translated/build.js:232 msgid "Are you sure you wish to cancel this build?" msgstr "是否确定取消生产?" -#: templates/js/translated/build.js:237 +#: templates/js/translated/build.js:238 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:244 +#: templates/js/translated/build.js:245 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:296 +#: templates/js/translated/build.js:297 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:304 +#: templates/js/translated/build.js:305 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:309 +#: templates/js/translated/build.js:310 msgid "Build Order is incomplete" msgstr "生产订单未完成" -#: templates/js/translated/build.js:327 +#: templates/js/translated/build.js:328 msgid "Complete Build Order" msgstr "生产订单完成" -#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 -#: templates/js/translated/stock.js:294 +#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 +#: templates/js/translated/stock.js:301 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 -#: templates/js/translated/stock.js:296 +#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:303 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:379 +#: templates/js/translated/build.js:380 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:381 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:388 +#: templates/js/translated/build.js:389 msgid "Trackable parts can have serial numbers specified" msgstr "可追踪商品可以指定序列号" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:390 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Create Build Output" msgstr "创建创建生产产出" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:428 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:435 +#: templates/js/translated/build.js:436 #, fuzzy #| msgid "Manually allocate stock to build" msgid "Deallocate stock from build output" msgstr "手动分配存货进行生成" -#: templates/js/translated/build.js:444 +#: templates/js/translated/build.js:445 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:452 +#: templates/js/translated/build.js:453 #, fuzzy #| msgid "Build output" msgid "Scrap build output" msgstr "生产产出" -#: templates/js/translated/build.js:459 +#: templates/js/translated/build.js:460 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:479 +#: templates/js/translated/build.js:480 #, fuzzy #| msgid "Are you sure you wish to cancel this build?" msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "是否确定取消生产?" -#: templates/js/translated/build.js:497 +#: templates/js/translated/build.js:498 #, fuzzy #| msgid "Select Stock Items" msgid "Deallocate Stock Items" msgstr "选择库存项" -#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:836 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:838 +#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:837 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:598 +#: templates/js/translated/build.js:599 #, fuzzy #| msgid "Delete any build outputs which have not been completed" 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 +#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:859 msgid "Output" msgstr "" @@ -12311,263 +13254,309 @@ msgstr "库存物品分配过度!" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:762 +#: templates/js/translated/build.js:761 #, fuzzy #| msgid "Create Build Output" msgid "Scrap Build Outputs" msgstr "创建创建生产产出" -#: templates/js/translated/build.js:852 +#: templates/js/translated/build.js:851 #, fuzzy #| msgid "All selected supplier parts will be deleted" msgid "Selected build outputs will be deleted" msgstr "删除所有选定的供应商商品" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:853 #, fuzzy #| msgid "Build output is already completed" msgid "Build output data will be permanently deleted" msgstr "生产产出已完成" -#: templates/js/translated/build.js:855 +#: templates/js/translated/build.js:854 #, fuzzy #| msgid "All selected supplier parts will be deleted" msgid "Allocated stock items will be returned to stock" msgstr "删除所有选定的供应商商品" -#: templates/js/translated/build.js:873 +#: templates/js/translated/build.js:872 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:960 +#: templates/js/translated/build.js:959 +#, fuzzy +#| msgid "Delete location" +msgid "Delete allocations" +msgstr "删除仓储地" + +#: templates/js/translated/build.js:966 +#, fuzzy +#| msgid "Delete Stock Location" +msgid "Delete Stock Allocations" +msgstr "删除仓储地点" + +#: templates/js/translated/build.js:989 +#, fuzzy +#| msgid "Unallocate stock" +msgid "No allocated stock" +msgstr "未分配库存" + +#: templates/js/translated/build.js:1045 +#, fuzzy +#| msgid "Stock Item" +msgid "Stock item" +msgstr "库存项" + +#: templates/js/translated/build.js:1070 +#, fuzzy +#| msgid "Edit location" +msgid "Edit build allocation" +msgstr "编辑仓储地" + +#: templates/js/translated/build.js:1071 +#, fuzzy +#| msgid "Delete location" +msgid "Delete build allocation" +msgstr "删除仓储地" + +#: templates/js/translated/build.js:1089 +#, fuzzy +#| msgid "Edit location" +msgid "Edit Build Allocation" +msgstr "编辑仓储地" + +#: templates/js/translated/build.js:1102 +#, fuzzy +#| msgid "Delete location" +msgid "Delete Build Allocation" +msgstr "删除仓储地" + +#: templates/js/translated/build.js:1133 msgid "No build order allocations found" msgstr "" -#: 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:1005 +#: templates/js/translated/build.js:1178 msgid "Location not specified" msgstr "未指定仓储地点" -#: templates/js/translated/build.js:1027 +#: templates/js/translated/build.js:1200 msgid "Complete outputs" msgstr "已完成输出" -#: templates/js/translated/build.js:1045 +#: templates/js/translated/build.js:1218 #, fuzzy #| msgid "Complete outputs" msgid "Scrap outputs" msgstr "已完成输出" -#: templates/js/translated/build.js:1063 +#: templates/js/translated/build.js:1236 msgid "Delete outputs" msgstr "删除输出" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1289 #, fuzzy #| msgid "Build output" msgid "build output" msgstr "生产产出" -#: templates/js/translated/build.js:1117 +#: templates/js/translated/build.js:1290 #, fuzzy #| msgid "Build output" msgid "build outputs" msgstr "生产产出" -#: templates/js/translated/build.js:1121 +#: templates/js/translated/build.js:1294 #, fuzzy #| msgid "Build actions" msgid "Build output actions" msgstr "生产操作" -#: templates/js/translated/build.js:1297 +#: templates/js/translated/build.js:1470 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1390 +#: templates/js/translated/build.js:1563 #, fuzzy #| msgid "Allocated Parts" msgid "Allocated Lines" msgstr "已分配的部件" -#: templates/js/translated/build.js:1404 +#: templates/js/translated/build.js:1577 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1749 #: 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/build.js:1750 #: 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/build.js:1813 #: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1717 +#: templates/js/translated/build.js:1890 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1718 +#: templates/js/translated/build.js:1891 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1732 +#: templates/js/translated/build.js:1905 #: 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 +#: templates/js/translated/build.js:1933 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1771 +#: templates/js/translated/build.js:1944 #: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1844 +#: templates/js/translated/build.js:2017 #: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:2114 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:2115 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1944 +#: templates/js/translated/build.js:2117 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1945 +#: templates/js/translated/build.js:2118 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1946 +#: templates/js/translated/build.js:2119 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 +#: templates/js/translated/build.js:2149 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2082 +#: templates/js/translated/build.js:2254 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:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 +#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 +#: templates/js/translated/part.js:2319 templates/js/translated/part.js:2758 +#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2131 +#: templates/js/translated/build.js:2303 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 msgid "No user information" msgstr "没有用户信息" -#: templates/js/translated/build.js:2389 +#: templates/js/translated/build.js:2561 #: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2390 +#: templates/js/translated/build.js:2562 #: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2577 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2417 +#: templates/js/translated/build.js:2589 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2455 +#: templates/js/translated/build.js:2628 #, fuzzy #| msgid "Build actions" msgid "build line" msgstr "生产操作" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2629 #, fuzzy #| msgid "Build actions" msgid "build lines" msgstr "生产操作" -#: templates/js/translated/build.js:2474 +#: templates/js/translated/build.js:2647 #, fuzzy #| msgid "Subcategories" msgid "No build lines found" msgstr "子类别" -#: templates/js/translated/build.js:2504 templates/js/translated/part.js:791 -#: templates/js/translated/part.js:1203 +#: templates/js/translated/build.js:2677 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1206 msgid "Trackable part" msgstr "可追溯商品" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2720 +msgid "Gets Inherited" +msgstr "" + +#: templates/js/translated/build.js:2730 #, fuzzy #| msgid "Quantity" msgid "Unit Quantity" msgstr "数量" -#: templates/js/translated/build.js:2591 +#: templates/js/translated/build.js:2782 #: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2646 +#: templates/js/translated/build.js:2837 #, fuzzy #| msgid "Minimum Stock" msgid "Consumable Item" msgstr "最低库存" -#: templates/js/translated/build.js:2653 +#: templates/js/translated/build.js:2844 #, fuzzy #| msgid "Stock Item" msgid "Tracked item" msgstr "库存项" -#: templates/js/translated/build.js:2654 +#: templates/js/translated/build.js:2845 msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2662 +#: templates/js/translated/build.js:2853 #: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2671 +#: templates/js/translated/build.js:2862 #: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2675 +#: templates/js/translated/build.js:2866 #, fuzzy #| msgid "Confirm stock allocation" msgid "Remove stock allocation" @@ -12748,7 +13737,7 @@ msgid "Delete Parameters" msgstr "删除参数" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2245 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2247 msgid "Order parts" msgstr "订购商品" @@ -12767,34 +13756,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:799 -#: templates/js/translated/part.js:1211 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1214 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:803 -#: templates/js/translated/part.js:1215 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1218 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1465 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1468 msgid "No parameters found" msgstr "无指定参数" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1528 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1531 msgid "Edit parameter" msgstr "编辑参数" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1529 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1532 msgid "Delete parameter" msgstr "删除参数" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1434 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1437 msgid "Edit Parameter" msgstr "编辑参数" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1550 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1553 msgid "Delete Parameter" msgstr "删除参数" @@ -12850,123 +13839,123 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:667 +#: templates/js/translated/filters.js:189 +#: templates/js/translated/filters.js:670 msgid "true" msgstr "" -#: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:668 +#: templates/js/translated/filters.js:193 +#: templates/js/translated/filters.js:671 msgid "false" msgstr "" -#: templates/js/translated/filters.js:214 +#: templates/js/translated/filters.js:217 msgid "Select filter" msgstr "选择筛选项" -#: templates/js/translated/filters.js:437 +#: templates/js/translated/filters.js:440 msgid "Print Labels" msgstr "打印标签" -#: templates/js/translated/filters.js:441 +#: templates/js/translated/filters.js:444 #, fuzzy #| msgid "Print Order Reports" msgid "Print Reports" msgstr "打印订单报表" -#: templates/js/translated/filters.js:453 +#: templates/js/translated/filters.js:456 #, fuzzy #| msgid "Download Image" msgid "Download table data" msgstr "下载图片" -#: templates/js/translated/filters.js:460 +#: templates/js/translated/filters.js:463 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:469 +#: templates/js/translated/filters.js:472 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:477 +#: templates/js/translated/filters.js:480 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:577 +#: templates/js/translated/filters.js:580 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 +#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 +#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:380 +#: templates/js/translated/forms.js:381 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:395 +#: templates/js/translated/forms.js:396 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:409 +#: templates/js/translated/forms.js:410 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:423 +#: templates/js/translated/forms.js:424 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:800 +#: templates/js/translated/forms.js:801 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:903 +#: templates/js/translated/forms.js:904 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/js/translated/forms.js:1478 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1975 +#: templates/js/translated/forms.js:2008 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2499 +#: templates/js/translated/forms.js:2532 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3101 +#: templates/js/translated/forms.js:3134 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3113 +#: templates/js/translated/forms.js:3146 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:77 +#: templates/js/translated/helpers.js:80 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:83 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:93 +#: templates/js/translated/helpers.js:96 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:94 +#: templates/js/translated/helpers.js:97 msgid "False" msgstr "" @@ -12976,78 +13965,78 @@ msgstr "" msgid "No parts required for builds" msgstr "生产订单所需的库存" -#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 #, fuzzy #| msgid "Select Stock Items" msgid "Select Items" msgstr "选择库存项" -#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:49 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:150 +#: templates/js/translated/label.js:143 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:683 +#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 +#: templates/js/translated/modals.js:688 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/js/translated/modals.js:64 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:156 +#: templates/js/translated/modals.js:157 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:445 +#: templates/js/translated/modals.js:446 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:596 +#: templates/js/translated/modals.js:597 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:682 +#: templates/js/translated/modals.js:687 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:740 +#: templates/js/translated/modals.js:745 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1011 +#: templates/js/translated/modals.js:1016 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1023 +#: templates/js/translated/modals.js:1028 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1120 +#: templates/js/translated/modals.js:1125 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1135 +#: templates/js/translated/modals.js:1140 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1136 +#: templates/js/translated/modals.js:1141 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1159 +#: templates/js/translated/modals.js:1164 msgid "Error requesting form data" msgstr "" @@ -13057,7 +14046,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1605 +#: templates/js/translated/part.js:1608 msgid "ID" msgstr "" @@ -13085,410 +14074,422 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:89 +#: templates/js/translated/order.js:48 +#, fuzzy +#| msgid "Build Order" +msgid "Hold Order" +msgstr "生产订单" + +#: templates/js/translated/order.js:53 +#, fuzzy +#| msgid "Are you sure you wish to cancel this build?" +msgid "Are you sure you wish to place this order on hold?" +msgstr "是否确定取消生产?" + +#: templates/js/translated/order.js:114 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:126 +#: templates/js/translated/order.js:151 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:241 +#: templates/js/translated/order.js:266 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:255 +#: templates/js/translated/order.js:280 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:268 +#: templates/js/translated/order.js:293 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1990 +#: templates/js/translated/order.js:306 +#: templates/js/translated/purchase_order.js:2060 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:369 +#: templates/js/translated/order.js:394 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:370 +#: templates/js/translated/order.js:395 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:374 +#: templates/js/translated/order.js:399 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:90 +#: templates/js/translated/part.js:91 msgid "Part Attributes" msgstr "商品属性" -#: templates/js/translated/part.js:94 +#: templates/js/translated/part.js:95 msgid "Part Creation Options" msgstr "商品创建选项" -#: templates/js/translated/part.js:98 +#: templates/js/translated/part.js:99 msgid "Part Duplication Options" msgstr "商品重复选项" -#: templates/js/translated/part.js:121 +#: templates/js/translated/part.js:122 msgid "Add Part Category" msgstr "增加商品类别" -#: templates/js/translated/part.js:309 -msgid "Parent part category" -msgstr "" - -#: templates/js/translated/part.js:333 templates/js/translated/stock.js:175 +#: templates/js/translated/part.js:331 templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:182 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:353 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "创建商品类别" -#: templates/js/translated/part.js:356 +#: templates/js/translated/part.js:355 #, fuzzy #| msgid "Create new part category" msgid "Create new category after this one" msgstr "新建商品类别" -#: templates/js/translated/part.js:357 +#: templates/js/translated/part.js:356 #, fuzzy #| msgid "Part category" msgid "Part category created" msgstr "商品类别" -#: templates/js/translated/part.js:371 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "编辑商品类别" -#: templates/js/translated/part.js:384 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:389 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:398 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "删除商品类别" -#: templates/js/translated/part.js:402 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:407 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:431 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "创建商品" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:434 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "编辑商品" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:532 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:547 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:558 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:594 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:601 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:620 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:630 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:633 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:658 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:686 -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:766 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:689 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:749 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:772 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:795 templates/js/translated/part.js:1207 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1210 msgid "Virtual part" msgstr "虚拟商品" -#: templates/js/translated/part.js:807 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:811 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "可销售商品" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:890 +#: templates/js/translated/part.js:893 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:898 +#: templates/js/translated/part.js:901 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:902 +#: templates/js/translated/part.js:905 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1051 +#: templates/js/translated/part.js:1054 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1109 templates/js/translated/part.js:1145 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1148 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1113 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1116 templates/js/translated/part.js:1158 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1282 +#: templates/js/translated/part.js:1285 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1600 +#: templates/js/translated/part.js:1603 msgid "No part parameter templates found" msgstr "未找到商品参数模板" -#: templates/js/translated/part.js:1663 +#: templates/js/translated/part.js:1666 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1675 +#: templates/js/translated/part.js:1678 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1683 +#: templates/js/translated/part.js:1686 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1717 -#: templates/js/translated/purchase_order.js:1654 +#: templates/js/translated/part.js:1720 +#: templates/js/translated/purchase_order.js:1724 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1861 -#: templates/js/translated/purchase_order.js:2153 -#: templates/js/translated/return_order.js:755 +#: templates/js/translated/part.js:1864 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:754 #: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1907 -#: templates/js/translated/purchase_order.js:2220 +#: templates/js/translated/part.js:1910 +#: templates/js/translated/purchase_order.js:2290 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1970 +#: templates/js/translated/part.js:1973 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1992 +#: templates/js/translated/part.js:1995 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2080 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2083 templates/js/translated/part.js:2522 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2201 +#: templates/js/translated/part.js:2204 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2206 +#: templates/js/translated/part.js:2209 msgid "Set Part Category" msgstr "设置商品类别" -#: templates/js/translated/part.js:2236 +#: templates/js/translated/part.js:2238 msgid "Set category" msgstr "设置类别" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2290 #, fuzzy #| msgid "Edit part" msgid "part" msgstr "编辑商品" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2291 #, fuzzy #| msgid "Parts" msgid "parts" msgstr "商品" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2387 msgid "No category" msgstr "没有分类" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/part.js:2547 templates/js/translated/part.js:2677 +#: templates/js/translated/stock.js:2754 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2563 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2661 #, 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:2697 templates/js/translated/stock.js:2774 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2777 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2792 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2865 +#: templates/js/translated/part.js:2880 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2887 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2902 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1456 -msgid "Edit test result" -msgstr "" +#: templates/js/translated/part.js:2952 +#, fuzzy +#| msgid "Edit Template" +msgid "Edit test template" +msgstr "编辑模板" -#: templates/js/translated/part.js:2938 templates/js/translated/stock.js:1457 -#: templates/js/translated/stock.js:1731 -msgid "Delete test result" -msgstr "" +#: templates/js/translated/part.js:2953 +#, fuzzy +#| msgid "Delete Template" +msgid "Delete test template" +msgstr "删除模板" -#: templates/js/translated/part.js:2942 +#: templates/js/translated/part.js:2957 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2958 +#: templates/js/translated/part.js:2973 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2972 +#: templates/js/translated/part.js:2987 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3051 templates/js/translated/part.js:3052 +#: templates/js/translated/part.js:3066 templates/js/translated/part.js:3067 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3054 +#: templates/js/translated/part.js:3069 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3060 +#: templates/js/translated/part.js:3075 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3110 +#: templates/js/translated/part.js:3125 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3116 +#: templates/js/translated/part.js:3131 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3212 +#: templates/js/translated/part.js:3227 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3228 +#: templates/js/translated/part.js:3243 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3273 +#: templates/js/translated/part.js:3288 msgid "Minimum Stock Level" msgstr "" @@ -13717,125 +14718,144 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1191 +#: templates/js/translated/purchase_order.js:1170 +#: templates/js/translated/stock.js:1215 +#, fuzzy +#| msgid "Select Stock Items" +msgid "Specify packaging for incoming stock items" +msgstr "选择库存项" + +#: templates/js/translated/purchase_order.js:1223 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1205 +#: templates/js/translated/purchase_order.js:1237 #, fuzzy #| msgid "Barcode" msgid "Add barcode" msgstr "条形码" -#: templates/js/translated/purchase_order.js:1206 +#: templates/js/translated/purchase_order.js:1238 #, fuzzy #| msgid "Remove row" msgid "Remove barcode" msgstr "移除行" -#: templates/js/translated/purchase_order.js:1209 +#: templates/js/translated/purchase_order.js:1241 #, fuzzy #| msgid "Edit location" msgid "Specify location" msgstr "编辑仓储地" -#: templates/js/translated/purchase_order.js:1217 +#: templates/js/translated/purchase_order.js:1249 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1228 +#: templates/js/translated/purchase_order.js:1259 +#, fuzzy +#| msgid "Edit location" +msgid "Specify packaging" +msgstr "编辑仓储地" + +#: templates/js/translated/purchase_order.js:1270 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1280 +#: templates/js/translated/purchase_order.js:1281 +#, fuzzy +#| msgid "Contact" +msgid "Add note" +msgstr "联系人" + +#: templates/js/translated/purchase_order.js:1338 #, fuzzy #| msgid "Serial Numbers" msgid "Serials" msgstr "序列号" -#: templates/js/translated/purchase_order.js:1305 +#: templates/js/translated/purchase_order.js:1368 msgid "Order Code" msgstr "订单编码" -#: templates/js/translated/purchase_order.js:1307 +#: templates/js/translated/purchase_order.js:1370 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/purchase_order.js:1395 +#: templates/js/translated/return_order.js:559 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1334 +#: templates/js/translated/purchase_order.js:1396 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1402 +#: templates/js/translated/purchase_order.js:1464 #, fuzzy #| msgid "Scan Barcode" msgid "Scan Item Barcode" msgstr "扫描条形码" -#: templates/js/translated/purchase_order.js:1403 +#: templates/js/translated/purchase_order.js:1465 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1417 +#: templates/js/translated/purchase_order.js:1479 #, fuzzy #| msgid "Enter barcode data" msgid "Invalid barcode data" msgstr "输入条形码数据" -#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/purchase_order.js:1751 #: 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 +#: templates/js/translated/purchase_order.js:1913 #, fuzzy #| msgid "All selected supplier parts will be deleted" msgid "All selected Line items will be deleted" msgstr "删除所有选定的供应商商品" -#: templates/js/translated/purchase_order.js:1861 +#: templates/js/translated/purchase_order.js:1931 #, fuzzy #| msgid "Allocate selected items" msgid "Delete selected Line items?" msgstr "分配选定项目" -#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/purchase_order.js:1986 #: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:2001 #: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:668 +#: templates/js/translated/return_order.js:667 #: 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/purchase_order.js:2012 +#: templates/js/translated/return_order.js:680 #: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/purchase_order.js:2294 #: 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/purchase_order.js:2295 +#: templates/js/translated/return_order.js:799 #: 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/purchase_order.js:2296 +#: templates/js/translated/return_order.js:803 #: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" @@ -13906,16 +14926,16 @@ msgstr "无指定参数" msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:692 +#: templates/js/translated/return_order.js:691 #: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:797 +#: templates/js/translated/return_order.js:796 msgid "Mark item as received" msgstr "" @@ -14080,7 +15100,7 @@ msgstr "" #: templates/js/translated/sales_order.js:1659 #: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1776 +#: templates/js/translated/stock.js:1861 msgid "Shipped to customer" msgstr "" @@ -14138,537 +15158,557 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:98 +#: templates/js/translated/stock.js:106 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:129 +#: templates/js/translated/stock.js:137 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 +#: templates/js/translated/stock.js:173 #, fuzzy #| msgid "Location" msgid "Add Location type" msgstr "地点" -#: templates/js/translated/stock.js:202 +#: templates/js/translated/stock.js:209 msgid "Edit Stock Location" msgstr "编辑仓储地点" -#: templates/js/translated/stock.js:217 +#: templates/js/translated/stock.js:224 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:219 +#: templates/js/translated/stock.js:226 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:227 #, fuzzy #| msgid "Stock item created" msgid "Stock location created" msgstr "库存项已创建" -#: templates/js/translated/stock.js:234 +#: templates/js/translated/stock.js:241 msgid "Are you sure you want to delete this stock location?" msgstr "确实要删除此仓储地点吗?" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:248 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:250 +#: templates/js/translated/stock.js:257 msgid "Delete Stock Location" msgstr "删除仓储地点" -#: templates/js/translated/stock.js:254 +#: templates/js/translated/stock.js:261 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:259 +#: templates/js/translated/stock.js:266 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:313 +#: templates/js/translated/stock.js:320 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:349 +#: templates/js/translated/stock.js:356 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:362 +#: templates/js/translated/stock.js:368 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:374 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:439 +#: templates/js/translated/stock.js:445 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:459 +#: templates/js/translated/stock.js:465 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:475 +#: templates/js/translated/stock.js:481 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:486 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:501 +#: templates/js/translated/stock.js:507 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:543 +#: templates/js/translated/stock.js:549 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:561 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:574 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:593 +#: templates/js/translated/stock.js:599 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:614 +#: templates/js/translated/stock.js:620 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:634 +#: templates/js/translated/stock.js:640 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:643 +#: templates/js/translated/stock.js:649 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:751 +#: templates/js/translated/stock.js:757 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:752 +#: templates/js/translated/stock.js:758 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:829 +#: templates/js/translated/stock.js:835 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:830 +#: templates/js/translated/stock.js:836 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:832 +#: templates/js/translated/stock.js:838 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:833 +#: templates/js/translated/stock.js:839 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:928 +#: templates/js/translated/stock.js:933 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:929 +#: templates/js/translated/stock.js:934 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1024 +#: templates/js/translated/stock.js:1031 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1025 +#: templates/js/translated/stock.js:1032 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1038 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1039 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1036 +#: templates/js/translated/stock.js:1043 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1037 +#: templates/js/translated/stock.js:1044 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1041 +#: templates/js/translated/stock.js:1048 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:401 +#: templates/js/translated/stock.js:1049 users/models.py:396 msgid "Add" msgstr "添加" -#: templates/js/translated/stock.js:1046 +#: templates/js/translated/stock.js:1053 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1146 +#: templates/js/translated/stock.js:1152 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1168 +#, fuzzy +#| msgid "Barcode" +msgid "Adjust batch code" +msgstr "条形码" + +#: templates/js/translated/stock.js:1178 +#, fuzzy +#| msgid "Part packaging" +msgid "Adjust packaging" +msgstr "商品打包" + +#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 msgid "Select Stock Items" msgstr "选择库存项" -#: templates/js/translated/stock.js:1181 +#: templates/js/translated/stock.js:1257 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1227 +#: templates/js/translated/stock.js:1303 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1363 +#: templates/js/translated/stock.js:1448 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1365 +#: templates/js/translated/stock.js:1450 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1370 +#: templates/js/translated/stock.js:1455 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1535 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1453 +#: templates/js/translated/stock.js:1538 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1476 +#: templates/js/translated/stock.js:1541 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/stock.js:1561 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1540 +#: templates/js/translated/stock.js:1625 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1553 +#: templates/js/translated/stock.js:1638 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1562 +#: templates/js/translated/stock.js:1647 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1716 +#: templates/js/translated/stock.js:1801 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1736 +#: templates/js/translated/stock.js:1821 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1768 +#: templates/js/translated/stock.js:1853 msgid "In production" msgstr "正在生产" -#: templates/js/translated/stock.js:1772 +#: templates/js/translated/stock.js:1857 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1780 +#: templates/js/translated/stock.js:1865 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1786 +#: templates/js/translated/stock.js:1871 msgid "No stock location set" msgstr "未设置仓储地点" -#: templates/js/translated/stock.js:1842 +#: templates/js/translated/stock.js:1927 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1851 +#: templates/js/translated/stock.js:1936 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1985 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/stock.js:2038 #, fuzzy #| msgid "Stock Items" msgid "stock items" msgstr "库存项" -#: templates/js/translated/stock.js:1958 +#: templates/js/translated/stock.js:2043 #, fuzzy #| msgid "Stock Location" msgid "Scan to location" msgstr "仓储地点" -#: templates/js/translated/stock.js:1969 +#: templates/js/translated/stock.js:2054 #, fuzzy #| msgid "Stock Locations" msgid "Stock Actions" msgstr "仓储地点" -#: templates/js/translated/stock.js:2013 +#: templates/js/translated/stock.js:2098 #, fuzzy #| msgid "Installed into assembly" msgid "Load installed items" msgstr "安装到组装中" -#: templates/js/translated/stock.js:2091 +#: templates/js/translated/stock.js:2176 msgid "Stock item is in production" msgstr "库存品正在生产" -#: templates/js/translated/stock.js:2096 +#: templates/js/translated/stock.js:2181 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2099 +#: templates/js/translated/stock.js:2184 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/stock.js:2187 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2104 +#: templates/js/translated/stock.js:2189 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2106 +#: templates/js/translated/stock.js:2191 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2109 +#: templates/js/translated/stock.js:2194 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2111 +#: templates/js/translated/stock.js:2196 #, 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:2115 +#: templates/js/translated/stock.js:2200 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2117 +#: templates/js/translated/stock.js:2202 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2122 +#: templates/js/translated/stock.js:2207 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2124 +#: templates/js/translated/stock.js:2209 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2126 +#: templates/js/translated/stock.js:2211 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2130 +#: templates/js/translated/stock.js:2215 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2295 +#: templates/js/translated/stock.js:2380 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2342 +#: templates/js/translated/stock.js:2427 #, fuzzy #| msgid "Stock Source" msgid "Stock Value" msgstr "库存来源" -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:2555 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2573 +#: templates/js/translated/stock.js:2658 #, fuzzy #| msgid "Stock Locations" msgid "stock locations" msgstr "仓储地点" -#: templates/js/translated/stock.js:2728 +#: templates/js/translated/stock.js:2813 #, fuzzy #| msgid "Stock Locations" msgid "Load Sublocations" msgstr "仓储地点" -#: templates/js/translated/stock.js:2846 +#: templates/js/translated/stock.js:2930 msgid "Details" msgstr "详情" -#: templates/js/translated/stock.js:2850 +#: templates/js/translated/stock.js:2934 #, fuzzy #| msgid "Change" msgid "No changes" msgstr "更改" -#: templates/js/translated/stock.js:2862 +#: templates/js/translated/stock.js:2946 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2884 +#: templates/js/translated/stock.js:2968 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2901 +#: templates/js/translated/stock.js:2985 #, fuzzy #| msgid "Sales Order Settings" msgid "Build order no longer exists" msgstr "销售订单设置" -#: templates/js/translated/stock.js:2916 +#: templates/js/translated/stock.js:3000 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2933 +#: templates/js/translated/stock.js:3017 #, fuzzy #| msgid "Sales Order Settings" msgid "Sales Order no longer exists" msgstr "销售订单设置" -#: templates/js/translated/stock.js:2950 +#: templates/js/translated/stock.js:3034 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2969 +#: templates/js/translated/stock.js:3053 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2987 +#: templates/js/translated/stock.js:3071 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3005 +#: templates/js/translated/stock.js:3089 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3013 +#: templates/js/translated/stock.js:3097 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3085 +#: templates/js/translated/stock.js:3169 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3197 +#: templates/js/translated/stock.js:3280 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3218 +#: templates/js/translated/stock.js:3301 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3219 +#: templates/js/translated/stock.js:3302 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3221 +#: templates/js/translated/stock.js:3304 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3222 +#: templates/js/translated/stock.js:3305 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3223 +#: templates/js/translated/stock.js:3306 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3224 +#: templates/js/translated/stock.js:3307 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3237 +#: templates/js/translated/stock.js:3320 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3300 +#: templates/js/translated/stock.js:3383 #, fuzzy #| msgid "Select Stock Items" msgid "Select one or more stock items" msgstr "选择库存项" -#: templates/js/translated/stock.js:3313 +#: templates/js/translated/stock.js:3396 #, fuzzy #| msgid "Select Stock Items" msgid "Selected stock items" msgstr "选择库存项" -#: templates/js/translated/stock.js:3317 +#: templates/js/translated/stock.js:3400 #, fuzzy #| msgid "Stock Settings" msgid "Change Stock Status" msgstr "库存设置" +#: templates/js/translated/stock.js:3477 +msgid "This week" +msgstr "" + +#: templates/js/translated/stock.js:3485 +msgid "This month" +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 +#: templates/js/translated/table_filters.js:619 +#: templates/js/translated/table_filters.js:631 +#: templates/js/translated/table_filters.js:672 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 +#: templates/js/translated/table_filters.js:636 +#: templates/js/translated/table_filters.js:662 +#: templates/js/translated/table_filters.js:677 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 +#: templates/js/translated/table_filters.js:542 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:685 msgid "Assigned to me" msgstr "" @@ -14705,12 +15745,12 @@ msgstr "未设置仓储地点" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 -#: templates/js/translated/table_filters.js:711 +#: templates/js/translated/table_filters.js:725 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:287 -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:778 msgid "Subscribed" msgstr "" @@ -14752,7 +15792,7 @@ msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:325 -#: templates/js/translated/table_filters.js:700 +#: templates/js/translated/table_filters.js:714 msgid "Active parts" msgstr "" @@ -14853,56 +15893,74 @@ msgstr "" msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:515 +#: templates/js/translated/table_filters.js:471 +#, fuzzy +#| msgid "Internal Part" +msgid "Interval start" +msgstr "内部商品" + +#: templates/js/translated/table_filters.js:475 +#, fuzzy +#| msgid "Internal Prices" +msgid "Interval end" +msgstr "内部价格" + +#: templates/js/translated/table_filters.js:529 msgid "Build status" msgstr "生产状态" -#: templates/js/translated/table_filters.js:712 +#: templates/js/translated/table_filters.js:726 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:717 +#: templates/js/translated/table_filters.js:731 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 +#: templates/js/translated/table_filters.js:736 +#, fuzzy +#| msgid "Show related parts" +msgid "Show locked parts" +msgstr "显示相关商品" + +#: templates/js/translated/table_filters.js:744 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:733 -#: templates/js/translated/table_filters.js:833 +#: templates/js/translated/table_filters.js:752 +#: templates/js/translated/table_filters.js:852 #, fuzzy #| msgid "Units" msgid "Has Units" msgstr "单位" -#: templates/js/translated/table_filters.js:734 +#: templates/js/translated/table_filters.js:753 #, fuzzy #| msgid "Parameter units" msgid "Part has defined units" msgstr "参数单位" -#: templates/js/translated/table_filters.js:738 +#: templates/js/translated/table_filters.js:757 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:739 +#: templates/js/translated/table_filters.js:758 msgid "Part has internal part number" msgstr "商品有内部编号" -#: templates/js/translated/table_filters.js:743 +#: templates/js/translated/table_filters.js:762 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:770 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:763 +#: templates/js/translated/table_filters.js:782 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:829 +#: templates/js/translated/table_filters.js:848 #, fuzzy #| msgid "Units" msgid "Has Choices" @@ -14976,10 +16034,6 @@ msgstr "" msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -15185,6 +16239,14 @@ msgstr "电子邮件设置" msgid "Email settings not configured" msgstr "电子邮件设置未配置" +#: templates/test_statistics_table.html:13 +msgid "Passed" +msgstr "" + +#: templates/test_statistics_table.html:16 +msgid "Failed" +msgstr "" + #: templates/yesnolabel.html:4 msgid "Yes" msgstr "确定" @@ -15269,38 +16331,83 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:384 +#: users/models.py:379 msgid "Permission set" msgstr "权限设置" -#: users/models.py:393 +#: users/models.py:388 msgid "Group" msgstr "群组" -#: users/models.py:397 +#: users/models.py:392 msgid "View" msgstr "视图" -#: users/models.py:397 +#: users/models.py:392 msgid "Permission to view items" msgstr "查看项目权限" -#: users/models.py:401 +#: users/models.py:396 msgid "Permission to add items" msgstr "添加项目权限" -#: users/models.py:405 +#: users/models.py:400 msgid "Change" msgstr "更改" -#: users/models.py:407 +#: users/models.py:402 msgid "Permissions to edit items" msgstr "编辑项目权限" -#: users/models.py:413 +#: users/models.py:408 msgid "Permission to delete items" msgstr "删除项目权限" +#~ msgid "Allocate Stock to Build" +#~ msgstr "为生产分配库存" + +#, fuzzy +#~| msgid "Select Label Template" +#~ msgid "Default part label template" +#~ msgstr "选择标签模板" + +#, fuzzy +#~| msgid "stock items selected" +#~ msgid "Default stock item template" +#~ msgstr "已选择库存项" + +#, fuzzy +#~| msgid "No stock location set" +#~ msgid "Default stock location label template" +#~ msgstr "未设置仓储地点" + +#, fuzzy +#~| msgid "No stock location set" +#~ msgid "Default build line label template" +#~ msgstr "未设置仓储地点" + +#~ msgid "parent" +#~ msgstr "上级项" + +#~ msgid "File comment" +#~ msgstr "文件注释" + +#~ msgid "Filename must not be empty" +#~ msgstr "文件名不能为空!" + +#, python-brace-format +#~ msgid "Filename contains illegal character '{c}'" +#~ msgstr "文件名包含非法字符 '{c}'" + +#~ msgid "Filename missing extension" +#~ msgstr "缺少文件名扩展" + +#~ msgid "Attachment with this filename already exists" +#~ msgstr "使用此文件名的附件已存在" + +#~ msgid "Error renaming file" +#~ msgstr "重命名文件出错" + #~ msgid "Label name" #~ msgstr "标签名称" diff --git a/src/backend/InvenTree/machine/admin.py b/src/backend/InvenTree/machine/admin.py index 3437c7a38a..929f913a5e 100755 --- a/src/backend/InvenTree/machine/admin.py +++ b/src/backend/InvenTree/machine/admin.py @@ -1,7 +1,6 @@ """Django admin interface for the machine app.""" from django.contrib import admin -from django.http.request import HttpRequest from machine import models diff --git a/src/backend/InvenTree/machine/apps.py b/src/backend/InvenTree/machine/apps.py index 3264ac6319..cfced400c3 100755 --- a/src/backend/InvenTree/machine/apps.py +++ b/src/backend/InvenTree/machine/apps.py @@ -26,7 +26,6 @@ class MachineConfig(AppConfig): if ( not canAppAccessDatabase(allow_test=True) or not isPluginRegistryLoaded() - or not isInMainThread() or isRunningMigrations() or isImportingData() ): @@ -37,7 +36,7 @@ class MachineConfig(AppConfig): try: logger.info('Loading InvenTree machines') - registry.initialize() + registry.initialize(main=isInMainThread()) except (OperationalError, ProgrammingError): # Database might not yet be ready logger.warn('Database was not ready for initializing machines') diff --git a/src/backend/InvenTree/machine/machine_type.py b/src/backend/InvenTree/machine/machine_type.py index 35510e7209..9d9a456e81 100644 --- a/src/backend/InvenTree/machine/machine_type.py +++ b/src/backend/InvenTree/machine/machine_type.py @@ -3,7 +3,11 @@ from typing import TYPE_CHECKING, Any, Literal, Union from generic.states import StatusCode -from InvenTree.helpers_mixin import ClassProviderMixin, ClassValidationMixin +from InvenTree.helpers_mixin import ( + ClassProviderMixin, + ClassValidationMixin, + get_shared_class_instance_state_mixin, +) # Import only for typechecking, otherwise this throws cyclic import errors if TYPE_CHECKING: @@ -44,7 +48,11 @@ class MachineStatus(StatusCode): """ -class BaseDriver(ClassValidationMixin, ClassProviderMixin): +class BaseDriver( + ClassValidationMixin, + ClassProviderMixin, + get_shared_class_instance_state_mixin(lambda x: f'machine:driver:{x.SLUG}'), +): """Base class for all machine drivers. Attributes: @@ -69,8 +77,6 @@ class BaseDriver(ClassValidationMixin, ClassProviderMixin): """Base driver __init__ method.""" super().__init__() - self.errors: list[Union[str, Exception]] = [] - def init_driver(self): """This method gets called after all machines are created and can be used to initialize the driver. @@ -133,10 +139,20 @@ class BaseDriver(ClassValidationMixin, ClassProviderMixin): Arguments: error: Exception or string """ - self.errors.append(error) + self.set_shared_state('errors', self.errors + [error]) + + # --- state getters/setters + @property + def errors(self) -> list[Union[str, Exception]]: + """List of driver errors.""" + return self.get_shared_state('errors', []) -class BaseMachineType(ClassValidationMixin, ClassProviderMixin): +class BaseMachineType( + ClassValidationMixin, + ClassProviderMixin, + get_shared_class_instance_state_mixin(lambda x: f'machine:machine:{x.pk}'), +): """Base class for machine types. Attributes: @@ -178,12 +194,6 @@ class BaseMachineType(ClassValidationMixin, ClassProviderMixin): from machine import registry from machine.models import MachineSetting - self.errors: list[Union[str, Exception]] = [] - self.initialized = False - - self.status = self.default_machine_status - self.status_text: str = '' - self.pk = machine_config.pk self.driver = registry.get_driver_instance(machine_config.driver) @@ -208,8 +218,6 @@ class BaseMachineType(ClassValidationMixin, ClassProviderMixin): (self.driver_settings, MachineSetting.ConfigType.DRIVER), ] - self.restart_required = False - def __str__(self): """String representation of a machine.""" return f'{self.name}' @@ -272,16 +280,32 @@ class BaseMachineType(ClassValidationMixin, ClassProviderMixin): try: self.driver.update_machine(old_state, self) + + # check if the active state has changed and initialize the machine if necessary + if old_state['active'] != self.active: + if self.initialized is False and self.active is True: + self.initialize() + elif self.initialized is True and self.active is False: + self.initialized = False except Exception as e: self.handle_error(e) def restart(self): - """Machine restart function, can be used to manually restart the machine from the admin ui.""" + """Machine restart function, can be used to manually restart the machine from the admin ui. + + This will first reset the machines state (errors, status, status_text) and then call the drivers restart function. + """ if self.driver is None: return try: + # reset the machine state self.restart_required = False + self.reset_errors() + self.set_status(self.default_machine_status) + self.set_status_text('') + + # call the driver restart function self.driver.restart_machine(self) except Exception as e: self.handle_error(e) @@ -293,7 +317,11 @@ class BaseMachineType(ClassValidationMixin, ClassProviderMixin): Arguments: error: Exception or string """ - self.errors.append(error) + self.set_shared_state('errors', self.errors + [error]) + + def reset_errors(self): + """Helper function for resetting the error list for a machine.""" + self.set_shared_state('errors', []) def get_setting( self, key: str, config_type_str: Literal['M', 'D'], cache: bool = False @@ -364,7 +392,7 @@ class BaseMachineType(ClassValidationMixin, ClassProviderMixin): Arguments: status: The new MachineStatus code to set """ - self.status = status + self.set_shared_state('status', status.value) def set_status_text(self, status_text: str): """Set the machine status text. It can be any arbitrary text. @@ -372,4 +400,39 @@ class BaseMachineType(ClassValidationMixin, ClassProviderMixin): Arguments: status_text: The new status text to set """ - self.status_text = status_text + self.set_shared_state('status_text', status_text) + + # --- state getters/setters + @property + def initialized(self) -> bool: + """Initialized state of the machine.""" + return self.get_shared_state('initialized', False) + + @initialized.setter + def initialized(self, value: bool): + self.set_shared_state('initialized', value) + + @property + def restart_required(self) -> bool: + """Restart required state of the machine.""" + return self.get_shared_state('restart_required', False) + + @restart_required.setter + def restart_required(self, value: bool): + self.set_shared_state('restart_required', value) + + @property + def errors(self) -> list[Union[str, Exception]]: + """List of machine errors.""" + return self.get_shared_state('errors', []) + + @property + def status(self) -> MachineStatus: + """Machine status code.""" + status_code = self.get_shared_state('status', self.default_machine_status.value) + return self.MACHINE_STATUS(status_code) + + @property + def status_text(self) -> str: + """Machine status text.""" + return self.get_shared_state('status_text', '') diff --git a/src/backend/InvenTree/machine/machine_types/label_printer.py b/src/backend/InvenTree/machine/machine_types/label_printer.py index 4fd7f04405..e2817322c5 100644 --- a/src/backend/InvenTree/machine/machine_types/label_printer.py +++ b/src/backend/InvenTree/machine/machine_types/label_printer.py @@ -2,9 +2,10 @@ from typing import Union, cast +from django.contrib.auth.models import AnonymousUser from django.db import models from django.db.models.query import QuerySet -from django.http import HttpResponse, JsonResponse +from django.http import HttpRequest, HttpResponse, JsonResponse from django.utils.translation import gettext_lazy as _ from PIL.Image import Image @@ -34,7 +35,6 @@ class LabelPrinterBaseDriver(BaseDriver): machine: 'LabelPrinterMachine', label: LabelTemplate, item: models.Model, - request: Request, **kwargs, ) -> None: """Print a single label with the provided template and item. @@ -43,7 +43,6 @@ class LabelPrinterBaseDriver(BaseDriver): machine: The LabelPrintingMachine instance that should be used for printing label: The LabelTemplate object to use for printing item: The database item to print (e.g. StockItem instance) - request: The HTTP request object which triggered this print job Keyword Arguments: printing_options (dict): The printing options set for this print job defined in the PrintingOptionsSerializer @@ -57,8 +56,7 @@ class LabelPrinterBaseDriver(BaseDriver): self, machine: 'LabelPrinterMachine', label: LabelTemplate, - items: QuerySet, - request: Request, + items: QuerySet[models.Model], **kwargs, ) -> Union[None, JsonResponse]: """Print one or more labels with the provided template and items. @@ -67,7 +65,6 @@ class LabelPrinterBaseDriver(BaseDriver): machine: The LabelPrintingMachine instance that should be used for printing label: The LabelTemplate object to use for printing items: The list of database items to print (e.g. StockItem instances) - request: The HTTP request object which triggered this print job Keyword Arguments: printing_options (dict): The printing options set for this print job defined in the PrintingOptionsSerializer @@ -81,7 +78,7 @@ class LabelPrinterBaseDriver(BaseDriver): but this can be overridden by the particular driver. """ for item in items: - self.print_label(machine, label, item, request, **kwargs) + self.print_label(machine, label, item, **kwargs) def get_printers( self, label: LabelTemplate, items: QuerySet, **kwargs @@ -123,60 +120,50 @@ class LabelPrinterBaseDriver(BaseDriver): return cast(LabelPrintingMixin, plg) def render_to_pdf( - self, label: LabelTemplate, item: models.Model, request: Request, **kwargs + self, label: LabelTemplate, item: models.Model, **kwargs ) -> HttpResponse: """Helper method to render a label to PDF format for a specific item. Arguments: label: The LabelTemplate object to render item: The item to render the label with - request: The HTTP request object which triggered this print job """ - label.object_to_print = item - response = self.machine_plugin.render_to_pdf(label, request, **kwargs) - label.object_to_print = None - return response + request = self._get_dummy_request() + return self.machine_plugin.render_to_pdf(label, item, request, **kwargs) def render_to_pdf_data( - self, label: LabelTemplate, item: models.Model, request: Request, **kwargs + self, label: LabelTemplate, item: models.Model, **kwargs ) -> bytes: """Helper method to render a label to PDF and return it as bytes for a specific item. Arguments: label: The LabelTemplate object to render item: The item to render the label with - request: The HTTP request object which triggered this print job """ return ( - self.render_to_pdf(label, item, request, **kwargs) + self.render_to_pdf(label, item, **kwargs) .get_document() # type: ignore .write_pdf() ) - def render_to_html( - self, label: LabelTemplate, item: models.Model, request: Request, **kwargs - ) -> str: + def render_to_html(self, label: LabelTemplate, item: models.Model, **kwargs) -> str: """Helper method to render a label to HTML format for a specific item. Arguments: label: The LabelTemplate object to render item: The item to render the label with - request: The HTTP request object which triggered this print job """ - label.object_to_print = item - html = self.machine_plugin.render_to_html(label, request, **kwargs) - label.object_to_print = None - return html + request = self._get_dummy_request() + return self.machine_plugin.render_to_html(label, item, request, **kwargs) def render_to_png( - self, label: LabelTemplate, item: models.Model, request: Request, **kwargs - ) -> Image: + self, label: LabelTemplate, item: models.Model, **kwargs + ) -> Union[Image, None]: """Helper method to render a label to PNG format for a specific item. Arguments: label: The LabelTemplate object to render item: The item to render the label with - request: The HTTP request object which triggered this print job Keyword Arguments: pdf_data (bytes): The pdf document as bytes (optional) @@ -186,10 +173,20 @@ class LabelPrinterBaseDriver(BaseDriver): pdf2image_kwargs (dict): Additional keyword arguments to pass to the [`pdf2image.convert_from_bytes`](https://pdf2image.readthedocs.io/en/latest/reference.html#pdf2image.pdf2image.convert_from_bytes) method (optional) """ - label.object_to_print = item - png = self.machine_plugin.render_to_png(label, request, **kwargs) - label.object_to_print = None - return png + request = self._get_dummy_request() + return self.machine_plugin.render_to_png(label, item, request, **kwargs) + + def _get_dummy_request(self): + """Return a dummy request object to it work with legacy code. + + Note: this is a private method and can be removed at anytime + """ + r = HttpRequest() + r.META['SERVER_PORT'] = '80' + r.META['SERVER_NAME'] = 'localhost' + r.user = AnonymousUser() + + return r required_overrides = [[print_label, print_labels]] @@ -235,6 +232,7 @@ class LabelPrinterStatus(MachineStatus): UNKNOWN = 101, _('Unknown'), 'secondary' PRINTING = 110, _('Printing'), 'primary' NO_MEDIA = 301, _('No media'), 'warning' + PAPER_JAM = 302, _('Paper jam'), 'warning' DISCONNECTED = 400, _('Disconnected'), 'danger' diff --git a/src/backend/InvenTree/machine/registry.py b/src/backend/InvenTree/machine/registry.py index c2d09a6e5b..b9cdf1e0c9 100644 --- a/src/backend/InvenTree/machine/registry.py +++ b/src/backend/InvenTree/machine/registry.py @@ -1,15 +1,20 @@ """Machine registry.""" import logging -from typing import Union +from typing import Union, cast from uuid import UUID +from django.core.cache import cache + +from InvenTree.helpers_mixin import get_shared_class_instance_state_mixin from machine.machine_type import BaseDriver, BaseMachineType logger = logging.getLogger('inventree') -class MachineRegistry: +class MachineRegistry( + get_shared_class_instance_state_mixin(lambda _x: 'machine:registry') +): """Machine registry class.""" def __init__(self) -> None: @@ -23,17 +28,27 @@ class MachineRegistry: self.machines: dict[str, BaseMachineType] = {} self.base_drivers: list[type[BaseDriver]] = [] - self.errors: list[Union[str, Exception]] = [] + + self._hash = None + + @property + def errors(self) -> list[Union[str, Exception]]: + """List of registry errors.""" + return cast(list[Union[str, Exception]], self.get_shared_state('errors', [])) def handle_error(self, error: Union[Exception, str]): """Helper function for capturing errors with the machine registry.""" - self.errors.append(error) + self.set_shared_state('errors', self.errors + [error]) - def initialize(self): + def initialize(self, main: bool = False): """Initialize the machine registry.""" + # clear cache for machines (only needed for global redis cache) + if main and hasattr(cache, 'delete_pattern'): # pragma: no cover + cache.delete_pattern('machine:*') + self.discover_machine_types() self.discover_drivers() - self.load_machines() + self.load_machines(main=main) def discover_machine_types(self): """Discovers all machine types by inferring all classes that inherit the BaseMachineType class.""" @@ -113,26 +128,39 @@ class MachineRegistry: return self.driver_instances.get(slug, None) - def load_machines(self): + def load_machines(self, main: bool = False): """Load all machines defined in the database into the machine registry.""" # Imports need to be in this level to prevent early db model imports from machine.models import MachineConfig for machine_config in MachineConfig.objects.all(): - self.add_machine(machine_config, initialize=False) + self.add_machine( + machine_config, initialize=False, update_registry_hash=False + ) - # initialize drivers - for driver in self.driver_instances.values(): - driver.init_driver() + # initialize machines only in main thread + if main: + # initialize drivers + for driver in self.driver_instances.values(): + driver.init_driver() - # initialize machines after all machine instances were created - for machine in self.machines.values(): - if machine.active: - machine.initialize() + # initialize machines after all machine instances were created + for machine in self.machines.values(): + if machine.active: + machine.initialize() - logger.info('Initialized %s machines', len(self.machines.keys())) + self._update_registry_hash() + logger.info('Initialized %s machines', len(self.machines.keys())) + else: + self._hash = None # reset hash to force reload hash + logger.info('Loaded %s machines', len(self.machines.keys())) - def add_machine(self, machine_config, initialize=True): + def reload_machines(self): + """Reload all machines from the database.""" + self.machines = {} + self.load_machines() + + def add_machine(self, machine_config, initialize=True, update_registry_hash=True): """Add a machine to the machine registry.""" machine_type = self.machine_types.get(machine_config.machine_type, None) if machine_type is None: @@ -145,11 +173,19 @@ class MachineRegistry: if initialize and machine.active: machine.initialize() - def update_machine(self, old_machine_state, machine_config): + if update_registry_hash: + self._update_registry_hash() + + def update_machine( + self, old_machine_state, machine_config, update_registry_hash=True + ): """Notify the machine about an update.""" if machine := machine_config.machine: machine.update(old_machine_state) + if update_registry_hash: + self._update_registry_hash() + def restart_machine(self, machine): """Restart a machine.""" machine.restart() @@ -157,6 +193,7 @@ class MachineRegistry: def remove_machine(self, machine: BaseMachineType): """Remove a machine from the registry.""" self.machines.pop(str(machine.pk), None) + self._update_registry_hash() def get_machines(self, **kwargs): """Get loaded machines from registry (By default only initialized machines). @@ -169,6 +206,8 @@ class MachineRegistry: active: (bool) base_driver: base driver (class) """ + self._check_reload() + allowed_fields = [ 'name', 'machine_type', @@ -212,6 +251,7 @@ class MachineRegistry: def get_machine(self, pk: Union[str, UUID]): """Get machine from registry by pk.""" + self._check_reload() return self.machines.get(str(pk), None) def get_drivers(self, machine_type: str): @@ -222,5 +262,37 @@ class MachineRegistry: if driver.machine_type == machine_type ] + def _calculate_registry_hash(self): + """Calculate a hash of the machine registry state.""" + from hashlib import md5 + + data = md5() + + for pk, machine in self.machines.items(): + data.update(str(pk).encode()) + try: + data.update(str(machine.machine_config.active).encode()) + except: + # machine does not exist anymore, hash will be different + pass + + return str(data.hexdigest()) + + def _check_reload(self): + """Check if the registry needs to be reloaded, and reload it.""" + if not self._hash: + self._hash = self._calculate_registry_hash() + + last_hash = self.get_shared_state('hash', None) + + if last_hash and last_hash != self._hash: + logger.info('Machine registry has changed - reloading machines') + self.reload_machines() + + def _update_registry_hash(self): + """Save the current registry hash.""" + self._hash = self._calculate_registry_hash() + self.set_shared_state('hash', self._hash) + registry: MachineRegistry = MachineRegistry() diff --git a/src/backend/InvenTree/machine/tests.py b/src/backend/InvenTree/machine/tests.py index 992ca3fe0e..6075ee7118 100755 --- a/src/backend/InvenTree/machine/tests.py +++ b/src/backend/InvenTree/machine/tests.py @@ -32,7 +32,7 @@ class TestMachineRegistryMixin(TestCase): registry.driver_instances = {} registry.machines = {} registry.base_drivers = [] - registry.errors = [] + registry.set_shared_state('errors', []) return super().tearDown() @@ -111,7 +111,7 @@ class TestDriverMachineInterface(TestMachineRegistryMixin, TestCase): self.machines = [self.machine1, self.machine2, self.machine3] # init registry - registry.initialize() + registry.initialize(main=True) # mock machine implementation self.machine_mocks = { @@ -230,7 +230,7 @@ class TestLabelPrinterMachineType(TestMachineRegistryMixin, InvenTreeAPITestCase active=True, ) - registry.initialize() + registry.initialize(main=True) driver_instance = cast( TestingLabelPrinterDriver, registry.get_driver_instance('testing-label-printer'), @@ -292,7 +292,7 @@ class TestLabelPrinterMachineType(TestMachineRegistryMixin, InvenTreeAPITestCase # test the single print label method calls self.assertEqual(self.print_label.call_count, 2) self.assertEqual(self.print_label.call_args.args[0], self.machine.machine) - self.assertEqual(self.print_label.call_args.args[1], label) + self.assertEqual(self.print_label.call_args.args[1], template) self.assertEqual(self.print_label.call_args.args[2], parts[1]) self.assertIn('printing_options', self.print_labels.call_args.kwargs) self.assertEqual( diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index b2dd13483b..d5618d26d7 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -17,29 +17,17 @@ from rest_framework import status from rest_framework.exceptions import ValidationError from rest_framework.response import Response -import common.models as common_models -from company.models import SupplierPart +import common.models +import common.settings +import company.models from generic.states.api import StatusView -from InvenTree.api import ( - APIDownloadMixin, - AttachmentMixin, - ListCreateDestroyAPIView, - MetadataView, -) +from importer.mixins import DataExportViewMixin +from InvenTree.api import ListCreateDestroyAPIView, MetadataView from InvenTree.filters import SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS -from InvenTree.helpers import DownloadFile, str2bool +from InvenTree.helpers import str2bool from InvenTree.helpers_model import construct_absolute_url, get_base_url from InvenTree.mixins import CreateAPI, ListAPI, ListCreateAPI, RetrieveUpdateDestroyAPI from order import models, serializers -from order.admin import ( - PurchaseOrderExtraLineResource, - PurchaseOrderLineItemResource, - PurchaseOrderResource, - ReturnOrderResource, - SalesOrderExtraLineResource, - SalesOrderLineItemResource, - SalesOrderResource, -) from order.status_codes import ( PurchaseOrderStatus, PurchaseOrderStatusGroups, @@ -52,7 +40,7 @@ from part.models import Part from users.models import Owner -class GeneralExtraLineList(APIDownloadMixin): +class GeneralExtraLineList(DataExportViewMixin): """General template for ExtraLine API classes.""" def get_serializer(self, *args, **kwargs): @@ -135,7 +123,7 @@ class OrderFilter(rest_filters.FilterSet): return queryset.exclude(status__in=self.Meta.model.get_status_class().OPEN) project_code = rest_filters.ModelChoiceFilter( - queryset=common_models.ProjectCode.objects.all(), field_name='project_code' + queryset=common.models.ProjectCode.objects.all(), field_name='project_code' ) has_project_code = rest_filters.BooleanFilter( @@ -215,7 +203,7 @@ class PurchaseOrderMixin: return queryset -class PurchaseOrderList(PurchaseOrderMixin, APIDownloadMixin, ListCreateAPI): +class PurchaseOrderList(PurchaseOrderMixin, DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of PurchaseOrder objects. - GET: Return list of PurchaseOrder objects (with filters) @@ -272,16 +260,6 @@ class PurchaseOrderList(PurchaseOrderMixin, APIDownloadMixin, ListCreateAPI): serializer.data, status=status.HTTP_201_CREATED, headers=headers ) - def download_queryset(self, queryset, export_format): - """Download the filtered queryset as a file.""" - dataset = PurchaseOrderResource().export(queryset=queryset) - - filedata = dataset.export(export_format) - - filename = f'InvenTree_PurchaseOrders.{export_format}' - - return DownloadFile(filedata, filename) - def filter_queryset(self, queryset): """Custom queryset filtering.""" # Perform basic filtering @@ -306,11 +284,13 @@ class PurchaseOrderList(PurchaseOrderMixin, APIDownloadMixin, ListCreateAPI): if supplier_part is not None: try: - supplier_part = SupplierPart.objects.get(pk=supplier_part) + supplier_part = company.models.SupplierPart.objects.get( + pk=supplier_part + ) queryset = queryset.filter( id__in=[p.id for p in supplier_part.purchase_orders()] ) - except (ValueError, SupplierPart.DoesNotExist): + except (ValueError, company.models.SupplierPart.DoesNotExist): pass # Filter by 'date range' @@ -380,6 +360,12 @@ class PurchaseOrderContextMixin: return context +class PurchaseOrderHold(PurchaseOrderContextMixin, CreateAPI): + """API endpoint to place a PurchaseOrder on hold.""" + + serializer_class = serializers.PurchaseOrderHoldSerializer + + class PurchaseOrderCancel(PurchaseOrderContextMixin, CreateAPI): """API endpoint to 'cancel' a purchase order. @@ -449,7 +435,9 @@ class PurchaseOrderLineItemFilter(LineItemFilter): return queryset.exclude(order__status=PurchaseOrderStatus.COMPLETE.value) part = rest_filters.ModelChoiceFilter( - queryset=SupplierPart.objects.all(), field_name='part', label=_('Supplier Part') + queryset=company.models.SupplierPart.objects.all(), + field_name='part', + label=_('Supplier Part'), ) base_part = rest_filters.ModelChoiceFilter( @@ -529,7 +517,7 @@ class PurchaseOrderLineItemMixin: class PurchaseOrderLineItemList( - PurchaseOrderLineItemMixin, APIDownloadMixin, ListCreateDestroyAPIView + PurchaseOrderLineItemMixin, DataExportViewMixin, ListCreateDestroyAPIView ): """API endpoint for accessing a list of PurchaseOrderLineItem objects. @@ -577,16 +565,6 @@ class PurchaseOrderLineItemList( serializer.data, status=status.HTTP_201_CREATED, headers=headers ) - def download_queryset(self, queryset, export_format): - """Download the requested queryset as a file.""" - dataset = PurchaseOrderLineItemResource().export(queryset=queryset) - - filedata = dataset.export(export_format) - - filename = f'InvenTree_PurchaseOrderItems.{export_format}' - - return DownloadFile(filedata, filename) - filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_field_aliases = { @@ -632,14 +610,6 @@ class PurchaseOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): queryset = models.PurchaseOrderExtraLine.objects.all() serializer_class = serializers.PurchaseOrderExtraLineSerializer - def download_queryset(self, queryset, export_format): - """Download this queryset as a file.""" - dataset = PurchaseOrderExtraLineResource().export(queryset=queryset) - filedata = dataset.export(export_format) - filename = f'InvenTree_ExtraPurchaseOrderLines.{export_format}' - - return DownloadFile(filedata, filename) - class PurchaseOrderExtraLineDetail(RetrieveUpdateDestroyAPI): """API endpoint for detail view of a PurchaseOrderExtraLine object.""" @@ -648,22 +618,6 @@ class PurchaseOrderExtraLineDetail(RetrieveUpdateDestroyAPI): serializer_class = serializers.PurchaseOrderExtraLineSerializer -class SalesOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): - """API endpoint for listing, creating and bulk deleting a SalesOrderAttachment (file upload).""" - - queryset = models.SalesOrderAttachment.objects.all() - serializer_class = serializers.SalesOrderAttachmentSerializer - - filterset_fields = ['order'] - - -class SalesOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): - """Detail endpoint for SalesOrderAttachment.""" - - queryset = models.SalesOrderAttachment.objects.all() - serializer_class = serializers.SalesOrderAttachmentSerializer - - class SalesOrderFilter(OrderFilter): """Custom API filters for the SalesOrderList endpoint.""" @@ -705,7 +659,7 @@ class SalesOrderMixin: return queryset -class SalesOrderList(SalesOrderMixin, APIDownloadMixin, ListCreateAPI): +class SalesOrderList(SalesOrderMixin, DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of SalesOrder objects. - GET: Return list of SalesOrder objects (with filters) @@ -728,16 +682,6 @@ class SalesOrderList(SalesOrderMixin, APIDownloadMixin, ListCreateAPI): serializer.data, status=status.HTTP_201_CREATED, headers=headers ) - def download_queryset(self, queryset, export_format): - """Download this queryset as a file.""" - dataset = SalesOrderResource().export(queryset=queryset) - - filedata = dataset.export(export_format) - - filename = f'InvenTree_SalesOrders.{export_format}' - - return DownloadFile(filedata, filename) - def filter_queryset(self, queryset): """Perform custom filtering operations on the SalesOrder queryset.""" queryset = super().filter_queryset(queryset) @@ -887,20 +831,13 @@ class SalesOrderLineItemMixin: return queryset -class SalesOrderLineItemList(SalesOrderLineItemMixin, APIDownloadMixin, ListCreateAPI): +class SalesOrderLineItemList( + SalesOrderLineItemMixin, DataExportViewMixin, ListCreateAPI +): """API endpoint for accessing a list of SalesOrderLineItem objects.""" filterset_class = SalesOrderLineItemFilter - def download_queryset(self, queryset, export_format): - """Download the requested queryset as a file.""" - dataset = SalesOrderLineItemResource().export(queryset=queryset) - filedata = dataset.export(export_format) - - filename = f'InvenTree_SalesOrderItems.{export_format}' - - return DownloadFile(filedata, filename) - filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_fields = [ @@ -935,14 +872,6 @@ class SalesOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): queryset = models.SalesOrderExtraLine.objects.all() serializer_class = serializers.SalesOrderExtraLineSerializer - def download_queryset(self, queryset, export_format): - """Download this queryset as a file.""" - dataset = SalesOrderExtraLineResource().export(queryset=queryset) - filedata = dataset.export(export_format) - filename = f'InvenTree_ExtraSalesOrderLines.{export_format}' - - return DownloadFile(filedata, filename) - class SalesOrderExtraLineDetail(RetrieveUpdateDestroyAPI): """API endpoint for detail view of a SalesOrderExtraLine object.""" @@ -970,6 +899,12 @@ class SalesOrderContextMixin: return ctx +class SalesOrderHold(SalesOrderContextMixin, CreateAPI): + """API endpoint to place a SalesOrder on hold.""" + + serializer_class = serializers.SalesOrderHoldSerializer + + class SalesOrderCancel(SalesOrderContextMixin, CreateAPI): """API endpoint to cancel a SalesOrder.""" @@ -1119,7 +1054,9 @@ class SalesOrderShipmentList(ListCreateAPI): serializer_class = serializers.SalesOrderShipmentSerializer filterset_class = SalesOrderShipmentFilter - filter_backends = [rest_filters.DjangoFilterBackend] + filter_backends = SEARCH_ORDER_FILTER_ALIAS + + ordering_fields = ['delivery_date', 'shipment_date'] class SalesOrderShipmentDetail(RetrieveUpdateDestroyAPI): @@ -1150,22 +1087,6 @@ class SalesOrderShipmentComplete(CreateAPI): return ctx -class PurchaseOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): - """API endpoint for listing, creating and bulk deleting) a PurchaseOrderAttachment (file upload).""" - - queryset = models.PurchaseOrderAttachment.objects.all() - serializer_class = serializers.PurchaseOrderAttachmentSerializer - - filterset_fields = ['order'] - - -class PurchaseOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): - """Detail endpoint for a PurchaseOrderAttachment.""" - - queryset = models.PurchaseOrderAttachment.objects.all() - serializer_class = serializers.PurchaseOrderAttachmentSerializer - - class ReturnOrderFilter(OrderFilter): """Custom API filters for the ReturnOrderList endpoint.""" @@ -1207,7 +1128,7 @@ class ReturnOrderMixin: return queryset -class ReturnOrderList(ReturnOrderMixin, APIDownloadMixin, ListCreateAPI): +class ReturnOrderList(ReturnOrderMixin, DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of ReturnOrder objects.""" filterset_class = ReturnOrderFilter @@ -1226,14 +1147,6 @@ class ReturnOrderList(ReturnOrderMixin, APIDownloadMixin, ListCreateAPI): serializer.data, status=status.HTTP_201_CREATED, headers=headers ) - def download_queryset(self, queryset, export_format): - """Download this queryset as a file.""" - dataset = ReturnOrderResource().export(queryset=queryset) - filedata = dataset.export(export_format) - filename = f'InvenTree_ReturnOrders.{export_format}' - - return DownloadFile(filedata, filename) - filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_field_aliases = { @@ -1297,6 +1210,12 @@ class ReturnOrderCancel(ReturnOrderContextMixin, CreateAPI): serializer_class = serializers.ReturnOrderCancelSerializer +class ReturnOrderHold(ReturnOrderContextMixin, CreateAPI): + """API endpoint to hold a ReturnOrder.""" + + serializer_class = serializers.ReturnOrderHoldSerializer + + class ReturnOrderComplete(ReturnOrderContextMixin, CreateAPI): """API endpoint to complete a ReturnOrder.""" @@ -1368,18 +1287,12 @@ class ReturnOrderLineItemMixin: class ReturnOrderLineItemList( - ReturnOrderLineItemMixin, APIDownloadMixin, ListCreateAPI + ReturnOrderLineItemMixin, DataExportViewMixin, ListCreateAPI ): """API endpoint for accessing a list of ReturnOrderLineItemList objects.""" filterset_class = ReturnOrderLineItemFilter - def download_queryset(self, queryset, export_format): - """Download the requested queryset as a file.""" - raise NotImplementedError( - 'download_queryset not yet implemented for this endpoint' - ) - filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['reference', 'target_date', 'received_date'] @@ -1404,10 +1317,6 @@ class ReturnOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): queryset = models.ReturnOrderExtraLine.objects.all() serializer_class = serializers.ReturnOrderExtraLineSerializer - def download_queryset(self, queryset, export_format): - """Download this queryset as a file.""" - raise NotImplementedError('download_queryset not yet implemented') - class ReturnOrderExtraLineDetail(RetrieveUpdateDestroyAPI): """API endpoint for detail view of a ReturnOrderExtraLine object.""" @@ -1416,22 +1325,6 @@ class ReturnOrderExtraLineDetail(RetrieveUpdateDestroyAPI): serializer_class = serializers.ReturnOrderExtraLineSerializer -class ReturnOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): - """API endpoint for listing, creating and bulk deleting a ReturnOrderAttachment (file upload).""" - - queryset = models.ReturnOrderAttachment.objects.all() - serializer_class = serializers.ReturnOrderAttachmentSerializer - - filterset_fields = ['order'] - - -class ReturnOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): - """Detail endpoint for the ReturnOrderAttachment model.""" - - queryset = models.ReturnOrderAttachment.objects.all() - serializer_class = serializers.ReturnOrderAttachmentSerializer - - class OrderCalendarExport(ICalFeed): """Calendar export for Purchase/Sales Orders. @@ -1514,7 +1407,9 @@ class OrderCalendarExport(ICalFeed): else: ordertype_title = _('Unknown') - return f'{common_models.InvenTreeSetting.get_setting("INVENTREE_COMPANY_NAME")} {ordertype_title}' + company_name = common.settings.get_global_setting('INVENTREE_COMPANY_NAME') + + return f'{company_name} {ordertype_title}' def product_id(self, obj): """Return calendar product id.""" @@ -1597,22 +1492,6 @@ order_api_urls = [ path( 'po/', include([ - # Purchase order attachments - path( - 'attachment/', - include([ - path( - '/', - PurchaseOrderAttachmentDetail.as_view(), - name='api-po-attachment-detail', - ), - path( - '', - PurchaseOrderAttachmentList.as_view(), - name='api-po-attachment-list', - ), - ]), - ), # Individual purchase order detail URLs path( '/', @@ -1620,6 +1499,7 @@ order_api_urls = [ path( 'cancel/', PurchaseOrderCancel.as_view(), name='api-po-cancel' ), + path('hold/', PurchaseOrderHold.as_view(), name='api-po-hold'), path( 'complete/', PurchaseOrderComplete.as_view(), @@ -1704,21 +1584,6 @@ order_api_urls = [ path( 'so/', include([ - path( - 'attachment/', - include([ - path( - '/', - SalesOrderAttachmentDetail.as_view(), - name='api-so-attachment-detail', - ), - path( - '', - SalesOrderAttachmentList.as_view(), - name='api-so-attachment-list', - ), - ]), - ), path( 'shipment/', include([ @@ -1764,6 +1629,7 @@ order_api_urls = [ SalesOrderAllocateSerials.as_view(), name='api-so-allocate-serials', ), + path('hold/', SalesOrderHold.as_view(), name='api-so-hold'), path('cancel/', SalesOrderCancel.as_view(), name='api-so-cancel'), path('issue/', SalesOrderIssue.as_view(), name='api-so-issue'), path( @@ -1854,21 +1720,6 @@ order_api_urls = [ path( 'ro/', include([ - path( - 'attachment/', - include([ - path( - '/', - ReturnOrderAttachmentDetail.as_view(), - name='api-return-order-attachment-detail', - ), - path( - '', - ReturnOrderAttachmentList.as_view(), - name='api-return-order-attachment-list', - ), - ]), - ), # Return Order detail endpoints path( '/', @@ -1878,6 +1729,7 @@ order_api_urls = [ ReturnOrderCancel.as_view(), name='api-return-order-cancel', ), + path('hold/', ReturnOrderHold.as_view(), name='api-ro-hold'), path( 'complete/', ReturnOrderComplete.as_view(), diff --git a/src/backend/InvenTree/order/migrations/0001_initial.py b/src/backend/InvenTree/order/migrations/0001_initial.py index edceeffc11..498aad2983 100644 --- a/src/backend/InvenTree/order/migrations/0001_initial.py +++ b/src/backend/InvenTree/order/migrations/0001_initial.py @@ -44,6 +44,7 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, + 'verbose_name': 'Purchase Order Line Item' }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py b/src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py index 25b43e222d..750642f6f9 100644 --- a/src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py +++ b/src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py @@ -16,7 +16,7 @@ class Migration(migrations.Migration): name='PurchaseOrderAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment)), + ('attachment', models.FileField(help_text='Select file to attach', upload_to='attachments')), ('comment', models.CharField(help_text='File comment', max_length=100)), ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='order.PurchaseOrder')), ], 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 76e903b45a..083c300df3 100644 --- a/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py +++ b/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py @@ -59,13 +59,14 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, + 'verbose_name': 'Sales Order Line Item', }, ), migrations.CreateModel( name='SalesOrderAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment)), + ('attachment', models.FileField(help_text='Select file to attach', upload_to='attachments')), ('comment', models.CharField(help_text='File comment', max_length=100)), ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='order.SalesOrder')), ], diff --git a/src/backend/InvenTree/order/migrations/0024_salesorderallocation.py b/src/backend/InvenTree/order/migrations/0024_salesorderallocation.py index ca8ed182d9..d3a4623b20 100644 --- a/src/backend/InvenTree/order/migrations/0024_salesorderallocation.py +++ b/src/backend/InvenTree/order/migrations/0024_salesorderallocation.py @@ -22,5 +22,8 @@ class Migration(migrations.Migration): ('item', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='sales_order_allocation', to='stock.StockItem')), ('line', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='allocations', to='order.SalesOrderLineItem')), ], + options={ + 'verbose_name': 'Sales Order Allocation', + }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py b/src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py index cf9cd1e0e2..3cba8ed07c 100644 --- a/src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py +++ b/src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py @@ -5,6 +5,8 @@ import django.core.validators from django.db import migrations, models import django.db.models.deletion +from order.status_codes import PurchaseOrderStatus + class Migration(migrations.Migration): @@ -17,7 +19,12 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='purchaseorder', name='status', - field=models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'Placed'), (30, 'Complete'), (40, 'Cancelled'), (50, 'Lost'), (60, 'Returned')], default=10, help_text='Purchase order status'), + field=models.PositiveIntegerField( + choices=PurchaseOrderStatus.items(), + default=PurchaseOrderStatus.PENDING.value, + help_text='Purchase order status', + verbose_name='Status', + ), ), migrations.AlterField( model_name='salesorder', diff --git a/src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py b/src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py index ef69235545..d97c9accc1 100644 --- a/src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py +++ b/src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py @@ -67,7 +67,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='purchaseorderattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), ), migrations.AlterField( model_name='purchaseorderattachment', @@ -187,7 +187,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='salesorderattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), ), migrations.AlterField( model_name='salesorderattachment', diff --git a/src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py b/src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py index bbe029b4af..a4e0ec30a0 100644 --- a/src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py +++ b/src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py @@ -25,11 +25,11 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='purchaseorderattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), ), migrations.AlterField( model_name='salesorderattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), ), ] diff --git a/src/backend/InvenTree/order/migrations/0053_salesordershipment.py b/src/backend/InvenTree/order/migrations/0053_salesordershipment.py index 85ab90f46a..440b9fbeef 100644 --- a/src/backend/InvenTree/order/migrations/0053_salesordershipment.py +++ b/src/backend/InvenTree/order/migrations/0053_salesordershipment.py @@ -23,5 +23,8 @@ class Migration(migrations.Migration): ('checked_by', models.ForeignKey(blank=True, help_text='User who checked this shipment', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Checked By')), ('order', models.ForeignKey(help_text='Sales Order', on_delete=django.db.models.deletion.CASCADE, related_name='shipments', to='order.salesorder', verbose_name='Order')), ], + options={ + 'verbose_name': 'Sales Order Shipment', + }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py b/src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py index 1c3d2ff743..86784edf93 100644 --- a/src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py +++ b/src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py @@ -86,6 +86,7 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, + 'verbose_name': 'Sales Order Extra Line', }, ), migrations.CreateModel( @@ -103,6 +104,7 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, + 'verbose_name': 'Purchase Order Extra Line', }, ), migrations.RunPython(convert_line_items, reverse_code=nunconvert_line_items), 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 f15b800ffe..ed815aa5a9 100644 --- a/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py +++ b/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py @@ -51,7 +51,7 @@ class Migration(migrations.Migration): name='ReturnOrderAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment')), ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), diff --git a/src/backend/InvenTree/order/migrations/0083_returnorderextraline.py b/src/backend/InvenTree/order/migrations/0083_returnorderextraline.py index ba1d8c2812..dd6bf69767 100644 --- a/src/backend/InvenTree/order/migrations/0083_returnorderextraline.py +++ b/src/backend/InvenTree/order/migrations/0083_returnorderextraline.py @@ -30,6 +30,7 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, + 'verbose_name': 'Return Order Extra Line', }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py b/src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py index aa96291e33..49290b4349 100644 --- a/src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py +++ b/src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py @@ -2,6 +2,8 @@ from django.db import migrations, models +from order.status_codes import ReturnOrderStatus + class Migration(migrations.Migration): @@ -23,7 +25,11 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='returnorder', name='status', - field=models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'In Progress'), (30, 'Complete'), (40, 'Cancelled')], default=10, help_text='Return order status', verbose_name='Status'), + field=models.PositiveIntegerField( + choices=ReturnOrderStatus.items(), + default=ReturnOrderStatus.PENDING.value, + help_text='Return order status', verbose_name='Status' + ), ), migrations.AlterField( model_name='salesorder', diff --git a/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py b/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py index 9a5f4a652f..ea3ad7223d 100644 --- a/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py +++ b/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py @@ -44,6 +44,7 @@ class Migration(migrations.Migration): ], options={ 'unique_together': {('order', 'item')}, + 'verbose_name': 'Return Order Line Item', }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py b/src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py index eaf4029917..dd6c0326bf 100644 --- a/src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py +++ b/src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py @@ -2,6 +2,8 @@ from django.db import migrations, models +from order.status_codes import SalesOrderStatus + class Migration(migrations.Migration): @@ -13,6 +15,10 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='salesorder', name='status', - field=models.PositiveIntegerField(choices=[(10, 'Pending'), (15, 'In Progress'), (20, 'Shipped'), (40, 'Cancelled'), (50, 'Lost'), (60, 'Returned')], default=10, help_text='Purchase order status', verbose_name='Status'), + field=models.PositiveIntegerField( + choices=SalesOrderStatus.items(), + default=SalesOrderStatus.PENDING.value, + help_text='Sales order status', verbose_name='Status' + ), ), ] diff --git a/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py b/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py index 23d9b95d86..bc5d52f44d 100644 --- a/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py +++ b/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py @@ -15,6 +15,10 @@ class Migration(migrations.Migration): 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'), + field=models.PositiveIntegerField( + choices=order.status_codes.SalesOrderStatus.items(), + default=order.status_codes.SalesOrderStatus.PENDING.value, + help_text='Sales order status', verbose_name='Status' + ), ), ] diff --git a/src/backend/InvenTree/order/migrations/0100_remove_returnorderattachment_order_and_more.py b/src/backend/InvenTree/order/migrations/0100_remove_returnorderattachment_order_and_more.py new file mode 100644 index 0000000000..01e5679ebd --- /dev/null +++ b/src/backend/InvenTree/order/migrations/0100_remove_returnorderattachment_order_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.12 on 2024-06-09 09:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0050_auto_20240508_0138'), + ('common', '0026_auto_20240608_1238'), + ('company', '0069_company_active'), + ('order', '0099_alter_salesorder_status'), + ('part', '0123_parttesttemplate_choices'), + ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') + ] + + operations = [ + migrations.DeleteModel( + name='PurchaseOrderAttachment', + ), + migrations.DeleteModel( + name='ReturnOrderAttachment', + ), + migrations.DeleteModel( + name='SalesOrderAttachment', + ), + ] diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index 8fb2c8449c..f79c615321 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -1,7 +1,6 @@ """Order model definitions.""" import logging -import os import sys from datetime import datetime from decimal import Decimal @@ -184,6 +183,7 @@ class TotalPriceMixin(models.Model): class Order( StateTransitionMixin, + InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, report.mixins.InvenTreeReportMixin, @@ -399,7 +399,7 @@ class PurchaseOrder(TotalPriceMixin, Order): return PurchaseOrderStatusGroups @classmethod - def api_defaults(cls, request): + def api_defaults(cls, request=None): """Return default values for this model when issuing an API OPTIONS request.""" defaults = { 'reference': order.validators.generate_next_purchase_order_reference() @@ -407,6 +407,11 @@ class PurchaseOrder(TotalPriceMixin, Order): return defaults + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'PO' + @staticmethod def filterByDate(queryset, min_date, max_date): """Filter by 'minimum and maximum date range'. @@ -468,6 +473,7 @@ class PurchaseOrder(TotalPriceMixin, Order): status = models.PositiveIntegerField( default=PurchaseOrderStatus.PENDING.value, choices=PurchaseOrderStatus.items(), + verbose_name=_('Status'), help_text=_('Purchase order status'), ) @@ -602,7 +608,7 @@ class PurchaseOrder(TotalPriceMixin, Order): Order must be currently PENDING. """ - if self.is_pending: + if self.can_issue: self.status = PurchaseOrderStatus.PLACED.value self.issue_date = InvenTree.helpers.current_date() self.save() @@ -635,6 +641,19 @@ class PurchaseOrder(TotalPriceMixin, Order): trigger_event('purchaseorder.completed', id=self.pk) + @transaction.atomic + def issue_order(self): + """Equivalent to 'place_order'.""" + self.place_order() + + @property + def can_issue(self): + """Return True if this order can be issued.""" + return self.status in [ + PurchaseOrderStatus.PENDING.value, + PurchaseOrderStatus.ON_HOLD.value, + ] + @transaction.atomic def place_order(self): """Attempt to transition to PLACED status.""" @@ -649,6 +668,13 @@ class PurchaseOrder(TotalPriceMixin, Order): self.status, PurchaseOrderStatus.COMPLETE.value, self, self._action_complete ) + @transaction.atomic + def hold_order(self): + """Attempt to transition to ON_HOLD status.""" + return self.handle_transition( + self.status, PurchaseOrderStatus.ON_HOLD.value, self, self._action_hold + ) + @transaction.atomic def cancel_order(self): """Attempt to transition to CANCELLED status.""" @@ -671,12 +697,9 @@ class PurchaseOrder(TotalPriceMixin, Order): """A PurchaseOrder can only be cancelled under the following circumstances. - Status is PLACED - - Status is PENDING + - Status is PENDING (or ON_HOLD) """ - return self.status in [ - PurchaseOrderStatus.PLACED.value, - PurchaseOrderStatus.PENDING.value, - ] + return self.status in PurchaseOrderStatusGroups.OPEN def _action_cancel(self, *args, **kwargs): """Marks the PurchaseOrder as CANCELLED.""" @@ -694,6 +717,22 @@ class PurchaseOrder(TotalPriceMixin, Order): content=InvenTreeNotificationBodies.OrderCanceled, ) + @property + def can_hold(self): + """Return True if this order can be placed on hold.""" + return self.status in [ + PurchaseOrderStatus.PENDING.value, + PurchaseOrderStatus.PLACED.value, + ] + + def _action_hold(self, *args, **kwargs): + """Mark this purchase order as 'on hold'.""" + if self.can_hold: + self.status = PurchaseOrderStatus.ON_HOLD.value + self.save() + + trigger_event('purchaseorder.hold', id=self.pk) + # endregion def pending_line_items(self): @@ -741,6 +780,14 @@ class PurchaseOrder(TotalPriceMixin, Order): # Extract optional notes field notes = kwargs.get('notes', '') + # Extract optional packaging field + packaging = kwargs.get('packaging', None) + + if not packaging: + # Default to the packaging field for the linked supplier part + if line.part: + packaging = line.part.packaging + # Extract optional barcode field barcode = kwargs.get('barcode', None) @@ -790,6 +837,7 @@ class PurchaseOrder(TotalPriceMixin, Order): purchase_order=self, status=status, batch=batch_code, + packaging=packaging, serial=sn, purchase_price=unit_purchase_price, ) @@ -864,12 +912,17 @@ class SalesOrder(TotalPriceMixin, Order): return SalesOrderStatusGroups @classmethod - def api_defaults(cls, request): + def api_defaults(cls, request=None): """Return default values for this model when issuing an API OPTIONS request.""" defaults = {'reference': order.validators.generate_next_sales_order_reference()} return defaults + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'SO' + @staticmethod def filterByDate(queryset, min_date, max_date): """Filter by "minimum and maximum date range". @@ -947,7 +1000,7 @@ class SalesOrder(TotalPriceMixin, Order): default=SalesOrderStatus.PENDING.value, choices=SalesOrderStatus.items(), verbose_name=_('Status'), - help_text=_('Purchase order status'), + help_text=_('Sales order status'), ) @property @@ -1053,15 +1106,39 @@ class SalesOrder(TotalPriceMixin, Order): """Deprecated version of 'issue_order'.""" self.issue_order() + @property + def can_issue(self): + """Return True if this order can be issued.""" + return self.status in [ + SalesOrderStatus.PENDING.value, + SalesOrderStatus.ON_HOLD.value, + ] + def _action_place(self, *args, **kwargs): """Change this order from 'PENDING' to 'IN_PROGRESS'.""" - if self.status == SalesOrderStatus.PENDING: + if self.can_issue: self.status = SalesOrderStatus.IN_PROGRESS.value self.issue_date = InvenTree.helpers.current_date() self.save() trigger_event('salesorder.issued', id=self.pk) + @property + def can_hold(self): + """Return True if this order can be placed on hold.""" + return self.status in [ + SalesOrderStatus.PENDING.value, + SalesOrderStatus.IN_PROGRESS.value, + ] + + def _action_hold(self, *args, **kwargs): + """Mark this sales order as 'on hold'.""" + if self.can_hold: + self.status = SalesOrderStatus.ON_HOLD.value + self.save() + + trigger_event('salesorder.onhold', id=self.pk) + def _action_complete(self, *args, **kwargs): """Mark this order as "complete.""" user = kwargs.pop('user', None) @@ -1155,6 +1232,13 @@ class SalesOrder(TotalPriceMixin, Order): **kwargs, ) + @transaction.atomic + def hold_order(self): + """Attempt to transition to ON_HOLD status.""" + return self.handle_transition( + self.status, SalesOrderStatus.ON_HOLD.value, self, self._action_hold + ) + @transaction.atomic def cancel_order(self): """Attempt to transition to CANCELLED status.""" @@ -1236,40 +1320,6 @@ def after_save_sales_order(sender, instance: SalesOrder, created: bool, **kwargs notify_responsible(instance, sender, exclude=instance.created_by) -class PurchaseOrderAttachment(InvenTree.models.InvenTreeAttachment): - """Model for storing file attachments against a PurchaseOrder object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the PurchaseOrderAttachment model.""" - return reverse('api-po-attachment-list') - - def getSubdir(self): - """Return the directory path where PurchaseOrderAttachment files are located.""" - return os.path.join('po_files', str(self.order.id)) - - order = models.ForeignKey( - PurchaseOrder, on_delete=models.CASCADE, related_name='attachments' - ) - - -class SalesOrderAttachment(InvenTree.models.InvenTreeAttachment): - """Model for storing file attachments against a SalesOrder object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the SalesOrderAttachment class.""" - return reverse('api-so-attachment-list') - - def getSubdir(self): - """Return the directory path where SalesOrderAttachment files are located.""" - return os.path.join('so_files', str(self.order.id)) - - order = models.ForeignKey( - SalesOrder, on_delete=models.CASCADE, related_name='attachments' - ) - - class OrderLineItem(InvenTree.models.InvenTreeMetadataModel): """Abstract model for an order line item. @@ -1388,6 +1438,11 @@ class PurchaseOrderLineItem(OrderLineItem): order: Reference to a PurchaseOrder object """ + class Meta: + """Model meta options.""" + + verbose_name = _('Purchase Order Line Item') + # Filter for determining if a particular PurchaseOrderLineItem is overdue OVERDUE_FILTER = ( Q(received__lt=F('quantity')) @@ -1525,6 +1580,11 @@ class PurchaseOrderExtraLine(OrderExtraLine): price: The unit price for this OrderLine """ + class Meta: + """Model meta options.""" + + verbose_name = _('Purchase Order Extra Line') + @staticmethod def get_api_url(): """Return the API URL associated with the PurchaseOrderExtraLine model.""" @@ -1549,6 +1609,11 @@ class SalesOrderLineItem(OrderLineItem): shipped: The number of items which have actually shipped against this line item """ + class Meta: + """Model meta options.""" + + verbose_name = _('Sales Order Line Item') + # Filter for determining if a particular SalesOrderLineItem is overdue OVERDUE_FILTER = ( Q(shipped__lt=F('quantity')) @@ -1682,6 +1747,7 @@ class SalesOrderShipment( # Shipment reference must be unique for a given sales order unique_together = ['order', 'reference'] + verbose_name = _('Sales Order Shipment') @staticmethod def get_api_url(): @@ -1839,6 +1905,11 @@ class SalesOrderExtraLine(OrderExtraLine): price: The unit price for this OrderLine """ + class Meta: + """Model meta options.""" + + verbose_name = _('Sales Order Extra Line') + @staticmethod def get_api_url(): """Return the API URL associated with the SalesOrderExtraLine model.""" @@ -1863,6 +1934,11 @@ class SalesOrderAllocation(models.Model): quantity: Quantity to take from the StockItem """ + class Meta: + """Model meta options.""" + + verbose_name = _('Sales Order Allocation') + @staticmethod def get_api_url(): """Return the API URL associated with the SalesOrderAllocation model.""" @@ -2034,7 +2110,7 @@ class ReturnOrder(TotalPriceMixin, Order): return ReturnOrderStatusGroups @classmethod - def api_defaults(cls, request): + def api_defaults(cls, request=None): """Return default values for this model when issuing an API OPTIONS request.""" defaults = { 'reference': order.validators.generate_next_return_order_reference() @@ -2042,6 +2118,11 @@ class ReturnOrder(TotalPriceMixin, Order): return defaults + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'RO' + def __str__(self): """Render a string representation of this ReturnOrder.""" return f"{self.reference} - {self.customer.name if self.customer else _('no customer')}" @@ -2115,9 +2196,30 @@ class ReturnOrder(TotalPriceMixin, Order): """Return True if this order is fully received.""" return not self.lines.filter(received_date=None).exists() + @property + def can_hold(self): + """Return True if this order can be placed on hold.""" + return self.status in [ + ReturnOrderStatus.PENDING.value, + ReturnOrderStatus.IN_PROGRESS.value, + ] + + def _action_hold(self, *args, **kwargs): + """Mark this order as 'on hold' (if allowed).""" + if self.can_hold: + self.status = ReturnOrderStatus.ON_HOLD.value + self.save() + + trigger_event('returnorder.hold', id=self.pk) + + @property + def can_cancel(self): + """Return True if this order can be cancelled.""" + return self.status in ReturnOrderStatusGroups.OPEN + def _action_cancel(self, *args, **kwargs): """Cancel this ReturnOrder (if not already cancelled).""" - if self.status != ReturnOrderStatus.CANCELLED: + if self.can_cancel: self.status = ReturnOrderStatus.CANCELLED.value self.save() @@ -2133,7 +2235,7 @@ class ReturnOrder(TotalPriceMixin, Order): def _action_complete(self, *args, **kwargs): """Complete this ReturnOrder (if not already completed).""" - if self.status == ReturnOrderStatus.IN_PROGRESS: + if self.status == ReturnOrderStatus.IN_PROGRESS.value: self.status = ReturnOrderStatus.COMPLETE.value self.complete_date = InvenTree.helpers.current_date() self.save() @@ -2144,15 +2246,30 @@ class ReturnOrder(TotalPriceMixin, Order): """Deprecated version of 'issue_order.""" self.issue_order() + @property + def can_issue(self): + """Return True if this order can be issued.""" + return self.status in [ + ReturnOrderStatus.PENDING.value, + ReturnOrderStatus.ON_HOLD.value, + ] + def _action_place(self, *args, **kwargs): """Issue this ReturnOrder (if currently pending).""" - if self.status == ReturnOrderStatus.PENDING: + if self.can_issue: self.status = ReturnOrderStatus.IN_PROGRESS.value self.issue_date = InvenTree.helpers.current_date() self.save() trigger_event('returnorder.issued', id=self.pk) + @transaction.atomic + def hold_order(self): + """Attempt to tranasition to ON_HOLD status.""" + return self.handle_transition( + self.status, ReturnOrderStatus.ON_HOLD.value, self, self._action_hold + ) + @transaction.atomic def issue_order(self): """Attempt to transition to IN_PROGRESS status.""" @@ -2241,6 +2358,7 @@ class ReturnOrderLineItem(OrderLineItem): class Meta: """Metaclass options for this model.""" + verbose_name = _('Return Order Line Item') unique_together = [('order', 'item')] @staticmethod @@ -2303,6 +2421,11 @@ class ReturnOrderLineItem(OrderLineItem): class ReturnOrderExtraLine(OrderExtraLine): """Model for a single ExtraLine in a ReturnOrder.""" + class Meta: + """Metaclass options for this model.""" + + verbose_name = _('Return Order Extra Line') + @staticmethod def get_api_url(): """Return the API URL associated with the ReturnOrderExtraLine model.""" @@ -2315,20 +2438,3 @@ class ReturnOrderExtraLine(OrderExtraLine): verbose_name=_('Order'), help_text=_('Return Order'), ) - - -class ReturnOrderAttachment(InvenTree.models.InvenTreeAttachment): - """Model for storing file attachments against a ReturnOrder object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the ReturnOrderAttachment class.""" - return reverse('api-return-order-attachment-list') - - def getSubdir(self): - """Return the directory path where ReturnOrderAttachment files are located.""" - return os.path.join('return_files', str(self.order.id)) - - order = models.ForeignKey( - ReturnOrder, on_delete=models.CASCADE, related_name='attachments' - ) diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index ee882beaa3..f94ed0c293 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -1,6 +1,5 @@ """JSON serializers for the Order API.""" -from datetime import datetime from decimal import Decimal from django.core.exceptions import ValidationError as DjangoValidationError @@ -22,7 +21,6 @@ from rest_framework.serializers import ValidationError from sql_util.utils import SubqueryCount import order.models -import part.filters import part.filters as part_filters import part.models as part_models import stock.models @@ -34,6 +32,8 @@ from company.serializers import ( ContactSerializer, SupplierPartSerializer, ) +from importer.mixins import DataImportExportSerializerMixin +from importer.registry import register_importer from InvenTree.helpers import ( current_date, extract_serial_numbers, @@ -42,7 +42,6 @@ from InvenTree.helpers import ( str2bool, ) from InvenTree.serializers import ( - InvenTreeAttachmentSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeModelSerializer, @@ -74,9 +73,11 @@ class TotalPriceMixin(serializers.Serializer): ) -class AbstractOrderSerializer(serializers.Serializer): +class AbstractOrderSerializer(DataImportExportSerializerMixin, serializers.Serializer): """Abstract serializer class which provides fields common to all order types.""" + export_exclude_fields = ['notes'] + # Number of line items in this order line_items = serializers.IntegerField(read_only=True, label=_('Line Items')) @@ -102,6 +103,10 @@ class AbstractOrderSerializer(serializers.Serializer): source='responsible', read_only=True, many=False ) + project_code_label = serializers.CharField( + source='project_code.code', read_only=True, label='Project Code Label' + ) + # Detail for project code field project_code_detail = ProjectCodeSerializer( source='project_code', read_only=True, many=False @@ -145,6 +150,7 @@ class AbstractOrderSerializer(serializers.Serializer): 'completed_lines', 'link', 'project_code', + 'project_code_label', 'project_code_detail', 'reference', 'responsible', @@ -161,7 +167,17 @@ class AbstractOrderSerializer(serializers.Serializer): ] + extra_fields -class AbstractExtraLineSerializer(serializers.Serializer): +class AbstractLineItemSerializer: + """Abstract serializer for LineItem object.""" + + target_date = serializers.DateField( + required=False, allow_null=True, label=_('Target Date') + ) + + +class AbstractExtraLineSerializer( + DataImportExportSerializerMixin, serializers.Serializer +): """Abstract Serializer for a ExtraLine object.""" def __init__(self, *args, **kwargs): @@ -171,7 +187,7 @@ class AbstractExtraLineSerializer(serializers.Serializer): super().__init__(*args, **kwargs) if order_detail is not True: - self.fields.pop('order_detail') + self.fields.pop('order_detail', None) quantity = serializers.FloatField() @@ -198,6 +214,7 @@ class AbstractExtraLineMeta: ] +@register_importer() class PurchaseOrderSerializer( NotesFieldMixin, TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer ): @@ -214,6 +231,7 @@ class PurchaseOrderSerializer( 'supplier', 'supplier_detail', 'supplier_reference', + 'supplier_name', 'total_price', 'order_currency', ]) @@ -232,7 +250,7 @@ class PurchaseOrderSerializer( super().__init__(*args, **kwargs) if supplier_detail is not True: - self.fields.pop('supplier_detail') + self.fields.pop('supplier_detail', None) @staticmethod def annotate_queryset(queryset): @@ -261,18 +279,45 @@ class PurchaseOrderSerializer( return queryset + supplier_name = serializers.CharField( + source='supplier.name', read_only=True, label=_('Supplier Name') + ) + supplier_detail = CompanyBriefSerializer( source='supplier', many=False, read_only=True ) -class PurchaseOrderCancelSerializer(serializers.Serializer): - """Serializer for cancelling a PurchaseOrder.""" +class OrderAdjustSerializer(serializers.Serializer): + """Generic serializer class for adjusting the status of an order.""" class Meta: - """Metaclass options.""" + """Metaclass options. - fields = ([],) + By default, there are no fields required for this serializer type. + """ + + fields = [] + + @property + def order(self): + """Return the order object associated with this serializer. + + Note: It is passed in via the serializer context data. + """ + return self.context['order'] + + +class PurchaseOrderHoldSerializer(OrderAdjustSerializer): + """Serializer for placing a PurchaseOrder on hold.""" + + def save(self): + """Save the serializer to 'hold' the order.""" + self.order.hold_order() + + +class PurchaseOrderCancelSerializer(OrderAdjustSerializer): + """Serializer for cancelling a PurchaseOrder.""" def get_context_data(self): """Return custom context information about the order.""" @@ -282,21 +327,19 @@ class PurchaseOrderCancelSerializer(serializers.Serializer): def save(self): """Save the serializer to 'cancel' the order.""" - order = self.context['order'] - - if not order.can_cancel: + if not self.order.can_cancel: raise ValidationError(_('Order cannot be cancelled')) - order.cancel_order() + self.order.cancel_order() -class PurchaseOrderCompleteSerializer(serializers.Serializer): +class PurchaseOrderCompleteSerializer(OrderAdjustSerializer): """Serializer for completing a purchase order.""" class Meta: """Metaclass options.""" - fields = [] + fields = ['accept_incomplete'] accept_incomplete = serializers.BooleanField( label=_('Accept Incomplete'), @@ -322,25 +365,23 @@ class PurchaseOrderCompleteSerializer(serializers.Serializer): def save(self): """Save the serializer to 'complete' the order.""" - order = self.context['order'] - order.complete_order() + self.order.complete_order() -class PurchaseOrderIssueSerializer(serializers.Serializer): +class PurchaseOrderIssueSerializer(OrderAdjustSerializer): """Serializer for issuing (sending) a purchase order.""" - class Meta: - """Metaclass options.""" - - fields = [] - def save(self): """Save the serializer to 'place' the order.""" - order = self.context['order'] - order.place_order() + self.order.place_order() -class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): +@register_importer() +class PurchaseOrderLineItemSerializer( + DataImportExportSerializerMixin, + AbstractLineItemSerializer, + InvenTreeModelSerializer, +): """Serializer class for the PurchaseOrderLineItem model.""" class Meta: @@ -350,13 +391,13 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): fields = [ 'pk', + 'part', 'quantity', 'reference', 'notes', 'order', 'order_detail', 'overdue', - 'part', 'part_detail', 'supplier_part_detail', 'received', @@ -369,22 +410,26 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): 'total_price', 'link', 'merge_items', + 'sku', + 'mpn', + 'ipn', + 'internal_part', + 'internal_part_name', ] def __init__(self, *args, **kwargs): """Initialization routine for the serializer.""" part_detail = kwargs.pop('part_detail', False) - order_detail = kwargs.pop('order_detail', False) super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail') - self.fields.pop('supplier_part_detail') + self.fields.pop('part_detail', None) + self.fields.pop('supplier_part_detail', None) if order_detail is not True: - self.fields.pop('order_detail') + self.fields.pop('order_detail', None) def skip_create_fields(self): """Return a list of fields to skip when creating a new object.""" @@ -408,6 +453,18 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): ) ) + queryset = queryset.prefetch_related( + 'order', + 'order__responsible', + 'order__stock_items', + 'part__tags', + 'part__supplier', + 'part__manufacturer_part', + 'part__manufacturer_part__manufacturer', + 'part__part__pricing_data', + 'part__part__tags', + ) + queryset = queryset.annotate( total_price=ExpressionWrapper( F('purchase_price') * F('quantity'), output_field=models.DecimalField() @@ -426,6 +483,14 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): return queryset + part = serializers.PrimaryKeyRelatedField( + queryset=part_models.SupplierPart.objects.all(), + many=False, + required=True, + allow_null=True, + label=_('Supplier Part'), + ) + quantity = serializers.FloatField(min_value=0, required=True) def validate_quantity(self, quantity): @@ -453,7 +518,7 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): ) supplier_part_detail = SupplierPartSerializer( - source='part', many=False, read_only=True + source='part', brief=True, many=False, read_only=True ) purchase_price = InvenTreeMoneySerializer(allow_null=True) @@ -482,6 +547,25 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): 'Merge items with the same part, destination and target date into one line item' ), default=True, + write_only=True, + ) + + sku = serializers.CharField(source='part.SKU', read_only=True, label=_('SKU')) + + mpn = serializers.CharField( + source='part.manufacturer_part.MPN', read_only=True, label=_('MPN') + ) + + ipn = serializers.CharField( + source='part.part.IPN', read_only=True, label=_('Internal Part Number') + ) + + internal_part = serializers.PrimaryKeyRelatedField( + source='part.part', read_only=True, many=False, label=_('Internal Part') + ) + + internal_part_name = serializers.CharField( + source='part.part.name', read_only=True, label=_('Internal Part Name') ) def validate(self, data): @@ -515,6 +599,7 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): return data +@register_importer() class PurchaseOrderExtraLineSerializer( AbstractExtraLineSerializer, InvenTreeModelSerializer ): @@ -540,7 +625,10 @@ class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): 'location', 'quantity', 'status', - 'batch_code' 'serial_numbers', + 'batch_code', + 'serial_numbers', + 'packaging', + 'note', ] line_item = serializers.PrimaryKeyRelatedField( @@ -568,7 +656,7 @@ class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): ) quantity = serializers.DecimalField( - max_digits=15, decimal_places=5, min_value=0, required=True + max_digits=15, decimal_places=5, min_value=Decimal(0), required=True ) def validate_quantity(self, quantity): @@ -598,6 +686,22 @@ class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): choices=StockStatus.items(), default=StockStatus.OK.value, label=_('Status') ) + packaging = serializers.CharField( + label=_('Packaging'), + help_text=_('Override packaging information for incoming stock items'), + required=False, + default='', + allow_blank=True, + ) + + note = serializers.CharField( + label=_('Note'), + help_text=_('Additional note for incoming stock items'), + required=False, + default='', + allow_blank=True, + ) + barcode = serializers.CharField( label=_('Barcode'), help_text=_('Scanned barcode'), @@ -750,24 +854,16 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer): status=item['status'], barcode=item.get('barcode', ''), batch_code=item.get('batch_code', ''), + packaging=item.get('packaging', ''), serials=item.get('serials', None), + notes=item.get('note', None), ) except (ValidationError, DjangoValidationError) as exc: # Catch model errors and re-throw as DRF errors raise ValidationError(detail=serializers.as_serializer_error(exc)) -class PurchaseOrderAttachmentSerializer(InvenTreeAttachmentSerializer): - """Serializers for the PurchaseOrderAttachment model.""" - - class Meta: - """Metaclass options.""" - - model = order.models.PurchaseOrderAttachment - - fields = InvenTreeAttachmentSerializer.attachment_fields(['order']) - - +@register_importer() class SalesOrderSerializer( NotesFieldMixin, TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer ): @@ -798,7 +894,7 @@ class SalesOrderSerializer( super().__init__(*args, **kwargs) if customer_detail is not True: - self.fields.pop('customer_detail') + self.fields.pop('customer_detail', None) @staticmethod def annotate_queryset(queryset): @@ -831,18 +927,12 @@ class SalesOrderSerializer( ) -class SalesOrderIssueSerializer(serializers.Serializer): +class SalesOrderIssueSerializer(OrderAdjustSerializer): """Serializer for issuing a SalesOrder.""" - class Meta: - """Metaclass options.""" - - fields = [] - def save(self): """Save the serializer to 'issue' the order.""" - order = self.context['order'] - order.issue_order() + self.order.issue_order() class SalesOrderAllocationSerializer(InvenTreeModelSerializer): @@ -885,19 +975,19 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer): super().__init__(*args, **kwargs) if not order_detail: - self.fields.pop('order_detail') + self.fields.pop('order_detail', None) if not part_detail: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) if not item_detail: - self.fields.pop('item_detail') + self.fields.pop('item_detail', None) if not location_detail: - self.fields.pop('location_detail') + self.fields.pop('location_detail', None) if not customer_detail: - self.fields.pop('customer_detail') + self.fields.pop('customer_detail', None) part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) order = serializers.PrimaryKeyRelatedField( @@ -927,7 +1017,12 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer): ) -class SalesOrderLineItemSerializer(InvenTreeModelSerializer): +@register_importer() +class SalesOrderLineItemSerializer( + DataImportExportSerializerMixin, + AbstractLineItemSerializer, + InvenTreeModelSerializer, +): """Serializer for a SalesOrderLineItem object.""" class Meta: @@ -939,8 +1034,6 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): 'pk', 'allocated', 'allocations', - 'available_stock', - 'available_variant_stock', 'customer_detail', 'quantity', 'reference', @@ -955,6 +1048,11 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): 'shipped', 'target_date', 'link', + # Annotated fields for part stocking information + 'available_stock', + 'available_variant_stock', + 'building', + 'on_order', ] def __init__(self, *args, **kwargs): @@ -970,16 +1068,16 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) if order_detail is not True: - self.fields.pop('order_detail') + self.fields.pop('order_detail', None) if allocations is not True: - self.fields.pop('allocations') + self.fields.pop('allocations', None) if customer_detail is not True: - self.fields.pop('customer_detail') + self.fields.pop('customer_detail', None) @staticmethod def annotate_queryset(queryset): @@ -987,6 +1085,8 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): - "overdue" status (boolean field) - "available_quantity" + - "building" + - "on_order" """ queryset = queryset.annotate( overdue=Case( @@ -1002,11 +1102,11 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): # Annotate each line with the available stock quantity # To do this, we need to look at the total stock and any allocations queryset = queryset.alias( - total_stock=part.filters.annotate_total_stock(reference='part__'), - allocated_to_sales_orders=part.filters.annotate_sales_order_allocations( + total_stock=part_filters.annotate_total_stock(reference='part__'), + allocated_to_sales_orders=part_filters.annotate_sales_order_allocations( reference='part__' ), - allocated_to_build_orders=part.filters.annotate_build_order_allocations( + allocated_to_build_orders=part_filters.annotate_build_order_allocations( reference='part__' ), ) @@ -1021,19 +1121,19 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): ) # Filter for "variant" stock: Variant stock items must be salable and active - variant_stock_query = part.filters.variant_stock_query( + variant_stock_query = part_filters.variant_stock_query( reference='part__' ).filter(part__salable=True, part__active=True) # Also add in available "variant" stock queryset = queryset.alias( - variant_stock_total=part.filters.annotate_variant_quantity( + variant_stock_total=part_filters.annotate_variant_quantity( variant_stock_query, reference='quantity' ), - variant_bo_allocations=part.filters.annotate_variant_quantity( + variant_bo_allocations=part_filters.annotate_variant_quantity( variant_stock_query, reference='sales_order_allocations__quantity' ), - variant_so_allocations=part.filters.annotate_variant_quantity( + variant_so_allocations=part_filters.annotate_variant_quantity( variant_stock_query, reference='allocations__quantity' ), ) @@ -1047,6 +1147,16 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): ) ) + # Add information about the quantity of parts currently on order + queryset = queryset.annotate( + on_order=part_filters.annotate_on_order_quantity(reference='part__') + ) + + # Add information about the quantity of parts currently in production + queryset = queryset.annotate( + building=part_filters.annotate_in_production_quantity(reference='part__') + ) + return queryset customer_detail = CompanyBriefSerializer( @@ -1062,6 +1172,8 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): overdue = serializers.BooleanField(required=False, read_only=True) available_stock = serializers.FloatField(read_only=True) available_variant_stock = serializers.FloatField(read_only=True) + on_order = serializers.FloatField(label=_('On Order'), read_only=True) + building = serializers.FloatField(label=_('In Production'), read_only=True) quantity = InvenTreeDecimalField() @@ -1076,6 +1188,7 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): ) +@register_importer() class SalesOrderShipmentSerializer(NotesFieldMixin, InvenTreeModelSerializer): """Serializer for the SalesOrderShipment class.""" @@ -1206,7 +1319,7 @@ class SalesOrderShipmentAllocationItemSerializer(serializers.Serializer): ) quantity = serializers.DecimalField( - max_digits=15, decimal_places=5, min_value=0, required=True + max_digits=15, decimal_places=5, min_value=Decimal(0), required=True ) def validate_quantity(self, quantity): @@ -1240,9 +1353,14 @@ class SalesOrderShipmentAllocationItemSerializer(serializers.Serializer): return data -class SalesOrderCompleteSerializer(serializers.Serializer): +class SalesOrderCompleteSerializer(OrderAdjustSerializer): """DRF serializer for manually marking a sales order as complete.""" + class Meta: + """Serializer metaclass options.""" + + fields = ['accept_incomplete'] + accept_incomplete = serializers.BooleanField( label=_('Accept Incomplete'), help_text=_('Allow order to be closed with incomplete line items'), @@ -1271,10 +1389,7 @@ class SalesOrderCompleteSerializer(serializers.Serializer): def validate(self, data): """Custom validation for the serializer.""" data = super().validate(data) - - order = self.context['order'] - - order.can_complete( + self.order.can_complete( raise_error=True, allow_incomplete_lines=str2bool(data.get('accept_incomplete', False)), ) @@ -1284,17 +1399,24 @@ class SalesOrderCompleteSerializer(serializers.Serializer): def save(self): """Save the serializer to complete the SalesOrder.""" request = self.context['request'] - order = self.context['order'] data = self.validated_data user = getattr(request, 'user', None) - order.ship_order( + self.order.ship_order( user, allow_incomplete_lines=str2bool(data.get('accept_incomplete', False)) ) -class SalesOrderCancelSerializer(serializers.Serializer): +class SalesOrderHoldSerializer(OrderAdjustSerializer): + """Serializer for placing a SalesOrder on hold.""" + + def save(self): + """Save the serializer to place the SalesOrder on hold.""" + self.order.hold_order() + + +class SalesOrderCancelSerializer(OrderAdjustSerializer): """Serializer for marking a SalesOrder as cancelled.""" def get_context_data(self): @@ -1305,9 +1427,7 @@ class SalesOrderCancelSerializer(serializers.Serializer): def save(self): """Save the serializer to cancel the order.""" - order = self.context['order'] - - order.cancel_order() + self.order.cancel_order() class SalesOrderSerialAllocationSerializer(serializers.Serializer): @@ -1512,6 +1632,7 @@ class SalesOrderShipmentAllocationSerializer(serializers.Serializer): allocation.save() +@register_importer() class SalesOrderExtraLineSerializer( AbstractExtraLineSerializer, InvenTreeModelSerializer ): @@ -1525,17 +1646,7 @@ class SalesOrderExtraLineSerializer( order_detail = SalesOrderSerializer(source='order', many=False, read_only=True) -class SalesOrderAttachmentSerializer(InvenTreeAttachmentSerializer): - """Serializers for the SalesOrderAttachment model.""" - - class Meta: - """Metaclass options.""" - - model = order.models.SalesOrderAttachment - - fields = InvenTreeAttachmentSerializer.attachment_fields(['order']) - - +@register_importer() class ReturnOrderSerializer( NotesFieldMixin, AbstractOrderSerializer, TotalPriceMixin, InvenTreeModelSerializer ): @@ -1563,7 +1674,7 @@ class ReturnOrderSerializer( super().__init__(*args, **kwargs) if customer_detail is not True: - self.fields.pop('customer_detail') + self.fields.pop('customer_detail', None) @staticmethod def annotate_queryset(queryset): @@ -1593,46 +1704,36 @@ class ReturnOrderSerializer( ) -class ReturnOrderIssueSerializer(serializers.Serializer): +class ReturnOrderHoldSerializer(OrderAdjustSerializer): + """Serializers for holding a ReturnOrder.""" + + def save(self): + """Save the serializer to 'hold' the order.""" + self.order.hold_order() + + +class ReturnOrderIssueSerializer(OrderAdjustSerializer): """Serializer for issuing a ReturnOrder.""" - class Meta: - """Metaclass options.""" - - fields = [] - def save(self): """Save the serializer to 'issue' the order.""" - order = self.context['order'] - order.issue_order() + self.order.issue_order() -class ReturnOrderCancelSerializer(serializers.Serializer): +class ReturnOrderCancelSerializer(OrderAdjustSerializer): """Serializer for cancelling a ReturnOrder.""" - class Meta: - """Metaclass options.""" - - fields = [] - def save(self): """Save the serializer to 'cancel' the order.""" - order = self.context['order'] - order.cancel_order() + self.order.cancel_order() -class ReturnOrderCompleteSerializer(serializers.Serializer): +class ReturnOrderCompleteSerializer(OrderAdjustSerializer): """Serializer for completing a ReturnOrder.""" - class Meta: - """Metaclass options.""" - - fields = [] - def save(self): """Save the serializer to 'complete' the order.""" - order = self.context['order'] - order.complete_order() + self.order.complete_order() class ReturnOrderLineItemReceiveSerializer(serializers.Serializer): @@ -1714,7 +1815,12 @@ class ReturnOrderReceiveSerializer(serializers.Serializer): order.receive_line_item(line_item, location, request.user) -class ReturnOrderLineItemSerializer(InvenTreeModelSerializer): +@register_importer() +class ReturnOrderLineItemSerializer( + DataImportExportSerializerMixin, + AbstractLineItemSerializer, + InvenTreeModelSerializer, +): """Serializer for a ReturnOrderLineItem object.""" class Meta: @@ -1749,13 +1855,13 @@ class ReturnOrderLineItemSerializer(InvenTreeModelSerializer): super().__init__(*args, **kwargs) if not order_detail: - self.fields.pop('order_detail') + self.fields.pop('order_detail', None) if not item_detail: - self.fields.pop('item_detail') + self.fields.pop('item_detail', None) if not part_detail: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) order_detail = ReturnOrderSerializer(source='order', many=False, read_only=True) item_detail = stock.serializers.StockItemSerializer( @@ -1767,6 +1873,7 @@ class ReturnOrderLineItemSerializer(InvenTreeModelSerializer): price_currency = InvenTreeCurrencySerializer(help_text=_('Line price currency')) +@register_importer() class ReturnOrderExtraLineSerializer( AbstractExtraLineSerializer, InvenTreeModelSerializer ): @@ -1778,14 +1885,3 @@ class ReturnOrderExtraLineSerializer( model = order.models.ReturnOrderExtraLine order_detail = ReturnOrderSerializer(source='order', many=False, read_only=True) - - -class ReturnOrderAttachmentSerializer(InvenTreeAttachmentSerializer): - """Serializer for the ReturnOrderAttachment model.""" - - class Meta: - """Metaclass options.""" - - model = order.models.ReturnOrderAttachment - - fields = InvenTreeAttachmentSerializer.attachment_fields(['order']) diff --git a/src/backend/InvenTree/order/status_codes.py b/src/backend/InvenTree/order/status_codes.py index cec286dc09..bc5df2bca3 100644 --- a/src/backend/InvenTree/order/status_codes.py +++ b/src/backend/InvenTree/order/status_codes.py @@ -11,6 +11,7 @@ class PurchaseOrderStatus(StatusCode): # Order status codes PENDING = 10, _('Pending'), 'secondary' # Order is pending (not yet placed) PLACED = 20, _('Placed'), 'primary' # Order has been placed with supplier + ON_HOLD = 25, _('On Hold'), 'warning' # Order is on hold COMPLETE = 30, _('Complete'), 'success' # Order has been completed CANCELLED = 40, _('Cancelled'), 'danger' # Order was cancelled LOST = 50, _('Lost'), 'warning' # Order was lost @@ -21,7 +22,11 @@ class PurchaseOrderStatusGroups: """Groups for PurchaseOrderStatus codes.""" # Open orders - OPEN = [PurchaseOrderStatus.PENDING.value, PurchaseOrderStatus.PLACED.value] + OPEN = [ + PurchaseOrderStatus.PENDING.value, + PurchaseOrderStatus.ON_HOLD.value, + PurchaseOrderStatus.PLACED.value, + ] # Failed orders FAILED = [ @@ -41,6 +46,7 @@ class SalesOrderStatus(StatusCode): 'primary', ) # Order has been issued, and is in progress SHIPPED = 20, _('Shipped'), 'success' # Order has been shipped to customer + ON_HOLD = 25, _('On Hold'), 'warning' # Order is on hold COMPLETE = 30, _('Complete'), 'success' # Order is complete CANCELLED = 40, _('Cancelled'), 'danger' # Order has been cancelled LOST = 50, _('Lost'), 'warning' # Order was lost @@ -51,7 +57,11 @@ class SalesOrderStatusGroups: """Groups for SalesOrderStatus codes.""" # Open orders - OPEN = [SalesOrderStatus.PENDING.value, SalesOrderStatus.IN_PROGRESS.value] + OPEN = [ + SalesOrderStatus.PENDING.value, + SalesOrderStatus.ON_HOLD.value, + SalesOrderStatus.IN_PROGRESS.value, + ] # Completed orders COMPLETE = [SalesOrderStatus.SHIPPED.value, SalesOrderStatus.COMPLETE.value] @@ -66,6 +76,8 @@ class ReturnOrderStatus(StatusCode): # Items have been received, and are being inspected IN_PROGRESS = 20, _('In Progress'), 'primary' + ON_HOLD = 25, _('On Hold'), 'warning' + COMPLETE = 30, _('Complete'), 'success' CANCELLED = 40, _('Cancelled'), 'danger' @@ -73,7 +85,11 @@ class ReturnOrderStatus(StatusCode): class ReturnOrderStatusGroups: """Groups for ReturnOrderStatus codes.""" - OPEN = [ReturnOrderStatus.PENDING.value, ReturnOrderStatus.IN_PROGRESS.value] + OPEN = [ + ReturnOrderStatus.PENDING.value, + ReturnOrderStatus.ON_HOLD.value, + ReturnOrderStatus.IN_PROGRESS.value, + ] class ReturnOrderLineStatus(StatusCode): diff --git a/src/backend/InvenTree/order/templates/order/order_base.html b/src/backend/InvenTree/order/templates/order/order_base.html index af422e6794..b02aafa19b 100644 --- a/src/backend/InvenTree/order/templates/order/order_base.html +++ b/src/backend/InvenTree/order/templates/order/order_base.html @@ -63,23 +63,28 @@
  • {% trans "Edit order" %}
  • - {% if order.can_cancel %} -
  • - {% trans "Cancel order" %} -
  • - {% endif %} {% if roles.purchase_order.add %}
  • {% trans "Duplicate order" %}
  • {% endif %} + {% if order.can_hold %} +
  • + {% trans "Hold order" %} +
  • + {% endif %} + {% if order.can_cancel %} +
  • + {% trans "Cancel order" %} +
  • + {% endif %}
    -{% if order.is_pending %} +{% if order.can_issue %} -{% elif order.is_open %} +{% elif order.status == PurchaseOrderStatus.PLACED %} @@ -238,7 +243,7 @@ src="{% static 'img/blank_image.png' %}" {% block js_ready %} {{ block.super }} -{% if order.status == PurchaseOrderStatus.PENDING %} +{% if order.status == PurchaseOrderStatus.PENDING or order.status == PurchaseOrderStatus.ON_HOLD %} $("#place-order").click(function() { issuePurchaseOrder( @@ -281,6 +286,7 @@ $("#complete-order").click(function() { ); }); +{% if order.can_cancel %} $("#cancel-order").click(function() { cancelPurchaseOrder( @@ -292,6 +298,21 @@ $("#cancel-order").click(function() { }, ); }); +{% endif %} + +{% if order.can_hold %} +$("#hold-order").click(function() { + + holdOrder( + '{% url "api-po-hold" order.pk %}', + { + onSuccess: function() { + window.location.reload(); + } + } + ); +}); +{% endif %} {% endif %} @@ -312,7 +333,7 @@ $("#export-order").click(function() { $('#show-qr-code').click(function() { showQRDialog( '{% trans "Purchase Order QR Code" escape %}', - '{"purchaseorder": {{ order.pk }} }' + '{{ order.barcode }}' ); }); 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 9abc95f365..78da5925ac 100644 --- a/src/backend/InvenTree/order/templates/order/purchase_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/purchase_order_detail.html @@ -132,17 +132,7 @@ }); onPanelLoad('order-attachments', function() { - loadAttachmentTable('{% url "api-po-attachment-list" %}', { - filters: { - order: {{ order.pk }}, - }, - fields: { - order: { - value: {{ order.pk }}, - hidden: true, - } - } - }); + loadAttachmentTable('purchaseorder', {{ order.pk }}); }); loadStockTable($("#stock-table"), { 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 32ccd23f85..494701abf1 100644 --- a/src/backend/InvenTree/order/templates/order/return_order_base.html +++ b/src/backend/InvenTree/order/templates/order/return_order_base.html @@ -74,11 +74,14 @@ src="{% static 'img/blank_image.png' %}" - {% if order.status == ReturnOrderStatus.PENDING %} + {% if order.can_issue %} @@ -211,7 +214,7 @@ src="{% static 'img/blank_image.png' %}" {% if roles.return_order.change %} -{% if order.status == ReturnOrderStatus.PENDING %} +{% if order.can_issue %} $('#issue-order').click(function() { issueReturnOrder({{ order.pk }}, { reload: true, @@ -234,7 +237,7 @@ $('#edit-order').click(function() { }); }); -{% if order.is_open %} +{% if order.can_cancel %} $('#cancel-order').click(function() { cancelReturnOrder( {{ order.pk }}, @@ -244,6 +247,17 @@ $('#cancel-order').click(function() { ); }); {% endif %} + +{% if order.can_hold %} +$("#hold-order").click(function() { + holdOrder( + '{% url "api-ro-hold" order.pk %}', + { + reload: true, + } + ); + }); +{% endif %} {% endif %} {% if report_enabled %} @@ -257,7 +271,7 @@ $('#print-order-report').click(function() { $('#show-qr-code').click(function() { showQRDialog( '{% trans "Return Order QR Code" escape %}', - '{"returnorder": {{ order.pk }} }' + '{{ order.barcode }}' ); }); 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 8cabf3a9e2..279ddc66cc 100644 --- a/src/backend/InvenTree/order/templates/order/return_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/return_order_detail.html @@ -189,17 +189,7 @@ onPanelLoad('order-notes', function() { // Callback function when the 'attachments' panel is loaded onPanelLoad('order-attachments', function() { - loadAttachmentTable('{% url "api-return-order-attachment-list" %}', { - filters: { - order: {{ order.pk }}, - }, - fields: { - order: { - value: {{ order.pk }}, - hidden: true, - }, - } - }); + loadAttachmentTable('returnorder', {{ order.pk }}); }); enableSidebar('returnorder'); 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 bc306502a7..c8d0179aa1 100644 --- a/src/backend/InvenTree/order/templates/order/sales_order_base.html +++ b/src/backend/InvenTree/order/templates/order/sales_order_base.html @@ -73,13 +73,16 @@ src="{% static 'img/blank_image.png' %}"
    - {% if order.is_pending %} + {% if order.status == SalesOrderStatus.PENDING or order.status == SalesOrderStatus.ON_HOLD %} @@ -280,6 +283,7 @@ $('#issue-order').click(function() { ); }); +{% if order.can_cancel %} $("#cancel-order").click(function() { cancelSalesOrder( @@ -289,6 +293,20 @@ $("#cancel-order").click(function() { } ); }); +{% endif %} + +{% if order.can_hold %} +$('#hold-order').click(function() { + holdOrder( + '{% url "api-so-hold" order.pk %}', + { + onSuccess: function() { + window.location.reload(); + } + } + ); +}); +{% endif %} $("#ship-order").click(function() { shipSalesOrder( @@ -319,7 +337,7 @@ $('#print-order-report').click(function() { $('#show-qr-code').click(function() { showQRDialog( '{% trans "Sales Order QR Code" escape %}', - '{"salesorder": {{ order.pk }} }' + '{{ order.barcode }}' ); }); 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 3b92201f10..c135211ab5 100644 --- a/src/backend/InvenTree/order/templates/order/sales_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/sales_order_detail.html @@ -203,17 +203,7 @@ onPanelLoad('order-attachments', function() { - loadAttachmentTable('{% url "api-so-attachment-list" %}', { - filters: { - order: {{ order.pk }}, - }, - fields: { - order: { - value: {{ order.pk }}, - hidden: true, - }, - } - }); + loadAttachmentTable('salesorder', {{ order.pk }}); }); loadBuildTable($("#builds-table"), { diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index 73518b7ac8..4d8a78de8a 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -258,9 +258,9 @@ class PurchaseOrderTest(OrderTest): def test_po_attachments(self): """Test the list endpoint for the PurchaseOrderAttachment model.""" - url = reverse('api-po-attachment-list') + url = reverse('api-attachment-list') - response = self.get(url) + response = self.get(url, {'model_type': 'purchaseorder'}) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -484,6 +484,9 @@ class PurchaseOrderTest(OrderTest): url = reverse('api-po-cancel', kwargs={'pk': po.pk}) + # Get an OPTIONS request from the endpoint + self.options(url, data={'context': True}, expected_code=200) + # Try to cancel the PO, but without required permissions self.post(url, {}, expected_code=403) @@ -790,14 +793,14 @@ class PurchaseOrderDownloadTest(OrderTest): """Unit tests for downloading PurchaseOrder data via the API endpoint.""" required_cols = [ - 'id', - 'line_items', - 'description', - 'issue_date', - 'notes', - 'reference', - 'status', - 'supplier_reference', + 'ID', + 'Line Items', + 'Description', + 'Issue Date', + 'Order Currency', + 'Reference', + 'Order Status', + 'Supplier Reference', ] excluded_cols = ['metadata'] @@ -815,7 +818,7 @@ class PurchaseOrderDownloadTest(OrderTest): reverse('api-po-list'), {'export': 'csv'}, expected_code=200, - expected_fn='InvenTree_PurchaseOrders.csv', + expected_fn=r'InvenTree_PurchaseOrder_.+\.csv', ) as file: data = self.process_csv( file, @@ -825,10 +828,10 @@ class PurchaseOrderDownloadTest(OrderTest): ) for row in data: - order = models.PurchaseOrder.objects.get(pk=row['id']) + order = models.PurchaseOrder.objects.get(pk=row['ID']) - self.assertEqual(order.description, row['description']) - self.assertEqual(order.reference, row['reference']) + self.assertEqual(order.description, row['Description']) + self.assertEqual(order.reference, row['Reference']) def test_download_line_items(self): """Test that the PurchaseOrderLineItems can be downloaded to a file.""" @@ -837,7 +840,7 @@ class PurchaseOrderDownloadTest(OrderTest): {'export': 'xlsx'}, decode=False, expected_code=200, - expected_fn='InvenTree_PurchaseOrderItems.xlsx', + expected_fn=r'InvenTree_PurchaseOrderLineItem.+\.xlsx', ) as file: self.assertIsInstance(file, io.BytesIO) @@ -1134,6 +1137,56 @@ class PurchaseOrderReceiveTest(OrderTest): self.assertEqual(item.quantity, 10) self.assertEqual(item.batch, 'B-xyz-789') + def test_packaging(self): + """Test that we can supply a 'packaging' value when receiving items.""" + line_1 = models.PurchaseOrderLineItem.objects.get(pk=1) + line_2 = models.PurchaseOrderLineItem.objects.get(pk=2) + + line_1.part.packaging = 'Reel' + line_1.part.save() + + line_2.part.packaging = 'Tube' + line_2.part.save() + + # Receive items without packaging data + data = { + 'items': [ + {'line_item': line_1.pk, 'quantity': 1}, + {'line_item': line_2.pk, 'quantity': 1}, + ], + 'location': 1, + } + + n = StockItem.objects.count() + + self.post(self.url, data, expected_code=201) + + item_1 = StockItem.objects.filter(supplier_part=line_1.part).first() + self.assertEqual(item_1.packaging, 'Reel') + + item_2 = StockItem.objects.filter(supplier_part=line_2.part).first() + self.assertEqual(item_2.packaging, 'Tube') + + # Receive items and override packaging data + data = { + 'items': [ + {'line_item': line_1.pk, 'quantity': 1, 'packaging': 'Bag'}, + {'line_item': line_2.pk, 'quantity': 1, 'packaging': 'Box'}, + ], + 'location': 1, + } + + self.post(self.url, data, expected_code=201) + + item_1 = StockItem.objects.filter(supplier_part=line_1.part).last() + self.assertEqual(item_1.packaging, 'Bag') + + item_2 = StockItem.objects.filter(supplier_part=line_2.part).last() + self.assertEqual(item_2.packaging, 'Box') + + # Check that the expected number of stock items has been created + self.assertEqual(n + 4, StockItem.objects.count()) + class SalesOrderTest(OrderTest): """Tests for the SalesOrder API.""" @@ -1260,9 +1313,12 @@ class SalesOrderTest(OrderTest): def test_so_attachments(self): """Test the list endpoint for the SalesOrderAttachment model.""" - url = reverse('api-so-attachment-list') + url = reverse('api-attachment-list') - self.get(url) + # Filter by 'salesorder' + self.get( + url, data={'model_type': 'salesorder', 'model_id': 1}, expected_code=200 + ) def test_so_operations(self): """Test that we can create / edit and delete a SalesOrder via the API.""" @@ -1467,13 +1523,13 @@ class SalesOrderTest(OrderTest): order.save() # Download file, check we get a 200 response - for fmt in ['csv', 'xls', 'xlsx']: + for fmt in ['csv', 'xlsx', 'tsv']: self.download_file( reverse('api-so-list'), {'export': fmt}, decode=True if fmt == 'csv' else False, expected_code=200, - expected_fn=f'InvenTree_SalesOrders.{fmt}', + expected_fn=r'InvenTree_SalesOrder_.+', ) def test_sales_order_complete(self): @@ -1629,17 +1685,13 @@ class SalesOrderDownloadTest(OrderTest): with self.assertRaises(ValueError): self.download_file(url, {}, expected_code=200) - def test_download_xls(self): - """Test xls file download.""" + def test_download_xlsx(self): + """Test xlsx file download.""" url = reverse('api-so-list') # Download .xls file with self.download_file( - url, - {'export': 'xls'}, - expected_code=200, - expected_fn='InvenTree_SalesOrders.xls', - decode=False, + url, {'export': 'xlsx'}, expected_code=200, decode=False ) as file: self.assertIsInstance(file, io.BytesIO) @@ -1648,25 +1700,22 @@ class SalesOrderDownloadTest(OrderTest): url = reverse('api-so-list') required_cols = [ - 'line_items', - 'id', - 'reference', - 'customer', - 'status', - 'shipment_date', - 'notes', - 'description', + 'Line Items', + 'ID', + 'Reference', + 'Customer', + 'Order Status', + 'Shipment Date', + 'Description', + 'Project Code', + 'Responsible', ] excluded_cols = ['metadata'] # Download .xls file with self.download_file( - url, - {'export': 'csv'}, - expected_code=200, - expected_fn='InvenTree_SalesOrders.csv', - decode=True, + url, {'export': 'csv'}, expected_code=200, decode=True ) as file: data = self.process_csv( file, @@ -1676,18 +1725,14 @@ class SalesOrderDownloadTest(OrderTest): ) for line in data: - order = models.SalesOrder.objects.get(pk=line['id']) + order = models.SalesOrder.objects.get(pk=line['ID']) - self.assertEqual(line['description'], order.description) - self.assertEqual(line['status'], str(order.status)) + self.assertEqual(line['Description'], order.description) + self.assertEqual(line['Order Status'], str(order.status)) # Download only outstanding sales orders with self.download_file( - url, - {'export': 'tsv', 'outstanding': True}, - expected_code=200, - expected_fn='InvenTree_SalesOrders.tsv', - decode=True, + url, {'export': 'tsv', 'outstanding': True}, expected_code=200, decode=True ) as file: self.process_csv( file, @@ -1965,6 +2010,7 @@ class ReturnOrderTests(InvenTreeAPITestCase): 'supplier_part', 'stock', ] + roles = ['return_order.view'] def test_options(self): """Test the OPTIONS endpoint.""" @@ -1983,6 +2029,18 @@ class ReturnOrderTests(InvenTreeAPITestCase): self.assertEqual(reference['required'], True) self.assertEqual(reference['type'], 'string') + def test_project_code(self): + """Test the 'project_code' serializer field.""" + self.assignRole('return_order.add') + response = self.options(reverse('api-return-order-list'), expected_code=200) + project_code = response.data['actions']['POST']['project_code'] + + self.assertFalse(project_code['required']) + self.assertFalse(project_code['read_only']) + self.assertEqual(project_code['type'], 'related field') + self.assertEqual(project_code['label'], 'Project Code') + self.assertEqual(project_code['model'], 'projectcode') + def test_list(self): """Tests for the list endpoint.""" url = reverse('api-return-order-list') diff --git a/src/backend/InvenTree/part/admin.py b/src/backend/InvenTree/part/admin.py index e526dfc7ab..89a23cefcc 100644 --- a/src/backend/InvenTree/part/admin.py +++ b/src/backend/InvenTree/part/admin.py @@ -353,14 +353,6 @@ class PartRelatedAdmin(admin.ModelAdmin): autocomplete_fields = ('part_1', 'part_2') -class PartAttachmentAdmin(admin.ModelAdmin): - """Admin class for the PartAttachment model.""" - - list_display = ('part', 'attachment', 'comment') - - autocomplete_fields = ('part',) - - class PartTestTemplateAdmin(admin.ModelAdmin): """Admin class for the PartTestTemplate model.""" @@ -409,6 +401,9 @@ class BomItemResource(InvenTreeResource): part_ipn = Field( attribute='sub_part__IPN', column_name=_('Part IPN'), readonly=True ) + part_revision = Field( + attribute='sub_part__revision', column_name=_('Part Revision'), readonly=True + ) part_name = Field( attribute='sub_part__name', column_name=_('Part Name'), readonly=True ) @@ -607,7 +602,6 @@ class PartInternalPriceBreakAdmin(admin.ModelAdmin): admin.site.register(models.Part, PartAdmin) admin.site.register(models.PartCategory, PartCategoryAdmin) admin.site.register(models.PartRelated, PartRelatedAdmin) -admin.site.register(models.PartAttachment, PartAttachmentAdmin) admin.site.register(models.BomItem, BomItemAdmin) admin.site.register(models.PartParameterTemplate, ParameterTemplateAdmin) admin.site.register(models.PartParameter, ParameterAdmin) diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index 327a03e75d..513048a03c 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -19,12 +19,8 @@ import order.models import part.filters from build.models import Build, BuildItem from build.status_codes import BuildStatusGroups -from InvenTree.api import ( - APIDownloadMixin, - AttachmentMixin, - ListCreateDestroyAPIView, - MetadataView, -) +from importer.mixins import DataExportViewMixin +from InvenTree.api import ListCreateDestroyAPIView, MetadataView from InvenTree.filters import ( ORDER_FILTER, ORDER_FILTER_ALIAS, @@ -33,7 +29,7 @@ from InvenTree.filters import ( InvenTreeDateFilter, InvenTreeSearchFilter, ) -from InvenTree.helpers import DownloadFile, increment_serial_number, isNull, str2bool +from InvenTree.helpers import increment_serial_number, isNull, str2bool from InvenTree.mixins import ( CreateAPI, CustomRetrieveUpdateDestroyAPI, @@ -47,7 +43,6 @@ from InvenTree.mixins import ( from InvenTree.permissions import RolePermission from InvenTree.serializers import EmptySerializer from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups -from part.admin import PartCategoryResource, PartResource from stock.models import StockLocation from . import serializers as part_serializers @@ -56,7 +51,6 @@ from .models import ( BomItem, BomItemSubstitute, Part, - PartAttachment, PartCategory, PartCategoryParameterTemplate, PartInternalPriceBreak, @@ -143,6 +137,21 @@ class CategoryFilter(rest_filters.FilterSet): return queryset + top_level = rest_filters.BooleanFilter( + label=_('Top Level'), + method='filter_top_level', + help_text=_('Filter by top-level categories'), + ) + + def filter_top_level(self, queryset, name, value): + """Filter by top-level categories.""" + cascade = str2bool(self.data.get('cascade', False)) + + if value and not cascade: + return queryset.filter(parent=None) + + return queryset + cascade = rest_filters.BooleanFilter( label=_('Cascade'), method='filter_cascade', @@ -154,10 +163,11 @@ class CategoryFilter(rest_filters.FilterSet): Note: If the "parent" filter is provided, we offload the logic to that method. """ - parent = self.data.get('parent', None) + parent = str2bool(self.data.get('parent', None)) + top_level = str2bool(self.data.get('top_level', None)) # If the parent is *not* provided, update the results based on the "cascade" value - if not parent: + if not parent or top_level: if not value: # If "cascade" is False, only return top-level categories queryset = queryset.filter(parent=None) @@ -218,7 +228,7 @@ class CategoryFilter(rest_filters.FilterSet): return queryset -class CategoryList(CategoryMixin, APIDownloadMixin, ListCreateAPI): +class CategoryList(CategoryMixin, DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of PartCategory objects. - GET: Return a list of PartCategory objects @@ -227,14 +237,6 @@ class CategoryList(CategoryMixin, APIDownloadMixin, ListCreateAPI): filterset_class = CategoryFilter - def download_queryset(self, queryset, export_format): - """Download the filtered queryset as a data file.""" - dataset = PartCategoryResource().export(queryset=queryset) - filedata = dataset.export(export_format) - filename = f'InvenTree_Categories.{export_format}' - - return DownloadFile(filedata, filename) - filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['name', 'pathstring', 'level', 'tree_id', 'lft', 'part_count'] @@ -242,7 +244,7 @@ class CategoryList(CategoryMixin, APIDownloadMixin, ListCreateAPI): # Use hierarchical ordering by default ordering = ['tree_id', 'lft', 'name'] - search_fields = ['name', 'description'] + search_fields = ['name', 'description', 'pathstring'] class CategoryDetail(CategoryMixin, CustomRetrieveUpdateDestroyAPI): @@ -317,7 +319,7 @@ class CategoryTree(ListAPI): return queryset -class CategoryParameterList(ListCreateAPI): +class CategoryParameterList(DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of PartCategoryParameterTemplate objects. - GET: Return a list of PartCategoryParameterTemplate objects @@ -372,7 +374,7 @@ class PartSalePriceDetail(RetrieveUpdateDestroyAPI): serializer_class = part_serializers.PartSalePriceSerializer -class PartSalePriceList(ListCreateAPI): +class PartSalePriceList(DataExportViewMixin, ListCreateAPI): """API endpoint for list view of PartSalePriceBreak model.""" queryset = PartSellPriceBreak.objects.all() @@ -391,7 +393,7 @@ class PartInternalPriceDetail(RetrieveUpdateDestroyAPI): serializer_class = part_serializers.PartInternalPriceSerializer -class PartInternalPriceList(ListCreateAPI): +class PartInternalPriceList(DataExportViewMixin, ListCreateAPI): """API endpoint for list view of PartInternalPriceBreak model.""" queryset = PartInternalPriceBreak.objects.all() @@ -404,22 +406,6 @@ class PartInternalPriceList(ListCreateAPI): ordering = 'quantity' -class PartAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): - """API endpoint for listing, creating and bulk deleting a PartAttachment (file upload).""" - - queryset = PartAttachment.objects.all() - serializer_class = part_serializers.PartAttachmentSerializer - - filterset_fields = ['part'] - - -class PartAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): - """Detail endpoint for PartAttachment model.""" - - queryset = PartAttachment.objects.all() - serializer_class = part_serializers.PartAttachmentSerializer - - class PartTestTemplateFilter(rest_filters.FilterSet): """Custom filterset class for the PartTestTemplateList endpoint.""" @@ -483,7 +469,7 @@ class PartTestTemplateDetail(PartTestTemplateMixin, RetrieveUpdateDestroyAPI): pass -class PartTestTemplateList(PartTestTemplateMixin, ListCreateAPI): +class PartTestTemplateList(PartTestTemplateMixin, DataExportViewMixin, ListCreateAPI): """API endpoint for listing (and creating) a PartTestTemplate.""" filterset_class = PartTestTemplateFilter @@ -924,7 +910,27 @@ class PartFilter(rest_filters.FilterSet): """Metaclass options for this filter set.""" model = Part - fields = [] + fields = ['revision_of'] + + is_revision = rest_filters.BooleanFilter( + label=_('Is Revision'), method='filter_is_revision' + ) + + def filter_is_revision(self, queryset, name, value): + """Filter by whether the Part is a revision or not.""" + if str2bool(value): + return queryset.exclude(revision_of=None) + return queryset.filter(revision_of=None) + + has_revisions = rest_filters.BooleanFilter( + label=_('Has Revisions'), method='filter_has_revisions' + ) + + def filter_has_revisions(self, queryset, name, value): + """Filter by whether the Part has any revisions or not.""" + if str2bool(value): + return queryset.exclude(revision_count=0) + return queryset.filter(revision_count=0) has_units = rest_filters.BooleanFilter(label='Has units', method='filter_has_units') @@ -1120,9 +1126,9 @@ class PartFilter(rest_filters.FilterSet): # 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) + for item in queryset: + if item.is_bom_valid() == value: + pks.append(item.pk) return queryset.filter(pk__in=pks) @@ -1157,6 +1163,8 @@ class PartFilter(rest_filters.FilterSet): active = rest_filters.BooleanFilter() + locked = rest_filters.BooleanFilter() + virtual = rest_filters.BooleanFilter() tags_name = rest_filters.CharFilter(field_name='tags__name', lookup_expr='iexact') @@ -1187,6 +1195,10 @@ class PartMixin: queryset = part_serializers.PartSerializer.annotate_queryset(queryset) + # Annotate with parameter template data? + if str2bool(self.request.query_params.get('parameters', False)): + queryset = queryset.prefetch_related('parameters', 'parameters__template') + return queryset def get_serializer(self, *args, **kwargs): @@ -1215,6 +1227,7 @@ class PartMixin: kwargs['parameters'] = str2bool(params.get('parameters', None)) kwargs['category_detail'] = str2bool(params.get('category_detail', False)) + kwargs['location_detail'] = str2bool(params.get('location_detail', False)) kwargs['path_detail'] = str2bool(params.get('path_detail', False)) except AttributeError: @@ -1230,21 +1243,12 @@ class PartMixin: return context -class PartList(PartMixin, APIDownloadMixin, ListCreateAPI): +class PartList(PartMixin, DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of Part objects, or creating a new Part instance.""" filterset_class = PartFilter is_create = True - def download_queryset(self, queryset, export_format): - """Download the filtered queryset as a data file.""" - dataset = PartResource().export(queryset=queryset) - - filedata = dataset.export(export_format) - filename = f'InvenTree_Parts.{export_format}' - - return DownloadFile(filedata, filename) - def filter_queryset(self, queryset): """Perform custom filtering of the queryset.""" params = self.request.query_params @@ -1374,11 +1378,14 @@ class PartList(PartMixin, APIDownloadMixin, ListCreateAPI): 'total_in_stock', 'unallocated_stock', 'category', + 'default_location', 'last_stocktake', 'units', 'pricing_min', 'pricing_max', 'pricing_updated', + 'revision', + 'revision_count', ] ordering_field_aliases = { @@ -1540,7 +1547,9 @@ class PartParameterTemplateMixin: return queryset -class PartParameterTemplateList(PartParameterTemplateMixin, ListCreateAPI): +class PartParameterTemplateList( + PartParameterTemplateMixin, DataExportViewMixin, ListCreateAPI +): """API endpoint for accessing a list of PartParameterTemplate objects. - GET: Return list of PartParameterTemplate objects @@ -1621,7 +1630,7 @@ class PartParameterFilter(rest_filters.FilterSet): return queryset.filter(part=part) -class PartParameterList(PartParameterAPIMixin, ListCreateAPI): +class PartParameterList(PartParameterAPIMixin, DataExportViewMixin, ListCreateAPI): """API endpoint for accessing a list of PartParameter objects. - GET: Return list of PartParameter objects @@ -1849,7 +1858,7 @@ class BomMixin: return queryset -class BomList(BomMixin, ListCreateDestroyAPIView): +class BomList(BomMixin, DataExportViewMixin, ListCreateDestroyAPIView): """API endpoint for accessing a list of BomItem objects. - GET: Return list of BomItem objects @@ -1857,7 +1866,6 @@ class BomList(BomMixin, ListCreateDestroyAPIView): """ filterset_class = BomFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS search_fields = [ @@ -1871,6 +1879,7 @@ class BomList(BomMixin, ListCreateDestroyAPIView): ] ordering_fields = [ + 'can_build', 'quantity', 'sub_part', 'available_stock', @@ -1878,6 +1887,7 @@ class BomList(BomMixin, ListCreateDestroyAPIView): 'inherited', 'optional', 'consumable', + 'validated', 'pricing_min', 'pricing_max', 'pricing_min_total', @@ -1892,6 +1902,12 @@ class BomList(BomMixin, ListCreateDestroyAPIView): 'pricing_updated': 'sub_part__pricing_data__updated', } + def validate_delete(self, queryset, request) -> None: + """Ensure that there are no 'locked' items.""" + for bom_item in queryset: + # Note: Calling check_part_lock may raise a ValidationError + bom_item.check_part_lock(bom_item.part) + class BomDetail(BomMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a single BomItem object.""" @@ -2059,18 +2075,6 @@ part_api_urls = [ ), ]), ), - # Base URL for PartAttachment API endpoints - path( - 'attachment/', - include([ - path( - '/', - PartAttachmentDetail.as_view(), - name='api-part-attachment-detail', - ), - path('', PartAttachmentList.as_view(), name='api-part-attachment-list'), - ]), - ), # Base URL for part sale pricing path( 'sale-price/', diff --git a/src/backend/InvenTree/part/bom.py b/src/backend/InvenTree/part/bom.py index 88b67d17e0..d692b66ad9 100644 --- a/src/backend/InvenTree/part/bom.py +++ b/src/backend/InvenTree/part/bom.py @@ -117,6 +117,14 @@ def ExportBom( for bom_item in bom_items: substitutes = BomItemSubstitute.objects.filter(bom_item=bom_item) for s_idx, substitute in enumerate(substitutes): + """Create substitute part IPN column""" + name = f'{_("Substitute IPN")}{s_idx + 1}' + value = substitute.part.IPN + try: + substitute_cols[name].update({col_index: value}) + except KeyError: + substitute_cols[name] = {col_index: value} + """Create substitute part name column""" name = f'{_("Substitute Part")}{s_idx + 1}' value = substitute.part.name diff --git a/src/backend/InvenTree/part/filters.py b/src/backend/InvenTree/part/filters.py index 0b9fafb983..2a35b80714 100644 --- a/src/backend/InvenTree/part/filters.py +++ b/src/backend/InvenTree/part/filters.py @@ -296,15 +296,12 @@ def annotate_default_location(reference=''): rght__gt=OuterRef(f'{reference}rght'), level__lte=OuterRef(f'{reference}level'), parent__isnull=False, - ) + default_location__isnull=False, + ).order_by('-level') return Coalesce( F(f'{reference}default_location'), - Subquery( - subquery.order_by('-level') - .filter(default_location__isnull=False) - .values('default_location') - ), + Subquery(subquery.values('default_location')[:1]), Value(None), output_field=IntegerField(), ) diff --git a/src/backend/InvenTree/part/migrations/0014_partparameter.py b/src/backend/InvenTree/part/migrations/0014_partparameter.py index a1eef38ec6..e9058bbdf6 100644 --- a/src/backend/InvenTree/part/migrations/0014_partparameter.py +++ b/src/backend/InvenTree/part/migrations/0014_partparameter.py @@ -19,5 +19,8 @@ class Migration(migrations.Migration): ('data', models.CharField(help_text='Parameter Value', max_length=100)), ('part', models.ForeignKey(help_text='Parent Part', on_delete=django.db.models.deletion.CASCADE, related_name='parameters', to='part.Part')), ], + options={ + 'verbose_name': 'Part Parameter', + }, ), ] diff --git a/src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py b/src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py index b981358519..a05555beb5 100644 --- a/src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py +++ b/src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py @@ -18,6 +18,9 @@ class Migration(migrations.Migration): ('name', models.CharField(help_text='Parameter Name', max_length=100)), ('units', models.CharField(blank=True, help_text='Parameter Units', max_length=25)), ], + options={ + 'verbose_name': 'Part Parameter Template', + }, ), migrations.RemoveField( model_name='partparameter', diff --git a/src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py b/src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py index 29fb25f1e7..6b1403b0be 100644 --- a/src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py +++ b/src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py @@ -14,6 +14,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='partattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment), + field=models.FileField(help_text='Select file to attach', upload_to='attachments'), ), ] diff --git a/src/backend/InvenTree/part/migrations/0040_parttesttemplate.py b/src/backend/InvenTree/part/migrations/0040_parttesttemplate.py index 45e270c88c..4471cf19c5 100644 --- a/src/backend/InvenTree/part/migrations/0040_parttesttemplate.py +++ b/src/backend/InvenTree/part/migrations/0040_parttesttemplate.py @@ -19,5 +19,8 @@ class Migration(migrations.Migration): ('required', models.BooleanField(default=True, help_text='Is this test required to pass?', verbose_name='Required')), ('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='test_templates', to='part.Part')), ], + options={ + 'verbose_name': 'Part Test Template', + }, ), ] diff --git a/src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py b/src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py index 1d49dcbfac..8332d353af 100644 --- a/src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py +++ b/src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py @@ -24,6 +24,7 @@ class Migration(migrations.Migration): ('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='salepricebreaks', to='part.Part')), ], options={ + 'verbose_name': 'Part Sale Price Break', 'unique_together': {('part', 'quantity')}, }, ), diff --git a/src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py b/src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py index 6f2809af12..e6742dd6c8 100644 --- a/src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py +++ b/src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py @@ -19,6 +19,9 @@ class Migration(migrations.Migration): ('category', models.ForeignKey(help_text='Part Category', on_delete=django.db.models.deletion.CASCADE, related_name='parameter_templates', to='part.PartCategory')), ('parameter_template', models.ForeignKey(help_text='Parameter Template', on_delete=django.db.models.deletion.CASCADE, related_name='part_categories', to='part.PartParameterTemplate')), ], + options={ + 'verbose_name': 'Part Category Parameter Template', + }, ), migrations.AddConstraint( model_name='partcategoryparametertemplate', diff --git a/src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py b/src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py index 57943347a1..90cc04f885 100644 --- a/src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py +++ b/src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py @@ -98,7 +98,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='partattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), ), migrations.AlterField( model_name='partattachment', diff --git a/src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py b/src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py index d484a7adce..f516846ae2 100644 --- a/src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py +++ b/src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py @@ -20,6 +20,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='partattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), ), ] diff --git a/src/backend/InvenTree/part/migrations/0124_delete_partattachment.py b/src/backend/InvenTree/part/migrations/0124_delete_partattachment.py new file mode 100644 index 0000000000..5213211aa4 --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0124_delete_partattachment.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.12 on 2024-06-09 09:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0050_auto_20240508_0138'), + ('common', '0026_auto_20240608_1238'), + ('company', '0069_company_active'), + ('order', '0099_alter_salesorder_status'), + ('part', '0123_parttesttemplate_choices'), + ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') + ] + + operations = [ + migrations.DeleteModel( + name='PartAttachment', + ), + ] diff --git a/src/backend/InvenTree/part/migrations/0125_part_locked.py b/src/backend/InvenTree/part/migrations/0125_part_locked.py new file mode 100644 index 0000000000..a5ac79876c --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0125_part_locked.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.12 on 2024-06-27 01:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0124_delete_partattachment'), + ] + + operations = [ + migrations.AddField( + model_name='part', + name='locked', + field=models.BooleanField(default=False, help_text='Locked parts cannot be edited', verbose_name='Locked'), + ), + ] diff --git a/src/backend/InvenTree/part/migrations/0126_part_revision_of.py b/src/backend/InvenTree/part/migrations/0126_part_revision_of.py new file mode 100644 index 0000000000..e5324d60a9 --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0126_part_revision_of.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.12 on 2024-07-07 04:42 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0125_part_locked'), + ] + + operations = [ + migrations.AddField( + model_name='part', + name='revision_of', + field=models.ForeignKey(help_text='Is this part a revision of another part?', null=True, blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='revisions', to='part.part', verbose_name='Revision Of'), + ), + ] diff --git a/src/backend/InvenTree/part/migrations/0127_remove_partcategory_icon_partcategory__icon.py b/src/backend/InvenTree/part/migrations/0127_remove_partcategory_icon_partcategory__icon.py new file mode 100644 index 0000000000..0e9e148fb2 --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0127_remove_partcategory_icon_partcategory__icon.py @@ -0,0 +1,29 @@ +# Generated by Django 4.2.11 on 2024-07-20 22:30 + +import common.icons +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0126_part_revision_of'), + ] + + operations = [ + migrations.SeparateDatabaseAndState( + database_operations=[], + state_operations=[ + migrations.RenameField( + model_name='partcategory', + old_name='icon', + new_name='_icon', + ), + migrations.AlterField( + model_name='partcategory', + name='_icon', + field=models.CharField(blank=True, db_column='icon', help_text='Icon (optional)', max_length=100, validators=[common.icons.validate_icon], verbose_name='Icon'), + ), + ], + ), + ] diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index bd84892ff3..b84b24f70e 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -5,6 +5,7 @@ from __future__ import annotations import decimal import hashlib import logging +import math import os import re from datetime import timedelta @@ -49,8 +50,8 @@ 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 get_global_setting, set_global_setting +from common.icons import validate_icon +from common.settings import get_global_setting from company.models import SupplierPart from InvenTree import helpers, validators from InvenTree.fields import InvenTreeURLField @@ -79,6 +80,8 @@ class PartCategory(InvenTree.models.InvenTreeTree): ITEM_PARENT_KEY = 'category' + EXTRA_PATH_FIELDS = ['icon'] + class Meta: """Metaclass defines extra model properties.""" @@ -122,13 +125,37 @@ class PartCategory(InvenTree.models.InvenTreeTree): help_text=_('Default keywords for parts in this category'), ) - icon = models.CharField( + _icon = models.CharField( blank=True, max_length=100, verbose_name=_('Icon'), help_text=_('Icon (optional)'), + validators=[validate_icon], + db_column='icon', ) + @property + def icon(self): + """Return the icon associated with this PartCategory or the default icon.""" + if self._icon: + return self._icon + + if default_icon := get_global_setting('PART_CATEGORY_DEFAULT_ICON', cache=True): + return default_icon + + return '' + + @icon.setter + def icon(self, value): + """Setter for icon field.""" + default_icon = get_global_setting('PART_CATEGORY_DEFAULT_ICON', cache=True) + + # if icon is not defined previously and new value is default icon, do not save it + if not self._icon and value == default_icon: + return + + self._icon = value + @staticmethod def get_api_url(): """Return the API url associated with the PartCategory model.""" @@ -341,6 +368,7 @@ class PartManager(TreeManager): @cleanup.ignore class Part( + InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, report.mixins.InvenTreeReportMixin, @@ -376,6 +404,7 @@ class Part( purchaseable: Can this part be purchased from suppliers? trackable: Trackable parts can have unique serial numbers assigned, etc, etc active: Is this part active? Parts are deactivated instead of being deleted + locked: This part is locked and cannot be edited virtual: Is this part "virtual"? e.g. a software product or similar notes: Additional notes field for this part creation_date: Date that this part was added to the database @@ -413,6 +442,11 @@ class Part( """Return API query filters for limiting field results against this instance.""" return {'variant_of': {'exclude_tree': self.pk}} + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'PA' + def report_context(self): """Return custom report context information.""" return { @@ -423,11 +457,11 @@ class Part( 'name': self.name, 'parameters': self.parameters_map(), 'part': self, - 'qr_data': self.format_barcode(brief=True), + 'qr_data': self.barcode, 'qr_url': self.get_absolute_url(), 'revision': self.revision, 'test_template_list': self.getTestTemplates(), - 'test_templates': self.getTestTemplates(), + 'test_templates': self.getTestTemplateMap(), } def get_context_data(self, request, **kwargs): @@ -480,6 +514,9 @@ class Part( - The part is still active - The part is used in a BOM for a different part. """ + if self.locked: + raise ValidationError(_('Cannot delete this part as it is locked')) + if self.active: raise ValidationError(_('Cannot delete this part as it is still active')) @@ -656,6 +693,49 @@ class Part( if match is None: raise ValidationError(_(f'IPN must match regex pattern {pattern}')) + def validate_revision(self): + """Check the 'revision' and 'revision_of' fields.""" + # Part cannot be a revision of itself + if self.revision_of: + if self.revision_of == self: + raise ValidationError({ + 'revision_of': _('Part cannot be a revision of itself') + }) + + # Part cannot be a revision of a part which is itself a revision + if self.revision_of.revision_of: + raise ValidationError({ + 'revision_of': _( + 'Cannot make a revision of a part which is already a revision' + ) + }) + + # If this part is a revision, it must have a revision code + if not self.revision: + raise ValidationError({ + 'revision': _('Revision code must be specified') + }) + + if get_global_setting('PART_REVISION_ASSEMBLY_ONLY'): + if not self.assembly or not self.revision_of.assembly: + raise ValidationError({ + 'revision_of': _( + 'Revisions are only allowed for assembly parts' + ) + }) + + # Cannot have a revision of a "template" part + if self.revision_of.is_template: + raise ValidationError({ + 'revision_of': _('Cannot make a revision of a template part') + }) + + # parent part must point to the same template (via variant_of) + if self.variant_of != self.revision_of.variant_of: + raise ValidationError({ + 'revision_of': _('Parent part must point to the same template') + }) + def validate_serial_number( self, serial: str, @@ -836,15 +916,24 @@ class Part( 'IPN': _('Duplicate IPN not allowed in part settings') }) + if self.revision_of and self.revision: + if ( + Part.objects.exclude(pk=self.pk) + .filter(revision_of=self.revision_of, revision=self.revision) + .exists() + ): + raise ValidationError(_('Duplicate part revision already exists.')) + # Ensure unique across (Name, revision, IPN) (as specified) - if ( - Part.objects.exclude(pk=self.pk) - .filter(name=self.name, revision=self.revision, IPN=self.IPN) - .exists() - ): - raise ValidationError( - _('Part with this Name, IPN and Revision already exists.') - ) + if self.revision or self.IPN: + if ( + Part.objects.exclude(pk=self.pk) + .filter(name=self.name, revision=self.revision, IPN=self.IPN) + .exists() + ): + raise ValidationError( + _('Part with this Name, IPN and Revision already exists.') + ) def clean(self): """Perform cleaning operations for the Part model. @@ -861,6 +950,9 @@ class Part( 'category': _('Parts cannot be assigned to structural part categories!') }) + # Check the 'revision' and 'revision_of' fields + self.validate_revision() + super().clean() # Strip IPN field @@ -948,6 +1040,16 @@ class Part( verbose_name=_('Revision'), ) + revision_of = models.ForeignKey( + 'part.Part', + related_name='revisions', + null=True, + blank=True, + on_delete=models.SET_NULL, + help_text=_('Is this part a revision of another part?'), + verbose_name=_('Revision Of'), + ) + link = InvenTreeURLField( blank=True, null=True, @@ -1080,6 +1182,12 @@ class Part( default=True, verbose_name=_('Active'), help_text=_('Is this part active?') ) + locked = models.BooleanField( + default=False, + verbose_name=_('Locked'), + help_text=_('Locked parts cannot be edited'), + ) + virtual = models.BooleanField( default=part_settings.part_virtual_default, verbose_name=_('Virtual'), @@ -2208,24 +2316,6 @@ class Part( required=True, enabled=enabled, include_parent=include_parent ) - @property - def attachment_count(self): - """Count the number of attachments for this part. - - If the part is a variant of a template part, - include the number of attachments for the template part. - """ - return self.part_attachments.count() - - @property - def part_attachments(self): - """Return *all* attachments for this part, potentially including attachments for template parts above this one.""" - ancestors = self.get_ancestors(include_self=True) - - attachments = PartAttachment.objects.filter(part__in=ancestors) - - return attachments - def sales_orders(self): """Return a list of sales orders which reference this part.""" orders = [] @@ -3299,32 +3389,13 @@ class PartStocktakeReport(models.Model): ) -class PartAttachment(InvenTree.models.InvenTreeAttachment): - """Model for storing file attachments against a Part object.""" - - @staticmethod - def get_api_url(): - """Return the list API endpoint URL associated with the PartAttachment model.""" - return reverse('api-part-attachment-list') - - def getSubdir(self): - """Returns the media subdirectory where part attachments are stored.""" - return os.path.join('part_files', str(self.part.id)) - - part = models.ForeignKey( - Part, - on_delete=models.CASCADE, - verbose_name=_('Part'), - related_name='attachments', - ) - - class PartSellPriceBreak(common.models.PriceBreak): """Represents a price break for selling this part.""" class Meta: """Metaclass providing extra model definition.""" + verbose_name = _('Part Sale Price Break') unique_together = ('part', 'quantity') @staticmethod @@ -3433,6 +3504,11 @@ class PartTestTemplate(InvenTree.models.InvenTreeMetadataModel): run on the model (refer to the validate_unique function). """ + class Meta: + """Metaclass options for the PartTestTemplate model.""" + + verbose_name = _('Part Test Template') + def __str__(self): """Format a string representation of this PartTestTemplate.""" return ' | '.join([self.part.name, self.test_name]) @@ -3592,6 +3668,11 @@ class PartParameterTemplate(InvenTree.models.InvenTreeMetadataModel): choices: List of valid choices for the parameter [string] """ + class Meta: + """Metaclass options for the PartParameterTemplate model.""" + + verbose_name = _('Part Parameter Template') + @staticmethod def get_api_url(): """Return the list API endpoint URL associated with the PartParameterTemplate model.""" @@ -3736,6 +3817,7 @@ class PartParameter(InvenTree.models.InvenTreeMetadataModel): class Meta: """Metaclass providing extra model definition.""" + verbose_name = _('Part Parameter') # Prevent multiple instances of a parameter for a single part unique_together = ('part', 'template') @@ -3748,11 +3830,29 @@ class PartParameter(InvenTree.models.InvenTreeMetadataModel): """String representation of a PartParameter (used in the admin interface).""" return f'{self.part.full_name} : {self.template.name} = {self.data} ({self.template.units})' + def delete(self): + """Custom delete handler for the PartParameter model. + + - Check if the parameter can be deleted + """ + self.check_part_lock() + super().delete() + + def check_part_lock(self): + """Check if the referenced part is locked.""" + # TODO: Potentially control this behaviour via a global setting + + if self.part.locked: + raise ValidationError(_('Parameter cannot be modified - part is locked')) + def save(self, *args, **kwargs): """Custom save method for the PartParameter model.""" # Validate the PartParameter before saving self.calculate_numeric_value() + # Check if the part is locked + self.check_part_lock() + # Convert 'boolean' values to 'True' / 'False' if self.template.checkbox: self.data = str2bool(self.data) @@ -3817,6 +3917,12 @@ class PartParameter(InvenTree.models.InvenTreeMetadataModel): except ValueError: self.data_numeric = None + if self.data_numeric is not None and type(self.data_numeric) is float: + # Prevent out of range numbers, etc + # Ref: https://github.com/inventree/InvenTree/issues/7593 + if math.isnan(self.data_numeric) or math.isinf(self.data_numeric): + self.data_numeric = None + part = models.ForeignKey( Part, on_delete=models.CASCADE, @@ -3878,9 +3984,16 @@ class PartCategoryParameterTemplate(InvenTree.models.InvenTreeMetadataModel): category """ + @staticmethod + def get_api_url(): + """Return the API endpoint URL associated with the PartCategoryParameterTemplate model.""" + return reverse('api-part-category-parameter-list') + class Meta: """Metaclass providing extra model definition.""" + verbose_name = _('Part Category Parameter Template') + constraints = [ UniqueConstraint( fields=['category', 'parameter_template'], @@ -4055,15 +4168,53 @@ class BomItem( """ return Q(part__in=self.get_valid_parts_for_allocation()) + def delete(self): + """Check if this item can be deleted.""" + self.check_part_lock(self.part) + super().delete() + def save(self, *args, **kwargs): """Enforce 'clean' operation when saving a BomItem instance.""" self.clean() + self.check_part_lock(self.part) + + # Check if the part was changed + deltas = self.get_field_deltas() + + if 'part' in deltas: + if old_part := deltas['part'].get('old', None): + self.check_part_lock(old_part) + # Update the 'validated' field based on checksum calculation self.validated = self.is_line_valid super().save(*args, **kwargs) + def check_part_lock(self, assembly): + """When editing or deleting a BOM item, check if the assembly is locked. + + If locked, raise an exception. + + Arguments: + assembly: The assembly part + + Raises: + ValidationError: If the assembly is locked + """ + # TODO: Perhaps control this with a global setting? + + if assembly.locked: + raise ValidationError(_('BOM item cannot be modified - assembly is locked')) + + # If this BOM item is inherited, check all variants of the assembly + if self.inherited: + for part in assembly.get_descendants(include_self=False): + if part.locked: + raise ValidationError( + _('BOM item cannot be modified - variant assembly is locked') + ) + # A link to the parent part # Each part will get a reverse lookup field 'bom_items' part = models.ForeignKey( diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index 3cf35becad..66307ea89d 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -22,26 +22,26 @@ from sql_util.utils import SubqueryCount, SubquerySum from taggit.serializers import TagListSerializerField import common.currency -import common.models import common.settings import company.models import InvenTree.helpers import InvenTree.serializers import InvenTree.status -import part.filters +import part.filters as part_filters import part.helpers as part_helpers import part.stocktake import part.tasks import stock.models import users.models from build.status_codes import BuildStatusGroups +from importer.mixins import DataImportExportSerializerMixin +from importer.registry import register_importer from InvenTree.tasks import offload_task from .models import ( BomItem, BomItemSubstitute, Part, - PartAttachment, PartCategory, PartCategoryParameterTemplate, PartInternalPriceBreak, @@ -59,7 +59,10 @@ from .models import ( logger = logging.getLogger('inventree') -class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): +@register_importer() +class CategorySerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +): """Serializer for PartCategory.""" class Meta: @@ -84,6 +87,7 @@ class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): 'icon', 'parent_default_location', ] + read_only_fields = ['level', 'pathstring'] def __init__(self, *args, **kwargs): """Optionally add or remove extra fields.""" @@ -92,7 +96,7 @@ class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): super().__init__(*args, **kwargs) if not path_detail: - self.fields.pop('path') + self.fields.pop('path', None) def get_starred(self, category) -> bool: """Return True if the category is directly "starred" by the current user.""" @@ -103,16 +107,24 @@ class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): """Annotate extra information to the queryset.""" # Annotate the number of 'parts' which exist in each category (including subcategories!) queryset = queryset.annotate( - part_count=part.filters.annotate_category_parts(), - subcategories=part.filters.annotate_sub_categories(), + part_count=part_filters.annotate_category_parts(), + subcategories=part_filters.annotate_sub_categories(), ) queryset = queryset.annotate( - parent_default_location=part.filters.annotate_default_location('parent__') + parent_default_location=part_filters.annotate_default_location('parent__') ) return queryset + parent = serializers.PrimaryKeyRelatedField( + queryset=PartCategory.objects.all(), + required=False, + allow_null=True, + label=_('Parent Category'), + help_text=_('Parent part category'), + ) + url = serializers.CharField(source='get_absolute_url', read_only=True) part_count = serializers.IntegerField(read_only=True, label=_('Parts')) @@ -127,6 +139,10 @@ class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): child=serializers.DictField(), source='get_path', read_only=True ) + icon = serializers.CharField( + required=False, allow_blank=True, help_text=_('Icon (optional)'), max_length=100 + ) + parent_default_location = serializers.IntegerField(read_only=True) @@ -141,26 +157,20 @@ class CategoryTree(InvenTree.serializers.InvenTreeModelSerializer): subcategories = serializers.IntegerField(label=_('Subcategories'), read_only=True) + icon = serializers.CharField( + required=False, allow_blank=True, help_text=_('Icon (optional)'), max_length=100 + ) + @staticmethod def annotate_queryset(queryset): """Annotate the queryset with the number of subcategories.""" - return queryset.annotate(subcategories=part.filters.annotate_sub_categories()) + return queryset.annotate(subcategories=part_filters.annotate_sub_categories()) -class PartAttachmentSerializer(InvenTree.serializers.InvenTreeAttachmentSerializer): - """Serializer for the PartAttachment class.""" - - class Meta: - """Metaclass defining serializer fields.""" - - model = PartAttachment - - fields = InvenTree.serializers.InvenTreeAttachmentSerializer.attachment_fields([ - 'part' - ]) - - -class PartTestTemplateSerializer(InvenTree.serializers.InvenTreeModelSerializer): +@register_importer() +class PartTestTemplateSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +): """Serializer for the PartTestTemplate class.""" class Meta: @@ -195,7 +205,10 @@ class PartTestTemplateSerializer(InvenTree.serializers.InvenTreeModelSerializer) return queryset.annotate(results=SubqueryCount('test_results')) -class PartSalePriceSerializer(InvenTree.serializers.InvenTreeModelSerializer): +@register_importer() +class PartSalePriceSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +): """Serializer for sale prices for Part model.""" class Meta: @@ -260,7 +273,10 @@ class PartThumbSerializerUpdate(InvenTree.serializers.InvenTreeModelSerializer): image = InvenTree.serializers.InvenTreeAttachmentSerializerField(required=True) -class PartParameterTemplateSerializer(InvenTree.serializers.InvenTreeModelSerializer): +@register_importer() +class PartParameterTemplateSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +): """JSON serializer for the PartParameterTemplate model.""" class Meta: @@ -301,7 +317,9 @@ class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): 'image', 'thumbnail', 'active', + 'locked', 'assembly', + 'component', 'is_template', 'purchaseable', 'salable', @@ -321,8 +339,8 @@ class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): super().__init__(*args, **kwargs) if not pricing: - self.fields.pop('pricing_min') - self.fields.pop('pricing_max') + self.fields.pop('pricing_min', None) + self.fields.pop('pricing_max', None) category_default_location = serializers.IntegerField(read_only=True) @@ -338,7 +356,10 @@ class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): ) -class PartParameterSerializer(InvenTree.serializers.InvenTreeModelSerializer): +@register_importer() +class PartParameterSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +): """JSON serializers for the PartParameter model.""" class Meta: @@ -366,10 +387,10 @@ class PartParameterSerializer(InvenTree.serializers.InvenTreeModelSerializer): super().__init__(*args, **kwargs) if not part_detail: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) if not template_detail: - self.fields.pop('template_detail') + self.fields.pop('template_detail', None) part_detail = PartBriefSerializer(source='part', many=False, read_only=True) template_detail = PartParameterTemplateSerializer( @@ -580,7 +601,24 @@ class InitialSupplierSerializer(serializers.Serializer): return data +class DefaultLocationSerializer(InvenTree.serializers.InvenTreeModelSerializer): + """Brief serializer for a StockLocation object. + + Defined here, rather than stock.serializers, to negotiate circular imports. + """ + + class Meta: + """Metaclass options.""" + + import stock.models as stock_models + + model = stock_models.StockLocation + fields = ['pk', 'name', 'pathstring'] + + +@register_importer() class PartSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.NotesFieldMixin, InvenTree.serializers.RemoteImageMixin, InvenTree.serializers.InvenTreeTagModelSerializer, @@ -590,6 +628,8 @@ class PartSerializer( Used when displaying all details of a single component. """ + import_exclude_fields = ['duplicate'] + class Meta: """Metaclass defining serializer fields.""" @@ -602,11 +642,13 @@ class PartSerializer( 'category', 'category_detail', 'category_path', + 'category_name', 'component', 'creation_date', 'creation_user', 'default_expiry', 'default_location', + 'default_location_detail', 'default_supplier', 'description', 'full_name', @@ -618,6 +660,7 @@ class PartSerializer( 'keywords', 'last_stocktake', 'link', + 'locked', 'minimum_stock', 'name', 'notes', @@ -625,6 +668,8 @@ class PartSerializer( 'pk', 'purchaseable', 'revision', + 'revision_of', + 'revision_count', 'salable', 'starred', 'thumbnail', @@ -670,6 +715,7 @@ class PartSerializer( """ self.starred_parts = kwargs.pop('starred_parts', []) category_detail = kwargs.pop('category_detail', False) + location_detail = kwargs.pop('location_detail', False) parameters = kwargs.pop('parameters', False) create = kwargs.pop('create', False) pricing = kwargs.pop('pricing', True) @@ -678,13 +724,16 @@ class PartSerializer( super().__init__(*args, **kwargs) if not category_detail: - self.fields.pop('category_detail') + self.fields.pop('category_detail', None) + + if not location_detail: + self.fields.pop('default_location_detail', None) if not parameters: - self.fields.pop('parameters') + self.fields.pop('parameters', None) if not path_detail: - self.fields.pop('category_path') + self.fields.pop('category_path', None) if not create: # These fields are only used for the LIST API endpoint @@ -692,12 +741,12 @@ class PartSerializer( # Fields required for certain operations, but are not part of the model if f in ['remote_image', 'existing_image']: continue - self.fields.pop(f) + self.fields.pop(f, None) if not pricing: - self.fields.pop('pricing_min') - self.fields.pop('pricing_max') - self.fields.pop('pricing_updated') + self.fields.pop('pricing_min', None) + self.fields.pop('pricing_max', None) + self.fields.pop('pricing_updated', None) def get_api_url(self): """Return the API url associated with this serializer.""" @@ -723,14 +772,19 @@ class PartSerializer( Performing database queries as efficiently as possible, to reduce database trips. """ + queryset = queryset.prefetch_related('category', 'default_location') + + # Annotate with the total number of revisions + queryset = queryset.annotate(revision_count=SubqueryCount('revisions')) + # Annotate with the total number of stock items queryset = queryset.annotate(stock_item_count=SubqueryCount('stock_items')) # Annotate with the total variant stock quantity - variant_query = part.filters.variant_stock_query() + variant_query = part_filters.variant_stock_query() queryset = queryset.annotate( - variant_stock=part.filters.annotate_variant_quantity( + variant_stock=part_filters.annotate_variant_quantity( variant_query, reference='quantity' ) ) @@ -760,10 +814,10 @@ class PartSerializer( # TODO: Note that BomItemSerializer and BuildLineSerializer have very similar code queryset = queryset.annotate( - ordering=part.filters.annotate_on_order_quantity(), - in_stock=part.filters.annotate_total_stock(), - allocated_to_sales_orders=part.filters.annotate_sales_order_allocations(), - allocated_to_build_orders=part.filters.annotate_build_order_allocations(), + ordering=part_filters.annotate_on_order_quantity(), + in_stock=part_filters.annotate_total_stock(), + allocated_to_sales_orders=part_filters.annotate_sales_order_allocations(), + allocated_to_build_orders=part_filters.annotate_build_order_allocations(), ) # Annotate the queryset with the 'total_in_stock' quantity @@ -775,7 +829,7 @@ class PartSerializer( ) queryset = queryset.annotate( - external_stock=part.filters.annotate_total_stock( + external_stock=part_filters.annotate_total_stock( filter=Q(location__external=True) ) ) @@ -793,12 +847,12 @@ class PartSerializer( # Annotate with the total 'required for builds' quantity queryset = queryset.annotate( - required_for_build_orders=part.filters.annotate_build_order_requirements(), - required_for_sales_orders=part.filters.annotate_sales_order_requirements(), + required_for_build_orders=part_filters.annotate_build_order_requirements(), + required_for_sales_orders=part_filters.annotate_sales_order_requirements(), ) queryset = queryset.annotate( - category_default_location=part.filters.annotate_default_location( + category_default_location=part_filters.annotate_default_location( 'category__' ) ) @@ -816,6 +870,14 @@ class PartSerializer( child=serializers.DictField(), source='category.get_path', read_only=True ) + default_location_detail = DefaultLocationSerializer( + source='default_location', many=False, read_only=True + ) + + category_name = serializers.CharField( + source='category.name', read_only=True, label=_('Category Name') + ) + responsible = serializers.PrimaryKeyRelatedField( queryset=users.models.Owner.objects.all(), required=False, @@ -830,12 +892,13 @@ class PartSerializer( # Annotated fields allocated_to_build_orders = serializers.FloatField(read_only=True) allocated_to_sales_orders = serializers.FloatField(read_only=True) - building = serializers.FloatField(read_only=True) - in_stock = serializers.FloatField(read_only=True) + building = serializers.FloatField(read_only=True, label=_('Building')) + in_stock = serializers.FloatField(read_only=True, label=_('In Stock')) ordering = serializers.FloatField(read_only=True, label=_('On Order')) required_for_build_orders = serializers.IntegerField(read_only=True) required_for_sales_orders = serializers.IntegerField(read_only=True) stock_item_count = serializers.IntegerField(read_only=True, label=_('Stock Items')) + revision_count = serializers.IntegerField(read_only=True, label=_('Revisions')) suppliers = serializers.IntegerField(read_only=True, label=_('Suppliers')) total_in_stock = serializers.FloatField(read_only=True, label=_('Total Stock')) external_stock = serializers.FloatField(read_only=True, label=_('External Stock')) @@ -1171,7 +1234,7 @@ class PartStocktakeReportGenerateSerializer(serializers.Serializer): def validate(self, data): """Custom validation for this serializer.""" # Stocktake functionality must be enabled - if not common.models.InvenTreeSetting.get_setting('STOCKTAKE_ENABLE', False): + if not common.settings.get_global_setting('STOCKTAKE_ENABLE'): raise serializers.ValidationError( _('Stocktake functionality is not enabled') ) @@ -1419,31 +1482,42 @@ class BomItemSubstituteSerializer(InvenTree.serializers.InvenTreeModelSerializer ) -class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): +@register_importer() +class BomItemSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +): """Serializer for BomItem object.""" + import_exclude_fields = ['validated', 'substitutes'] + + export_only_fields = ['sub_part_name', 'sub_part_ipn', 'sub_part_description'] + class Meta: """Metaclass defining serializer fields.""" model = BomItem fields = [ + 'part', + 'sub_part', + # Extra fields only for export + 'sub_part_name', + 'sub_part_ipn', + 'sub_part_description', + 'reference', + 'quantity', + 'overage', 'allow_variants', 'inherited', - 'note', 'optional', 'consumable', - 'overage', + 'note', 'pk', - 'part', 'part_detail', 'pricing_min', 'pricing_max', 'pricing_min_total', 'pricing_max_total', 'pricing_updated', - 'quantity', - 'reference', - 'sub_part', 'sub_part_detail', 'substitutes', 'validated', @@ -1456,6 +1530,8 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): 'on_order', # Annotated field describing quantity being built 'building', + # Annotate the total potential quantity we can build + 'can_build', ] def __init__(self, *args, **kwargs): @@ -1465,23 +1541,23 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): - This saves a bunch of database requests """ part_detail = kwargs.pop('part_detail', False) - sub_part_detail = kwargs.pop('sub_part_detail', False) + sub_part_detail = kwargs.pop('sub_part_detail', True) pricing = kwargs.pop('pricing', True) super().__init__(*args, **kwargs) if not part_detail: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) if not sub_part_detail: - self.fields.pop('sub_part_detail') + self.fields.pop('sub_part_detail', None) if not pricing: - self.fields.pop('pricing_min') - self.fields.pop('pricing_max') - self.fields.pop('pricing_min_total') - self.fields.pop('pricing_max_total') - self.fields.pop('pricing_updated') + self.fields.pop('pricing_min', None) + self.fields.pop('pricing_max', None) + self.fields.pop('pricing_min_total', None) + self.fields.pop('pricing_max_total', None) + self.fields.pop('pricing_updated', None) quantity = InvenTree.serializers.InvenTreeDecimalField(required=True) @@ -1493,15 +1569,30 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): return quantity part = serializers.PrimaryKeyRelatedField( - queryset=Part.objects.filter(assembly=True) + queryset=Part.objects.filter(assembly=True), + label=_('Assembly'), + help_text=_('Select the parent assembly'), ) substitutes = BomItemSubstituteSerializer(many=True, read_only=True) part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + # Extra fields only for export + sub_part_name = serializers.CharField( + source='sub_part.name', read_only=True, label=_('Component Name') + ) + sub_part_ipn = serializers.CharField( + source='sub_part.IPN', read_only=True, label=_('Component IPN') + ) + sub_part_description = serializers.CharField( + source='sub_part.description', read_only=True, label=_('Component Description') + ) + sub_part = serializers.PrimaryKeyRelatedField( - queryset=Part.objects.filter(component=True) + queryset=Part.objects.filter(component=True), + label=_('Component'), + help_text=_('Select the component part'), ) sub_part_detail = PartBriefSerializer(source='sub_part', many=False, read_only=True) @@ -1510,6 +1601,8 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): building = serializers.FloatField(label=_('In Production'), read_only=True) + can_build = serializers.FloatField(label=_('Can Build'), read_only=True) + # Cached pricing fields pricing_min = InvenTree.serializers.InvenTreeMoneySerializer( source='sub_part.pricing_data.overall_min', allow_null=True, read_only=True @@ -1591,30 +1684,23 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): # Annotate with the total "on order" amount for the sub-part queryset = queryset.annotate( - on_order=part.filters.annotate_on_order_quantity(ref) + on_order=part_filters.annotate_on_order_quantity(ref) ) # Annotate with the total "building" amount for the sub-part queryset = queryset.annotate( - building=Coalesce( - SubquerySum( - 'sub_part__builds__quantity', - filter=Q(status__in=BuildStatusGroups.ACTIVE_CODES), - ), - Decimal(0), - output_field=models.DecimalField(), - ) + building=part_filters.annotate_in_production_quantity(ref) ) # Calculate "total stock" for the referenced sub_part # Calculate the "build_order_allocations" for the sub_part # Note that these fields are only aliased, not annotated queryset = queryset.alias( - total_stock=part.filters.annotate_total_stock(reference=ref), - allocated_to_sales_orders=part.filters.annotate_sales_order_allocations( + total_stock=part_filters.annotate_total_stock(reference=ref), + allocated_to_sales_orders=part_filters.annotate_sales_order_allocations( reference=ref ), - allocated_to_build_orders=part.filters.annotate_build_order_allocations( + allocated_to_build_orders=part_filters.annotate_build_order_allocations( reference=ref ), ) @@ -1631,7 +1717,7 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): # Calculate 'external_stock' queryset = queryset.annotate( - external_stock=part.filters.annotate_total_stock( + external_stock=part_filters.annotate_total_stock( reference=ref, filter=Q(location__external=True) ) ) @@ -1640,11 +1726,11 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): # Extract similar information for any 'substitute' parts queryset = queryset.alias( - substitute_stock=part.filters.annotate_total_stock(reference=ref), - substitute_build_allocations=part.filters.annotate_build_order_allocations( + substitute_stock=part_filters.annotate_total_stock(reference=ref), + substitute_build_allocations=part_filters.annotate_build_order_allocations( reference=ref ), - substitute_sales_allocations=part.filters.annotate_sales_order_allocations( + substitute_sales_allocations=part_filters.annotate_sales_order_allocations( reference=ref ), ) @@ -1660,16 +1746,16 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): ) # Annotate the queryset with 'available variant stock' information - variant_stock_query = part.filters.variant_stock_query(reference='sub_part__') + variant_stock_query = part_filters.variant_stock_query(reference='sub_part__') queryset = queryset.alias( - variant_stock_total=part.filters.annotate_variant_quantity( + variant_stock_total=part_filters.annotate_variant_quantity( variant_stock_query, reference='quantity' ), - variant_bo_allocations=part.filters.annotate_variant_quantity( + variant_bo_allocations=part_filters.annotate_variant_quantity( variant_stock_query, reference='sales_order_allocations__quantity' ), - variant_so_allocations=part.filters.annotate_variant_quantity( + variant_so_allocations=part_filters.annotate_variant_quantity( variant_stock_query, reference='allocations__quantity' ), ) @@ -1683,11 +1769,26 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): ) ) + # Annotate the "can_build" quantity + queryset = queryset.alias( + total_stock=ExpressionWrapper( + F('available_variant_stock') + + F('available_substitute_stock') + + F('available_stock'), + output_field=FloatField(), + ) + ).annotate( + can_build=ExpressionWrapper( + F('total_stock') / F('quantity'), output_field=FloatField() + ) + ) + return queryset +@register_importer() class CategoryParameterTemplateSerializer( - InvenTree.serializers.InvenTreeModelSerializer + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer ): """Serializer for the PartCategoryParameterTemplate model.""" @@ -1778,7 +1879,10 @@ class PartCopyBOMSerializer(serializers.Serializer): class BomImportUploadSerializer(InvenTree.serializers.DataFileUploadSerializer): - """Serializer for uploading a file and extracting data from it.""" + """Serializer for uploading a file and extracting data from it. + + TODO: Delete this entirely once the new importer process is working + """ TARGET_MODEL = BomItem @@ -1811,6 +1915,8 @@ class BomImportExtractSerializer(InvenTree.serializers.DataFileExtractSerializer """Serializer class for exatracting BOM data from an uploaded file. The parent class DataFileExtractSerializer does most of the heavy lifting here. + + TODO: Delete this entirely once the new importer process is working """ TARGET_MODEL = BomItem @@ -1898,7 +2004,9 @@ class BomImportExtractSerializer(InvenTree.serializers.DataFileExtractSerializer class BomImportSubmitSerializer(serializers.Serializer): """Serializer for uploading a BOM against a specified part. - A "BOM" is a set of BomItem objects which are to be validated together as a set + A "BOM" is a set of BomItem objects which are to be validated together as a set. + + TODO: Delete this entirely once the new importer process is working """ items = BomItemSerializer(many=True, required=True) diff --git a/src/backend/InvenTree/part/stocktake.py b/src/backend/InvenTree/part/stocktake.py index 3705d84ae0..b26c9a62cb 100644 --- a/src/backend/InvenTree/part/stocktake.py +++ b/src/backend/InvenTree/part/stocktake.py @@ -3,7 +3,6 @@ import io import logging import time -from datetime import datetime from django.contrib.auth.models import User from django.core.files.base import ContentFile diff --git a/src/backend/InvenTree/part/templates/part/category.html b/src/backend/InvenTree/part/templates/part/category.html index 734e3ae98b..4bcf6b82ad 100644 --- a/src/backend/InvenTree/part/templates/part/category.html +++ b/src/backend/InvenTree/part/templates/part/category.html @@ -14,10 +14,7 @@ {% block heading %} {% if category %} {% trans "Part Category" %}: -{% settings_value "PART_CATEGORY_DEFAULT_ICON" as default_icon %} -{% if category.icon or default_icon %} - -{% endif %} + {{ category.name }} {% else %} {% trans "Parts" %} @@ -234,6 +231,10 @@ {% block js_ready %} {{ block.super }} + loadApiIconPacks().then(() => { + $('#category-icon').addClass(getApiIconClass('{{ category.icon }}')); + }); + {% settings_value "STOCKTAKE_ENABLE" as stocktake_enable %} {% if stocktake_enable and roles.stocktake.add %} $('#category-stocktake').click(function() { @@ -242,13 +243,11 @@ {% if category %}value: {{ category.pk }},{% endif %} tree_picker: { url: '{% url "api-part-category-tree" %}', - default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, location: { tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, generate_report: {}, @@ -308,7 +307,6 @@ return node; }, - defaultIcon: global_settings.PART_CATEGORY_DEFAULT_ICON, }); onPanelLoad('subcategories', function() { @@ -317,6 +315,8 @@ params: { {% if category %} parent: {{ category.pk }}, + {% else %} + top_level: true, {% endif %} }, allowTreeView: true, diff --git a/src/backend/InvenTree/part/templates/part/detail.html b/src/backend/InvenTree/part/templates/part/detail.html index f65a5e709f..eaec60b375 100644 --- a/src/backend/InvenTree/part/templates/part/detail.html +++ b/src/backend/InvenTree/part/templates/part/detail.html @@ -100,6 +100,22 @@
    +
    +
    +
    +

    {% trans "Part Test Statistics" %}

    + {% include "spacer.html" %} +
    +
    +
    +
    + {% include "filter_list.html" with id="partteststatistics" %} +
    + + {% include "test_statistics_table.html" with prefix="part-" %} +
    +
    +
    @@ -441,7 +457,6 @@ location: { tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, generate_report: { @@ -752,6 +767,9 @@ }); }); }); + onPanelLoad("test-statistics", function() { + prepareTestStatisticsTable('part', '{% url "api-test-statistics-by-part" part.pk %}') + }); onPanelLoad("part-stock", function() { $('#new-stock-item').click(function () { @@ -803,17 +821,7 @@ }); onPanelLoad("part-attachments", function() { - loadAttachmentTable('{% url "api-part-attachment-list" %}', { - filters: { - part: {{ part.pk }}, - }, - fields: { - part: { - value: {{ part.pk }}, - hidden: true - } - } - }); + loadAttachmentTable('part', {{ part.pk }}); }); onPanelLoad('pricing', function() { diff --git a/src/backend/InvenTree/part/templates/part/part_base.html b/src/backend/InvenTree/part/templates/part/part_base.html index 3b6b57542d..b29f40f751 100644 --- a/src/backend/InvenTree/part/templates/part/part_base.html +++ b/src/backend/InvenTree/part/templates/part/part_base.html @@ -271,6 +271,15 @@ {% endif %} {% settings_value "PART_ENABLE_REVISION" as show_revision %} + {% if show_revision and part.revision_of %} + + + {% trans "Revision Of" %} + + {{ part.revision_of.full_name }} + + + {% endif %} {% if show_revision and part.revision %} @@ -442,7 +451,7 @@ $("#show-qr-code").click(function() { showQRDialog( '{% trans "Part QR Code" escape %}', - '{"part": {{ part.pk }} }', + '{{ part.barcode }}', ); }); diff --git a/src/backend/InvenTree/part/templates/part/part_sidebar.html b/src/backend/InvenTree/part/templates/part/part_sidebar.html index 368110d729..8579cbd5cc 100644 --- a/src/backend/InvenTree/part/templates/part/part_sidebar.html +++ b/src/backend/InvenTree/part/templates/part/part_sidebar.html @@ -53,6 +53,8 @@ {% if part.trackable %} {% trans "Test Templates" as text %} {% include "sidebar_item.html" with label="test-templates" text=text icon="fa-vial" %} +{% trans "Test Statistics" as text %} +{% include "sidebar_item.html" with label="test-statistics" text=text icon="fa-chart-line" %} {% endif %} {% if show_related %} {% trans "Related Parts" as text %} diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index da3f4df47c..038dc9baf6 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -4,7 +4,6 @@ import os from datetime import datetime from decimal import Decimal from enum import IntEnum -from pathlib import Path from random import randint from django.core.exceptions import ValidationError @@ -13,7 +12,6 @@ from django.test.utils import CaptureQueriesContext from django.urls import reverse import PIL -from rest_framework import status from rest_framework.test import APIClient import build.models @@ -371,7 +369,7 @@ class PartCategoryAPITest(InvenTreeAPITestCase): params['delete_parts'] = '1' if delete_child_categories: params['delete_child_categories'] = '1' - response = self.delete(url, params, expected_code=204) + self.delete(url, params, expected_code=204) if delete_parts: if i == Target.delete_subcategories_delete_parts: @@ -505,6 +503,82 @@ class PartCategoryAPITest(InvenTreeAPITestCase): self.assertEqual(item['parent'], parent) self.assertEqual(item['subcategories'], subcategories) + def test_part_category_default_location(self): + """Test default location propagation through location trees.""" + """Making a tree structure like this: + main + loc 2 + sub1 + sub2 + loc 3 + sub3 + loc 4 + sub4 + sub5 + Expected behaviour: + main parent loc: Out of test scope. Parent category data not controlled by the test + sub1 parent loc: loc 2 + sub2 parent loc: loc 2 + sub3 parent loc: loc 3 + sub4 parent loc: loc 4 + sub5 parent loc: loc 3 + """ + main = PartCategory.objects.create( + name='main', + parent=PartCategory.objects.first(), + default_location=StockLocation.objects.get(id=2), + ) + sub1 = PartCategory.objects.create(name='sub1', parent=main) + sub2 = PartCategory.objects.create( + name='sub2', parent=sub1, default_location=StockLocation.objects.get(id=3) + ) + sub3 = PartCategory.objects.create( + name='sub3', parent=sub2, default_location=StockLocation.objects.get(id=4) + ) + sub4 = PartCategory.objects.create(name='sub4', parent=sub3) + sub5 = PartCategory.objects.create(name='sub5', parent=sub2) + Part.objects.create(name='test', category=sub4) + PartCategory.objects.rebuild() + + # This query will trigger an internal server error if annotation results are not limited to 1 + url = reverse('api-part-list') + response = self.get(url, expected_code=200) + + # sub1, expect main to be propagated + url = reverse('api-part-category-detail', kwargs={'pk': sub1.pk}) + response = self.get(url, expected_code=200) + self.assertEqual( + response.data['parent_default_location'], main.default_location.pk + ) + + # sub2, expect main to be propagated + url = reverse('api-part-category-detail', kwargs={'pk': sub2.pk}) + response = self.get(url, expected_code=200) + self.assertEqual( + response.data['parent_default_location'], main.default_location.pk + ) + + # sub3, expect sub2 to be propagated + url = reverse('api-part-category-detail', kwargs={'pk': sub3.pk}) + response = self.get(url, expected_code=200) + self.assertEqual( + response.data['parent_default_location'], sub2.default_location.pk + ) + + # sub4, expect sub3 to be propagated + url = reverse('api-part-category-detail', kwargs={'pk': sub4.pk}) + response = self.get(url, expected_code=200) + self.assertEqual( + response.data['parent_default_location'], sub3.default_location.pk + ) + + # sub5, expect sub2 to be propagated + url = reverse('api-part-category-detail', kwargs={'pk': sub5.pk}) + response = self.get(url, expected_code=200) + self.assertEqual( + response.data['parent_default_location'], sub2.default_location.pk + ) + class PartOptionsAPITest(InvenTreeAPITestCase): """Tests for the various OPTIONS endpoints in the /part/ API. @@ -512,7 +586,7 @@ class PartOptionsAPITest(InvenTreeAPITestCase): Ensure that the required field details are provided! """ - roles = ['part.add'] + roles = ['part.add', 'part_category.view'] def test_part(self): """Test the Part API OPTIONS.""" @@ -897,7 +971,7 @@ class PartAPITest(PartAPITestBase): """Return list of part thumbnails.""" url = reverse('api-part-thumbs') - response = self.get(url) + self.get(url) def test_paginate(self): """Test pagination of the Part list API.""" @@ -1033,25 +1107,26 @@ class PartAPITest(PartAPITestBase): url = reverse('api-part-list') required_cols = [ - 'Part ID', - 'Part Name', - 'Part Description', - 'In Stock', + 'ID', + 'Name', + 'Description', + 'Total Stock', 'Category Name', 'Keywords', - 'Template', + 'Is Template', 'Virtual', 'Trackable', 'Active', 'Notes', - 'creation_date', + 'Creation Date', + 'On Order', + 'In Stock', + 'Link', ] excluded_cols = ['lft', 'rght', 'level', 'tree_id', 'metadata'] - with self.download_file( - url, {'export': 'csv'}, expected_fn='InvenTree_Parts.csv' - ) as file: + with self.download_file(url, {'export': 'csv'}) as file: data = self.process_csv( file, excluded_cols=excluded_cols, @@ -1060,13 +1135,13 @@ class PartAPITest(PartAPITestBase): ) for row in data: - part = Part.objects.get(pk=row['Part ID']) + part = Part.objects.get(pk=row['ID']) if part.IPN: self.assertEqual(part.IPN, row['IPN']) - self.assertEqual(part.name, row['Part Name']) - self.assertEqual(part.description, row['Part Description']) + self.assertEqual(part.name, row['Name']) + self.assertEqual(part.description, row['Description']) if part.category: self.assertEqual(part.category.name, row['Category Name']) @@ -2148,7 +2223,7 @@ class BomItemTest(InvenTreeAPITestCase): fixtures = ['category', 'part', 'location', 'stock', 'bom', 'company'] - roles = ['part.add', 'part.change', 'part.delete'] + roles = ['part.add', 'part.change', 'part.delete', 'stock.view'] def setUp(self): """Set up the test case.""" @@ -2513,22 +2588,28 @@ class PartAttachmentTest(InvenTreeAPITestCase): def test_add_attachment(self): """Test that we can create a new PartAttachment via the API.""" - url = reverse('api-part-attachment-list') + url = reverse('api-attachment-list') # Upload without permission - response = self.post(url, {}, expected_code=403) + response = self.post( + url, {'model_id': 1, 'model_type': 'part'}, expected_code=403 + ) # Add required permission self.assignRole('part.add') + self.assignRole('part.change') # Upload without specifying part (will fail) response = self.post(url, {'comment': 'Hello world'}, expected_code=400) - self.assertIn('This field is required', str(response.data['part'])) + self.assertIn('This field is required', str(response.data['model_id'])) + self.assertIn('This field is required', str(response.data['model_type'])) # Upload without file OR link (will fail) response = self.post( - url, {'part': 1, 'comment': 'Hello world'}, expected_code=400 + url, + {'model_id': 1, 'model_type': 'part', 'comment': 'Hello world'}, + expected_code=400, ) self.assertIn('Missing file', str(response.data['attachment'])) @@ -2536,7 +2617,9 @@ class PartAttachmentTest(InvenTreeAPITestCase): # Upload an invalid link (will fail) response = self.post( - url, {'part': 1, 'link': 'not-a-link.py'}, expected_code=400 + url, + {'model_id': 1, 'model_type': 'part', 'link': 'not-a-link.py'}, + expected_code=400, ) self.assertIn('Enter a valid URL', str(response.data['link'])) @@ -2545,12 +2628,20 @@ class PartAttachmentTest(InvenTreeAPITestCase): # Upload a valid link (will pass) response = self.post( - url, {'part': 1, 'link': link, 'comment': 'Hello world'}, expected_code=201 + url, + { + 'model_id': 1, + 'model_type': 'part', + 'link': link, + 'comment': 'Hello world', + }, + expected_code=201, ) data = response.data - self.assertEqual(data['part'], 1) + self.assertEqual(data['model_type'], 'part') + self.assertEqual(data['model_id'], 1) self.assertEqual(data['link'], link) self.assertEqual(data['comment'], 'Hello world') @@ -2625,6 +2716,7 @@ class PartStocktakeTest(InvenTreeAPITestCase): superuser = False is_staff = False + roles = ['stocktake.view'] fixtures = ['category', 'part', 'location', 'stock'] @@ -2920,7 +3012,7 @@ class PartTestTemplateTest(PartAPITestBase): options = response.data['actions']['PUT'] self.assertTrue(options['pk']['read_only']) - self.assertTrue(options['pk']['required']) + self.assertFalse(options['pk']['required']) self.assertEqual(options['part']['api_url'], '/api/part/') self.assertTrue(options['test_name']['required']) self.assertFalse(options['test_name']['read_only']) diff --git a/src/backend/InvenTree/part/test_bom_export.py b/src/backend/InvenTree/part/test_bom_export.py index c1abe0de39..fc2e2ca3cf 100644 --- a/src/backend/InvenTree/part/test_bom_export.py +++ b/src/backend/InvenTree/part/test_bom_export.py @@ -29,11 +29,11 @@ class BomExportTest(InvenTreeTestCase): url = reverse('api-bom-upload-template') # Download an XLS template - response = self.client.get(url, data={'format': 'xls'}) + response = self.client.get(url, data={'format': 'xlsx'}) self.assertEqual(response.status_code, 200) self.assertEqual( response.headers['Content-Disposition'], - 'attachment; filename="InvenTree_BOM_Template.xls"', + 'attachment; filename="InvenTree_BOM_Template.xlsx"', ) # Return a simple CSV template @@ -111,6 +111,7 @@ class BomExportTest(InvenTreeTestCase): 'Parent Name', 'Part ID', 'Part IPN', + 'Part Revision', 'Part Name', 'Description', 'Assembly', @@ -134,24 +135,6 @@ class BomExportTest(InvenTreeTestCase): for header in headers: self.assertIn(header, expected) - def test_export_xls(self): - """Test BOM download in XLS format.""" - params = { - 'format': 'xls', - 'cascade': True, - 'parameter_data': True, - 'stock_data': True, - 'supplier_data': True, - 'manufacturer_data': True, - } - - response = self.client.get(self.url, data=params) - - self.assertEqual(response.status_code, 200) - - content = response.headers['Content-Disposition'] - self.assertEqual(content, 'attachment; filename="BOB | Bob | A2_BOM.xls"') - def test_export_xlsx(self): """Test BOM download in XLSX format.""" params = { @@ -167,6 +150,9 @@ class BomExportTest(InvenTreeTestCase): self.assertEqual(response.status_code, 200) + content = response.headers['Content-Disposition'] + self.assertEqual(content, 'attachment; filename="BOB | Bob | A2_BOM.xlsx"') + def test_export_json(self): """Test BOM download in JSON format.""" params = { diff --git a/src/backend/InvenTree/part/test_bom_item.py b/src/backend/InvenTree/part/test_bom_item.py index 86d4578f4a..f978f90638 100644 --- a/src/backend/InvenTree/part/test_bom_item.py +++ b/src/backend/InvenTree/part/test_bom_item.py @@ -303,3 +303,50 @@ class BomItemTest(TestCase): with self.assertRaises(django_exceptions.ValidationError): BomItem.objects.create(part=part_v, sub_part=part_a, quantity=10) + + def test_locked_assembly(self): + """Test that BomItem objects work correctly for a 'locked' assembly.""" + assembly = Part.objects.create( + name='Assembly2', description='An assembly part', assembly=True + ) + + sub_part = Part.objects.create( + name='SubPart1', description='A sub-part', component=True + ) + + # Initially, the assembly is not locked + self.assertFalse(assembly.locked) + + # Create a BOM item for the assembly + bom_item = BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=1) + + # Lock the assembly + assembly.locked = True + assembly.save() + + # Try to edit the BOM item + with self.assertRaises(django_exceptions.ValidationError): + bom_item.quantity = 10 + bom_item.save() + + # Try to delete the BOM item + with self.assertRaises(django_exceptions.ValidationError): + bom_item.delete() + + # Try to create a new BOM item + with self.assertRaises(django_exceptions.ValidationError): + BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=1) + + # Unlock the part and try again + assembly.locked = False + assembly.save() + + # Create a new BOM item + bom_item = BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=1) + + # Edit the new BOM item + bom_item.quantity = 10 + bom_item.save() + + # Delete the new BOM item + bom_item.delete() diff --git a/src/backend/InvenTree/part/test_category.py b/src/backend/InvenTree/part/test_category.py index 34308bf285..94465d075d 100644 --- a/src/backend/InvenTree/part/test_category.py +++ b/src/backend/InvenTree/part/test_category.py @@ -4,6 +4,8 @@ from django.conf import settings from django.core.exceptions import ValidationError from django.test import TestCase +from common.models import InvenTreeSetting + from .models import Part, PartCategory, PartParameter, PartParameterTemplate @@ -412,3 +414,29 @@ class CategoryTest(TestCase): # should log an exception with self.assertRaises(ValidationError): B3.delete() + + def test_icon(self): + """Test the category icon.""" + # No default icon set + cat = PartCategory.objects.create(name='Test Category') + self.assertEqual(cat.icon, '') + + # Set a default icon + InvenTreeSetting.set_setting('PART_CATEGORY_DEFAULT_ICON', 'ti:package:outline') + self.assertEqual(cat.icon, 'ti:package:outline') + + # Set custom icon to default icon and assert that it does not get written to the database + cat.icon = 'ti:package:outline' + cat.save() + self.assertEqual(cat._icon, '') + + # Set a different custom icon and assert that it takes precedence + cat.icon = 'ti:tag:outline' + cat.save() + self.assertEqual(cat.icon, 'ti:tag:outline') + InvenTreeSetting.set_setting('PART_CATEGORY_DEFAULT_ICON', '') + + # Test that the icon can be set to None again + cat.icon = '' + cat.save() + self.assertEqual(cat.icon, '') diff --git a/src/backend/InvenTree/part/test_param.py b/src/backend/InvenTree/part/test_param.py index 314fe11eb5..54a8d7edfe 100644 --- a/src/backend/InvenTree/part/test_param.py +++ b/src/backend/InvenTree/part/test_param.py @@ -47,6 +47,25 @@ class TestParams(TestCase): t3.full_clean() t3.save() # pragma: no cover + def test_invalid_numbers(self): + """Test that invalid floating point numbers are correctly handled.""" + p = Part.objects.first() + t = PartParameterTemplate.objects.create(name='Yaks') + + valid_floats = ['-12', '1.234', '17', '3e45', '-12e34'] + + for value in valid_floats: + param = PartParameter(part=p, template=t, data=value) + param.full_clean() + self.assertIsNotNone(param.data_numeric) + + invalid_floats = ['88E6352', 'inf', '-inf', 'nan', '3.14.15', '3eee3'] + + for value in invalid_floats: + param = PartParameter(part=p, template=t, data=value) + param.full_clean() + self.assertIsNone(param.data_numeric) + def test_metadata(self): """Unit tests for the metadata field.""" for model in [PartParameterTemplate]: @@ -77,6 +96,43 @@ class TestParams(TestCase): param = prt.get_parameter('Not a parameter') self.assertIsNone(param) + def test_locked_part(self): + """Test parameter editing for a locked part.""" + part = Part.objects.create( + name='Test Part 3', + description='A part for testing', + category=PartCategory.objects.first(), + IPN='TEST-PART', + ) + + parameter = PartParameter.objects.create( + part=part, template=PartParameterTemplate.objects.first(), data='123' + ) + + # Lock the part + part.locked = True + part.save() + + # Attempt to edit the parameter + with self.assertRaises(django_exceptions.ValidationError): + parameter.data = '456' + parameter.save() + + # Attempt to delete the parameter + with self.assertRaises(django_exceptions.ValidationError): + parameter.delete() + + # Unlock the part + part.locked = False + part.save() + + # Now we can edit the parameter + parameter.data = '456' + parameter.save() + + # And we can delete the parameter + parameter.delete() + class TestCategoryTemplates(TransactionTestCase): """Test class for PartCategoryParameterTemplate model.""" diff --git a/src/backend/InvenTree/part/test_part.py b/src/backend/InvenTree/part/test_part.py index 58a88c3055..04e89f4520 100644 --- a/src/backend/InvenTree/part/test_part.py +++ b/src/backend/InvenTree/part/test_part.py @@ -169,7 +169,7 @@ class PartTest(TestCase): self.assertEqual(Part.barcode_model_type(), 'part') p = Part.objects.get(pk=1) - barcode = p.format_barcode(brief=True) + barcode = p.format_barcode() self.assertEqual(barcode, '{"part": 1}') def test_tree(self): @@ -270,9 +270,8 @@ class PartTest(TestCase): def test_barcode(self): """Test barcode format functionality.""" - barcode = self.r1.format_barcode(brief=False) - self.assertIn('InvenTree', barcode) - self.assertIn('"part": {"id": 3}', barcode) + barcode = self.r1.format_barcode() + self.assertEqual('{"part": 3}', barcode) def test_sell_pricing(self): """Check that the sell pricebreaks were loaded.""" @@ -371,6 +370,101 @@ class PartTest(TestCase): self.assertIsNotNone(p.last_stocktake) self.assertEqual(p.last_stocktake, ps.date) + def test_delete(self): + """Test delete operation for a Part instance.""" + part = Part.objects.first() + + for active, locked in [(True, True), (True, False), (False, True)]: + # Cannot delete part if it is active or locked + part.active = active + part.locked = locked + part.save() + + with self.assertRaises(ValidationError): + part.delete() + + part.active = False + part.locked = False + + part.delete() + + def test_revisions(self): + """Test the 'revision' and 'revision_of' field.""" + template = Part.objects.create( + name='Template part', description='A template part', is_template=True + ) + + # Create a new part + part = Part.objects.create( + name='Master Part', + description='Master part (will have revisions)', + variant_of=template, + ) + + self.assertEqual(part.revisions.count(), 0) + + # Try to set as revision of itself + with self.assertRaises(ValidationError) as exc: + part.revision_of = part + part.save() + + self.assertIn('Part cannot be a revision of itself', str(exc.exception)) + + part.refresh_from_db() + + rev_a = Part.objects.create( + name='Master Part', description='Master part (revision A)' + ) + + with self.assertRaises(ValidationError) as exc: + print('rev a:', rev_a.revision_of, part.revision_of) + rev_a.revision_of = part + rev_a.save() + + self.assertIn('Revision code must be specified', str(exc.exception)) + + with self.assertRaises(ValidationError) as exc: + rev_a.revision_of = template + rev_a.revision = 'A' + rev_a.save() + + self.assertIn('Cannot make a revision of a template part', str(exc.exception)) + + with self.assertRaises(ValidationError) as exc: + rev_a.revision_of = part + rev_a.revision = 'A' + rev_a.save() + + self.assertIn('Parent part must point to the same template', str(exc.exception)) + + rev_a.variant_of = template + rev_a.revision_of = part + rev_a.revision = 'A' + rev_a.save() + + self.assertEqual(part.revisions.count(), 1) + + rev_b = Part.objects.create( + name='Master Part', description='Master part (revision B)' + ) + + with self.assertRaises(ValidationError) as exc: + rev_b.revision_of = rev_a + rev_b.revision = 'B' + rev_b.save() + + self.assertIn( + 'Cannot make a revision of a part which is already a revision', + str(exc.exception), + ) + + rev_b.variant_of = template + rev_b.revision_of = part + rev_b.revision = 'B' + rev_b.save() + + self.assertEqual(part.revisions.count(), 2) + class TestTemplateTest(TestCase): """Unit test for the TestTemplate class.""" diff --git a/src/backend/InvenTree/part/test_pricing.py b/src/backend/InvenTree/part/test_pricing.py index bf1b6764cc..212d086c5a 100644 --- a/src/backend/InvenTree/part/test_pricing.py +++ b/src/backend/InvenTree/part/test_pricing.py @@ -12,7 +12,7 @@ import company.models import order.models import part.models import stock.models -from common.settings import get_global_setting, set_global_setting +from common.settings import set_global_setting from InvenTree.unit_test import InvenTreeTestCase from order.status_codes import PurchaseOrderStatus diff --git a/src/backend/InvenTree/plugin/api.py b/src/backend/InvenTree/plugin/api.py index df737d4eab..6cf51cc60f 100644 --- a/src/backend/InvenTree/plugin/api.py +++ b/src/backend/InvenTree/plugin/api.py @@ -1,5 +1,7 @@ """API for the plugin app.""" +from typing import Optional + from django.core.exceptions import ValidationError from django.urls import include, path, re_path from django.utils.translation import gettext_lazy as _ @@ -267,7 +269,9 @@ class PluginSettingList(ListAPI): filterset_fields = ['plugin__active', 'plugin__key'] -def check_plugin(plugin_slug: str, plugin_pk: int) -> InvenTreePlugin: +def check_plugin( + plugin_slug: Optional[str], plugin_pk: Optional[int] +) -> InvenTreePlugin: """Check that a plugin for the provided slug exists and get the config. Args: @@ -287,16 +291,16 @@ def check_plugin(plugin_slug: str, plugin_pk: int) -> InvenTreePlugin: raise NotFound(detail='Plugin not specified') # Define filter - filter = {} + filters = {} if plugin_slug: - filter['key'] = plugin_slug + filters['key'] = plugin_slug elif plugin_pk: - filter['pk'] = plugin_pk + filters['pk'] = plugin_pk ref = plugin_slug or plugin_pk # Check that the 'plugin' specified is valid try: - plugin_cgf = PluginConfig.objects.filter(**filter).first() + plugin_cgf = PluginConfig.objects.filter(**filters).first() except PluginConfig.DoesNotExist: raise NotFound(detail=f"Plugin '{ref}' not installed") @@ -420,16 +424,20 @@ class PluginPanelList(APIView): @extend_schema(responses={200: PluginSerializers.PluginPanelSerializer(many=True)}) def get(self, request): """Show available plugin panels.""" + target_model = request.query_params.get('target_model', None) + target_id = request.query_params.get('target_id', None) + panels = [] # Extract all plugins from the registry which provide custom panels - for _plugin in registry.with_mixin('panel', active=True): - # TODO: Allow plugins to fill this data out - ... + for _plugin in registry.with_mixin('ui', active=True): + # Allow plugins to fill this data out + plugin_panels = _plugin.get_custom_panels(target_model, target_id, request) - user = request.user - target_model = request.query_params.get('target_model', None) - target_id = request.query_params.get('target_id', None) + if plugin_panels and type(plugin_panels) is list: + for panel in plugin_panels: + # TODO: Validate each panel before inserting + panels.append(panel) if target_model == 'part' and target_id: panels = [ @@ -472,6 +480,13 @@ class PluginPanelList(APIView): return Response(PluginSerializers.PluginPanelSerializer(panels, many=True).data) +class PluginMetadataView(MetadataView): + """Metadata API endpoint for the PluginConfig model.""" + + lookup_field = 'key' + lookup_url_kwarg = 'plugin' + + plugin_api_urls = [ path('action/', ActionPluginView.as_view(), name='api-action-plugin'), path('barcode/', include(barcode_api_urls)), @@ -502,7 +517,7 @@ plugin_api_urls = [ ) ]), ), - # Lookup for individual plugins (based on 'key', not 'pk') + # Lookup for individual plugins (based on 'plugin', not 'pk') path( '/', include([ @@ -523,7 +538,7 @@ plugin_api_urls = [ ), path( 'metadata/', - MetadataView.as_view(), + PluginMetadataView.as_view(), {'model': PluginConfig, 'lookup_field': 'key'}, name='api-plugin-metadata', ), diff --git a/src/backend/InvenTree/plugin/base/barcodes/api.py b/src/backend/InvenTree/plugin/base/barcodes/api.py index 8cd75cf8b6..01b2f6ae9b 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/api.py +++ b/src/backend/InvenTree/plugin/base/barcodes/api.py @@ -6,16 +6,17 @@ from django.db.models import F from django.urls import path from django.utils.translation import gettext_lazy as _ -from rest_framework import permissions +from drf_spectacular.utils import extend_schema, extend_schema_view +from rest_framework import permissions, status from rest_framework.exceptions import PermissionDenied, ValidationError from rest_framework.generics import CreateAPIView from rest_framework.response import Response import order.models +import plugin.base.barcodes.helper import stock.models from InvenTree.helpers import hash_barcode from plugin import registry -from plugin.builtin.barcodes.inventree_barcode import InvenTreeInternalBarcodePlugin from users.models import RuleSet from . import serializers as barcode_serializers @@ -129,6 +130,48 @@ class BarcodeScan(BarcodeView): return Response(result) +@extend_schema_view( + post=extend_schema(responses={200: barcode_serializers.BarcodeSerializer}) +) +class BarcodeGenerate(CreateAPIView): + """Endpoint for generating a barcode for a database object. + + The barcode is generated by the selected barcode plugin. + """ + + serializer_class = barcode_serializers.BarcodeGenerateSerializer + + def queryset(self): + """This API view does not have a queryset.""" + return None + + # Default permission classes (can be overridden) + permission_classes = [permissions.IsAuthenticated] + + def create(self, request, *args, **kwargs): + """Perform the barcode generation action.""" + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + model = serializer.validated_data.get('model') + pk = serializer.validated_data.get('pk') + model_cls = plugin.base.barcodes.helper.get_supported_barcode_models_map().get( + model, None + ) + + if model_cls is None: + raise ValidationError({'error': _('Model is not supported')}) + + try: + model_instance = model_cls.objects.get(pk=pk) + except model_cls.DoesNotExist: + raise ValidationError({'error': _('Model instance not found')}) + + barcode_data = plugin.base.barcodes.helper.generate_barcode(model_instance) + + return Response({'barcode': barcode_data}, status=status.HTTP_200_OK) + + class BarcodeAssign(BarcodeView): """Endpoint for assigning a barcode to a stock item. @@ -161,7 +204,7 @@ class BarcodeAssign(BarcodeView): valid_labels = [] - for model in InvenTreeInternalBarcodePlugin.get_supported_barcode_models(): + for model in plugin.base.barcodes.helper.get_supported_barcode_models(): label = model.barcode_model_type() valid_labels.append(label) @@ -203,7 +246,7 @@ class BarcodeUnassign(BarcodeView): serializer.is_valid(raise_exception=True) data = serializer.validated_data - supported_models = InvenTreeInternalBarcodePlugin.get_supported_barcode_models() + supported_models = plugin.base.barcodes.helper.get_supported_barcode_models() supported_labels = [model.barcode_model_type() for model in supported_models] model_names = ', '.join(supported_labels) @@ -567,6 +610,8 @@ class BarcodeSOAllocate(BarcodeView): barcode_api_urls = [ + # Generate a barcode for a database object + path('generate/', BarcodeGenerate.as_view(), name='api-barcode-generate'), # Link a third-party barcode to an item (e.g. Part / StockItem / etc) path('link/', BarcodeAssign.as_view(), name='api-barcode-link'), # Unlink a third-party barcode from an item diff --git a/src/backend/InvenTree/plugin/base/barcodes/helper.py b/src/backend/InvenTree/plugin/base/barcodes/helper.py new file mode 100644 index 0000000000..f1815ba505 --- /dev/null +++ b/src/backend/InvenTree/plugin/base/barcodes/helper.py @@ -0,0 +1,79 @@ +"""Helper functions for barcode generation.""" + +import logging +from typing import Type, cast + +import InvenTree.helpers_model +from InvenTree.models import InvenTreeBarcodeMixin + +logger = logging.getLogger('inventree') + + +def cache(func): + """Cache the result of a function, but do not cache falsy results.""" + cache = {} + + def wrapper(): + """Wrapper function for caching.""" + if 'default' not in cache: + res = func() + + if res: + cache['default'] = res + + return res + + return cache['default'] + + return wrapper + + +def barcode_plugins() -> list: + """Return a list of plugin choices which can be used for barcode generation.""" + try: + from plugin import registry + + plugins = registry.with_mixin('barcode', active=True) + except Exception: + plugins = [] + + return [ + (plug.slug, plug.human_name) for plug in plugins if plug.has_barcode_generation + ] + + +def generate_barcode(model_instance: InvenTreeBarcodeMixin): + """Generate a barcode for a given model instance.""" + from common.settings import get_global_setting + from plugin import registry + from plugin.mixins import BarcodeMixin + + # Find the selected barcode generation plugin + slug = get_global_setting('BARCODE_GENERATION_PLUGIN', create=False) + + plugin = cast(BarcodeMixin, registry.get_plugin(slug)) + + return plugin.generate(model_instance) + + +@cache +def get_supported_barcode_models() -> list[Type[InvenTreeBarcodeMixin]]: + """Returns a list of database models which support barcode functionality.""" + return InvenTree.helpers_model.getModelsWithMixin(InvenTreeBarcodeMixin) + + +@cache +def get_supported_barcode_models_map(): + """Return a mapping of barcode model types to the model class.""" + return { + model.barcode_model_type(): model for model in get_supported_barcode_models() + } + + +@cache +def get_supported_barcode_model_codes_map(): + """Return a mapping of barcode model type codes to the model class.""" + return { + model.barcode_model_type_code(): model + for model in get_supported_barcode_models() + } diff --git a/src/backend/InvenTree/plugin/base/barcodes/mixins.py b/src/backend/InvenTree/plugin/base/barcodes/mixins.py index 929a037115..28fb1c49a8 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/mixins.py +++ b/src/backend/InvenTree/plugin/base/barcodes/mixins.py @@ -10,6 +10,7 @@ from django.db.models import F, Q from django.utils.translation import gettext_lazy as _ from company.models import Company, SupplierPart +from InvenTree.models import InvenTreeBarcodeMixin from order.models import PurchaseOrder, PurchaseOrderStatus from plugin.base.integration.SettingsMixin import SettingsMixin from stock.models import StockLocation @@ -53,6 +54,30 @@ class BarcodeMixin: """ return None + @property + def has_barcode_generation(self): + """Does this plugin support barcode generation.""" + try: + # Attempt to call the generate method + self.generate(None) # type: ignore + except NotImplementedError: + # If a NotImplementedError is raised, then barcode generation is not supported + return False + except: + pass + + return True + + def generate(self, model_instance: InvenTreeBarcodeMixin): + """Generate barcode data for the given model instance. + + Arguments: + model_instance: The model instance to generate barcode data for. It is extending the InvenTreeBarcodeMixin. + + Returns: The generated barcode data. + """ + raise NotImplementedError('Generate must be implemented by a plugin') + class SupplierBarcodeMixin(BarcodeMixin): """Mixin that provides default implementations for scan functions for supplier barcodes. diff --git a/src/backend/InvenTree/plugin/base/barcodes/serializers.py b/src/backend/InvenTree/plugin/base/barcodes/serializers.py index 6ad15713b7..b31ab1818a 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/serializers.py +++ b/src/backend/InvenTree/plugin/base/barcodes/serializers.py @@ -6,9 +6,9 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers import order.models +import plugin.base.barcodes.helper import stock.models from order.status_codes import PurchaseOrderStatus, SalesOrderStatus -from plugin.builtin.barcodes.inventree_barcode import InvenTreeInternalBarcodePlugin class BarcodeSerializer(serializers.Serializer): @@ -23,6 +23,30 @@ class BarcodeSerializer(serializers.Serializer): ) +class BarcodeGenerateSerializer(serializers.Serializer): + """Serializer for generating a barcode.""" + + model = serializers.CharField( + required=True, help_text=_('Model name to generate barcode for') + ) + + pk = serializers.IntegerField( + required=True, + help_text=_('Primary key of model object to generate barcode for'), + ) + + def validate_model(self, model: str): + """Validate the provided model.""" + supported_models = ( + plugin.base.barcodes.helper.get_supported_barcode_models_map() + ) + + if model not in supported_models.keys(): + raise ValidationError(_('Model is not supported')) + + return model + + class BarcodeAssignMixin(serializers.Serializer): """Serializer for linking and unlinking barcode to an internal class.""" @@ -30,7 +54,7 @@ class BarcodeAssignMixin(serializers.Serializer): """Generate serializer fields for each supported model type.""" super().__init__(*args, **kwargs) - for model in InvenTreeInternalBarcodePlugin.get_supported_barcode_models(): + for model in plugin.base.barcodes.helper.get_supported_barcode_models(): self.fields[model.barcode_model_type()] = ( serializers.PrimaryKeyRelatedField( queryset=model.objects.all(), @@ -45,7 +69,7 @@ class BarcodeAssignMixin(serializers.Serializer): """Return a list of model fields.""" fields = [ model.barcode_model_type() - for model in InvenTreeInternalBarcodePlugin.get_supported_barcode_models() + for model in plugin.base.barcodes.helper.get_supported_barcode_models() ] return fields diff --git a/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py b/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py index 408c28d35f..9512a31fa5 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py +++ b/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py @@ -21,6 +21,7 @@ class BarcodeAPITest(InvenTreeAPITestCase): super().setUp() self.scan_url = reverse('api-barcode-scan') + self.generate_url = reverse('api-barcode-generate') self.assign_url = reverse('api-barcode-link') self.unassign_url = reverse('api-barcode-unlink') @@ -30,6 +31,14 @@ class BarcodeAPITest(InvenTreeAPITestCase): url, data={'barcode': str(barcode)}, expected_code=expected_code ) + def generateBarcode(self, model: str, pk: int, expected_code: int): + """Post barcode generation and return barcode contents.""" + return self.post( + self.generate_url, + data={'model': model, 'pk': pk}, + expected_code=expected_code, + ) + def test_invalid(self): """Test that invalid requests fail.""" # test scan url @@ -130,7 +139,7 @@ class BarcodeAPITest(InvenTreeAPITestCase): data = response.data self.assertIn('error', data) - def test_barcode_generation(self): + def test_barcode_scan(self): """Test that a barcode is generated with a scan.""" item = StockItem.objects.get(pk=522) @@ -145,6 +154,18 @@ class BarcodeAPITest(InvenTreeAPITestCase): self.assertEqual(pk, item.pk) + def test_barcode_generation(self): + """Test that a barcode can be generated for a StockItem.""" + item = StockItem.objects.get(pk=522) + + data = self.generateBarcode('stockitem', item.pk, expected_code=200).data + self.assertEqual(data['barcode'], '{"stockitem": 522}') + + def test_barcode_generation_invalid(self): + """Test barcode generation for invalid model/pk.""" + self.generateBarcode('invalidmodel', 1, expected_code=400) + self.generateBarcode('stockitem', 99999999, expected_code=400) + def test_association(self): """Test that a barcode can be associated with a StockItem.""" item = StockItem.objects.get(pk=522) diff --git a/src/backend/InvenTree/plugin/base/event/events.py b/src/backend/InvenTree/plugin/base/event/events.py index ee5a814763..6aa341f3e3 100644 --- a/src/backend/InvenTree/plugin/base/event/events.py +++ b/src/backend/InvenTree/plugin/base/event/events.py @@ -131,6 +131,7 @@ def allow_table_event(table_name): 'socialaccount_', 'user_', 'users_', + 'importer_', ] if any(table_name.startswith(prefix) for prefix in ignore_prefixes): diff --git a/src/backend/InvenTree/plugin/base/icons/mixins.py b/src/backend/InvenTree/plugin/base/icons/mixins.py new file mode 100644 index 0000000000..a103e93c04 --- /dev/null +++ b/src/backend/InvenTree/plugin/base/icons/mixins.py @@ -0,0 +1,34 @@ +"""Plugin mixin classes for icon pack plugin.""" + +import logging + +from common.icons import IconPack, reload_icon_packs +from plugin.helpers import MixinNotImplementedError + +logger = logging.getLogger('inventree') + + +class IconPackMixin: + """Mixin that add custom icon packs.""" + + class MixinMeta: + """Meta options for this mixin.""" + + MIXIN_NAME = 'icon_pack' + + def __init__(self): + """Register mixin.""" + super().__init__() + self.add_mixin('icon_pack', True, __class__) + + @classmethod + def _activate_mixin(cls, registry, plugins, *args, **kwargs): + """Activate icon pack plugins.""" + logger.debug('Reloading icon packs') + reload_icon_packs() + + def icon_packs(self) -> list[IconPack]: + """Return a list of custom icon packs.""" + raise MixinNotImplementedError( + f"{__class__} is missing the 'icon_packs' method" + ) diff --git a/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py b/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py index e12cc2a25d..8b350a7ed1 100644 --- a/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py @@ -5,6 +5,7 @@ import logging from django.conf import settings from django.db.utils import OperationalError, ProgrammingError +from common.settings import get_global_setting from plugin.helpers import MixinImplementationError logger = logging.getLogger('inventree') @@ -58,16 +59,12 @@ class ScheduleMixin: @classmethod def _activate_mixin(cls, registry, plugins, *args, **kwargs): """Activate schedules from plugins with the ScheduleMixin.""" - from common.models import InvenTreeSetting - logger.debug('Activating plugin tasks') # List of tasks we have activated task_keys = [] - if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting( - 'ENABLE_PLUGINS_SCHEDULE' - ): + if settings.PLUGIN_TESTING or get_global_setting('ENABLE_PLUGINS_SCHEDULE'): for _key, plugin in plugins: if plugin.mixin_enabled('schedule') and plugin.is_active(): # Only active tasks for plugins which are enabled diff --git a/src/backend/InvenTree/plugin/base/integration/UserInterfaceMixin.py b/src/backend/InvenTree/plugin/base/integration/UserInterfaceMixin.py new file mode 100644 index 0000000000..c025880f62 --- /dev/null +++ b/src/backend/InvenTree/plugin/base/integration/UserInterfaceMixin.py @@ -0,0 +1,53 @@ +"""UserInterfaceMixin class definition. + +Allows integration of custom UI elements into the React user interface. +""" + +import logging + +logger = logging.getLogger('inventree') + + +class UserIterfaceMixin: + """Plugin mixin class which handles injection of custom elements into the front-end interface. + + - All content is accessed via the API, as requested by the user interface. + - This means that content can be dynamically generated, based on the current state of the system. + """ + + class MixinMeta: + """Metaclass for this plugin mixin.""" + + MIXIN_NAME = 'ui' + + def __init__(self): + """Register mixin.""" + super().__init__() + self.add_mixin('ui', True, __class__) + + def get_custom_panels(self, instance_type: str, instance_id: int, request): + """Return a list of custom panels to be injected into the UI. + + Args: + instance_type: The type of object being viewed (e.g. 'part') + instance_id: The ID of the object being viewed (e.g. 123) + request: HTTPRequest object (including user information) + + Returns: + list of dict: A list of custom panels to be injected into the UI + + - The returned list should contain a dict for each custom panel to be injected into the UI: + - The following keys can be specified: + { + 'name': 'panel_name', # The name of the panel (required, must be a valid DOM ID) + 'title': 'Panel Title', # The title of the panel (required, human readable) + 'icon': 'icon-name', # Icon name (optional, must be a valid icon identifier) + 'content': 'Panel content', # Raw content of the panel (optional) + 'src': 'static/plugin/panel.js', # Path to a JavaScript file to be loaded (optional) + } + + - Either 'src' or 'content' must be provided + + """ + # Default implementation returns an empty list + return [] diff --git a/src/backend/InvenTree/plugin/base/label/mixins.py b/src/backend/InvenTree/plugin/base/label/mixins.py index a60c1b0d71..16660dc6c3 100644 --- a/src/backend/InvenTree/plugin/base/label/mixins.py +++ b/src/backend/InvenTree/plugin/base/label/mixins.py @@ -3,8 +3,6 @@ from typing import Union from django.core.exceptions import ValidationError -from django.db.models.query import QuerySet -from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ import pdf2image diff --git a/src/backend/InvenTree/plugin/base/locate/api.py b/src/backend/InvenTree/plugin/base/locate/api.py index 8d37505b3a..948d67bb61 100644 --- a/src/backend/InvenTree/plugin/base/locate/api.py +++ b/src/backend/InvenTree/plugin/base/locate/api.py @@ -1,6 +1,5 @@ """API for location plugins.""" -from drf_spectacular.utils import OpenApiResponse, extend_schema from rest_framework import permissions, serializers from rest_framework.exceptions import NotFound, ParseError from rest_framework.generics import GenericAPIView diff --git a/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py b/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py index 78f694424d..c3c0f75e2a 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py @@ -8,29 +8,45 @@ references model objects actually exist in the database. """ import json +import re +from typing import cast from django.utils.translation import gettext_lazy as _ +import plugin.base.barcodes.helper from InvenTree.helpers import hash_barcode -from InvenTree.helpers_model import getModelsWithMixin from InvenTree.models import InvenTreeBarcodeMixin from plugin import InvenTreePlugin -from plugin.mixins import BarcodeMixin +from plugin.mixins import BarcodeMixin, SettingsMixin -class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): +class InvenTreeInternalBarcodePlugin(SettingsMixin, BarcodeMixin, InvenTreePlugin): """Builtin BarcodePlugin for matching and generating internal barcodes.""" NAME = 'InvenTreeBarcode' TITLE = _('InvenTree Barcodes') DESCRIPTION = _('Provides native support for barcodes') - VERSION = '2.0.0' + VERSION = '2.1.0' AUTHOR = _('InvenTree contributors') - @staticmethod - def get_supported_barcode_models(): - """Returns a list of database models which support barcode functionality.""" - return getModelsWithMixin(InvenTreeBarcodeMixin) + SETTINGS = { + 'INTERNAL_BARCODE_FORMAT': { + 'name': _('Internal Barcode Format'), + 'description': _('Select an internal barcode format'), + 'choices': [ + ('json', _('JSON barcodes (human readable)')), + ('short', _('Short barcodes (space optimized)')), + ], + 'default': 'json', + }, + 'SHORT_BARCODE_PREFIX': { + 'name': _('Short Barcode Prefix'), + 'description': _( + 'Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances' + ), + 'default': 'INV-', + }, + } def format_matched_response(self, label, model, instance): """Format a response for the scanned data.""" @@ -41,8 +57,35 @@ class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): Here we are looking for a dict object which contains a reference to a particular InvenTree database object """ + # Internal Barcodes - Short Format + # Attempt to match the barcode data against the short barcode format + prefix = cast(str, self.get_setting('SHORT_BARCODE_PREFIX')) + if type(barcode_data) is str and ( + m := re.match( + f'^{re.escape(prefix)}([0-9A-Z $%*+-.\\/:]{"{2}"})(\\d+)$', barcode_data + ) + ): + model_type_code, pk = m.groups() + + supported_models_map = ( + plugin.base.barcodes.helper.get_supported_barcode_model_codes_map() + ) + model = supported_models_map.get(model_type_code, None) + + if model is None: + return None + + label = model.barcode_model_type() + + try: + instance = model.objects.get(pk=int(pk)) + return self.format_matched_response(label, model, instance) + except (ValueError, model.DoesNotExist): + pass + + # Internal Barcodes - JSON Format # Attempt to coerce the barcode data into a dict object - # This is the internal barcode representation that InvenTree uses + # This is the internal JSON barcode representation that InvenTree uses barcode_dict = None if type(barcode_data) is dict: @@ -53,7 +96,7 @@ class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): except json.JSONDecodeError: pass - supported_models = self.get_supported_barcode_models() + supported_models = plugin.base.barcodes.helper.get_supported_barcode_models() if barcode_dict is not None and type(barcode_dict) is dict: # Look for various matches. First good match will be returned @@ -68,6 +111,7 @@ class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): except (ValueError, model.DoesNotExist): pass + # External Barcodes (Linked barcodes) # Create hash from raw barcode data barcode_hash = hash_barcode(barcode_data) @@ -79,3 +123,18 @@ class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): if instance is not None: return self.format_matched_response(label, model, instance) + + def generate(self, model_instance: InvenTreeBarcodeMixin): + """Generate a barcode for a given model instance.""" + barcode_format = self.get_setting('INTERNAL_BARCODE_FORMAT') + + if barcode_format == 'json': + return json.dumps({model_instance.barcode_model_type(): model_instance.pk}) + + if barcode_format == 'short': + prefix = self.get_setting('SHORT_BARCODE_PREFIX') + model_type_code = model_instance.barcode_model_type_code() + + return f'{prefix}{model_type_code}{model_instance.pk}' + + return None 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 233d174d64..aab979d2db 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py @@ -52,6 +52,21 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): reverse('api-barcode-scan'), data=data, expected_code=expected_code ) + def generate(self, model: str, pk: int, expected_code: int): + """Generate a barcode for a given model instance.""" + return self.post( + reverse('api-barcode-generate'), + data={'model': model, 'pk': pk}, + expected_code=expected_code, + ) + + def set_plugin_setting(self, key: str, value: str): + """Set the internal barcode format for the plugin.""" + from plugin import registry + + plugin = registry.get_plugin('inventreebarcode') + plugin.set_setting(key, value) + def test_unassign_errors(self): """Test various error conditions for the barcode unassign endpoint.""" # Fail without any fields provided @@ -248,8 +263,8 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): self.assertIn('success', response.data) self.assertEqual(response.data['stockitem']['pk'], 1) - def test_scan_inventree(self): - """Test scanning of first-party barcodes.""" + def test_scan_inventree_json(self): + """Test scanning of first-party json barcodes.""" # Scan a StockItem object (which does not exist) response = self.scan({'barcode': '{"stockitem": 5}'}, expected_code=400) @@ -290,3 +305,73 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): self.assertIn('success', response.data) self.assertIn('barcode_data', response.data) self.assertIn('barcode_hash', response.data) + + def test_scan_inventree_short(self): + """Test scanning of first-party short barcodes.""" + # Scan a StockItem object (which does not exist) + response = self.scan({'barcode': 'INV-SI5'}, expected_code=400) + + self.assertIn('No match found for barcode data', str(response.data)) + + # Scan a StockItem object (which does exist) + response = self.scan({'barcode': 'INV-SI1'}, expected_code=200) + + self.assertIn('success', response.data) + self.assertIn('stockitem', response.data) + self.assertEqual(response.data['stockitem']['pk'], 1) + + # Scan a StockLocation object + response = self.scan({'barcode': 'INV-SL5'}, expected_code=200) + + self.assertIn('success', response.data) + self.assertEqual(response.data['stocklocation']['pk'], 5) + self.assertEqual( + response.data['stocklocation']['api_url'], '/api/stock/location/5/' + ) + if settings.ENABLE_CLASSIC_FRONTEND: + self.assertEqual( + response.data['stocklocation']['web_url'], '/stock/location/5/' + ) + self.assertEqual(response.data['plugin'], 'InvenTreeBarcode') + + # Scan a Part object + response = self.scan({'barcode': 'INV-PA5'}, expected_code=200) + + self.assertEqual(response.data['part']['pk'], 5) + + # Scan a SupplierPart instance with custom prefix + for prefix in ['TEST', '']: + self.set_plugin_setting('SHORT_BARCODE_PREFIX', prefix) + response = self.scan({'barcode': f'{prefix}SP1'}, expected_code=200) + self.assertEqual(response.data['supplierpart']['pk'], 1) + self.assertEqual(response.data['plugin'], 'InvenTreeBarcode') + self.assertIn('success', response.data) + self.assertIn('barcode_data', response.data) + self.assertIn('barcode_hash', response.data) + + self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'INV-') + + def test_generation_inventree_json(self): + """Test JSON barcode generation.""" + item = stock.models.StockLocation.objects.get(pk=5) + data = self.generate('stocklocation', item.pk, expected_code=200).data + self.assertEqual(data['barcode'], '{"stocklocation": 5}') + + def test_generation_inventree_short(self): + """Test short barcode generation.""" + self.set_plugin_setting('INTERNAL_BARCODE_FORMAT', 'short') + + item = stock.models.StockLocation.objects.get(pk=5) + + # test with default prefix + data = self.generate('stocklocation', item.pk, expected_code=200).data + self.assertEqual(data['barcode'], 'INV-SL5') + + # test generation with custom prefix + for prefix in ['TEST', '']: + self.set_plugin_setting('SHORT_BARCODE_PREFIX', prefix) + data = self.generate('stocklocation', item.pk, expected_code=200).data + self.assertEqual(data['barcode'], f'{prefix}SL5') + + self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'INV-') + self.set_plugin_setting('INTERNAL_BARCODE_FORMAT', 'json') diff --git a/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py b/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py index 07bb3c8ef1..a0480ec89f 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py +++ b/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py @@ -35,26 +35,17 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin): # Keep track of individual label outputs # These will be stitched together at the end of printing outputs = [] - debug = None def before_printing(self): """Reset the list of label outputs.""" self.outputs = [] - self.debug = 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')) - - return self.debug def print_label(self, **kwargs): """Print a single label.""" label = kwargs['label_instance'] instance = kwargs['item_instance'] - if self.in_debug_mode(): + if str2bool(self.get_setting('DEBUG')): # In debug mode, return raw HTML output output = self.render_to_html(label, instance, None, **kwargs) else: @@ -68,7 +59,7 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin): if len(self.outputs) == 0: return None - if self.in_debug_mode(): + if str2bool(self.get_setting('DEBUG')): # Simple HTML output data = '\n'.join(self.outputs) filename = 'labels.html' diff --git a/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py b/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py index 39af2e7cca..f147edad3c 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py +++ b/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py @@ -93,11 +93,9 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, InvenTreePlugin): # execute the print job if driver.USE_BACKGROUND_WORKER is False: - return driver.print_labels(machine, label, items, request, **print_kwargs) + return driver.print_labels(machine, label, items, **print_kwargs) - offload_task( - driver.print_labels, machine, label, items, request, **print_kwargs - ) + offload_task(driver.print_labels, machine, label, items, **print_kwargs) return JsonResponse({ 'success': True, diff --git a/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py b/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py index bf88e0f132..c58f4d6cb2 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py +++ b/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py @@ -5,13 +5,13 @@ import math from django.core.exceptions import ValidationError from django.core.files.base import ContentFile -from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ import weasyprint from rest_framework import serializers import report.helpers +from InvenTree.helpers import str2bool from plugin import InvenTreePlugin from plugin.mixins import LabelPrintingMixin, SettingsMixin from report.models import LabelOutput, LabelTemplate @@ -64,7 +64,14 @@ class InvenTreeLabelSheetPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlug BLOCKING_PRINT = True - SETTINGS = {} + SETTINGS = { + 'DEBUG': { + 'name': _('Debug mode'), + 'description': _('Enable debug mode - returns raw HTML instead of PDF'), + 'validator': bool, + 'default': False, + } + } PrintingOptionsSerializer = LabelPrintingOptionsSerializer @@ -135,11 +142,16 @@ class InvenTreeLabelSheetPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlug # Render to a single HTML document html_data = self.wrap_pages(pages, **document_data) - # Render HTML to PDF - html = weasyprint.HTML(string=html_data) - document = html.render().write_pdf() + if str2bool(self.get_setting('DEBUG')): + # In debug mode return with the raw HTML + output.output = ContentFile(html_data, 'labels.html') + else: + # Render HTML to PDF + html = weasyprint.HTML(string=html_data) + document = html.render().write_pdf() + + output.output = ContentFile(document, 'labels.pdf') - output.output = ContentFile(document, 'labels.pdf') output.progress = 100 output.complete = True output.save() diff --git a/src/backend/InvenTree/plugin/mixins/__init__.py b/src/backend/InvenTree/plugin/mixins/__init__.py index 369711d8a5..958197511c 100644 --- a/src/backend/InvenTree/plugin/mixins/__init__.py +++ b/src/backend/InvenTree/plugin/mixins/__init__.py @@ -4,6 +4,7 @@ from common.notifications import BulkNotificationMethod, SingleNotificationMetho from plugin.base.action.mixins import ActionMixin from plugin.base.barcodes.mixins import BarcodeMixin, SupplierBarcodeMixin from plugin.base.event.mixins import EventMixin +from plugin.base.icons.mixins import IconPackMixin from plugin.base.integration.APICallMixin import APICallMixin from plugin.base.integration.AppMixin import AppMixin from plugin.base.integration.CurrencyExchangeMixin import CurrencyExchangeMixin @@ -13,6 +14,7 @@ from plugin.base.integration.ReportMixin import ReportMixin from plugin.base.integration.ScheduleMixin import ScheduleMixin from plugin.base.integration.SettingsMixin import SettingsMixin from plugin.base.integration.UrlsMixin import UrlsMixin +from plugin.base.integration.UserInterfaceMixin import UserIterfaceMixin from plugin.base.integration.ValidationMixin import ValidationMixin from plugin.base.label.mixins import LabelPrintingMixin from plugin.base.locate.mixins import LocateMixin @@ -22,6 +24,7 @@ __all__ = [ 'AppMixin', 'CurrencyExchangeMixin', 'EventMixin', + 'IconPackMixin', 'LabelPrintingMixin', 'NavigationMixin', 'ReportMixin', @@ -29,6 +32,7 @@ __all__ = [ 'SettingsContentMixin', 'SettingsMixin', 'UrlsMixin', + 'UserIterfaceMixin', 'PanelMixin', 'ActionMixin', 'BarcodeMixin', diff --git a/src/backend/InvenTree/plugin/registry.py b/src/backend/InvenTree/plugin/registry.py index f837c64ce0..4b49eb5433 100644 --- a/src/backend/InvenTree/plugin/registry.py +++ b/src/backend/InvenTree/plugin/registry.py @@ -220,51 +220,15 @@ class PluginsRegistry: """ logger.info('Loading plugins') - registered_successful = False - blocked_plugin = None - retry_counter = settings.PLUGIN_RETRY - - while not registered_successful: - try: - # We are using the db so for migrations etc we need to try this block - self._init_plugins(blocked_plugin) - self._activate_plugins(full_reload=full_reload) - registered_successful = True - except (OperationalError, ProgrammingError): # pragma: no cover - # Exception if the database has not been migrated yet - logger.info('Database not accessible while loading plugins') - break - except IntegrationPluginError as error: - logger.exception( - '[PLUGIN] Encountered an error with %s:\n%s', - error.path, - error.message, - ) - log_error({error.path: error.message}, 'load') - blocked_plugin = error.path # we will not try to load this app again - - # Initialize apps without any plugins - self._clean_registry() - self._clean_installed_apps() - self._activate_plugins(force_reload=True, full_reload=full_reload) - - # We do not want to end in an endless loop - retry_counter -= 1 - - if retry_counter <= 0: # pragma: no cover - if settings.PLUGIN_TESTING: - print('[PLUGIN] Max retries, breaking loading') - break - if settings.PLUGIN_TESTING: - print( - f'[PLUGIN] Above error occurred during testing - {retry_counter}/{settings.PLUGIN_RETRY} retries left' - ) - - # now the loading will re-start up with init - - # disable full reload after the first round - if full_reload: - full_reload = False + try: + self._init_plugins() + self._activate_plugins(full_reload=full_reload) + except (OperationalError, ProgrammingError, IntegrityError): + # Exception if the database has not been migrated yet, or is not ready + pass + except IntegrationPluginError: + # Plugin specific error has already been handled + pass # ensure plugins_loaded is True self.plugins_loaded = True @@ -479,18 +443,13 @@ class PluginsRegistry: # endregion # region general internal loading / activating / deactivating / unloading - def _init_plugins(self, disabled: str = None): - """Initialise all found plugins. + def _init_plugin(self, plugin, configs: dict): + """Initialise a single plugin. Args: - disabled (str, optional): Loading path of disabled app. Defaults to None. - - Raises: - error: IntegrationPluginError + plugin: Plugin module """ - # Imports need to be in this level to prevent early db model imports from InvenTree import version - from plugin.models import PluginConfig def safe_reference(plugin, key: str, active: bool = True): """Safe reference to plugin dicts.""" @@ -504,6 +463,99 @@ class PluginsRegistry: self.plugins_inactive[key] = plugin.db self.plugins_full[key] = plugin + # These checks only use attributes - never use plugin supplied functions -> that would lead to arbitrary code execution!! + plg_name = plugin.NAME + plg_key = slugify( + plugin.SLUG if getattr(plugin, 'SLUG', None) else plg_name + ) # keys are slugs! + + logger.info("Loading plugin '%s'", plg_key) + + if plg_key in configs: + plg_db = configs[plg_key] + else: + plg_db = self.get_plugin_config(plg_key, plg_name) + + plugin.db = plg_db + + # Check if this is a 'builtin' plugin + builtin = plugin.check_is_builtin() + + package_name = None + + # Extract plugin package name + if getattr(plugin, 'is_package', False): + package_name = getattr(plugin, 'package_name', None) + + # Auto-enable builtin plugins + if builtin and plg_db and not plg_db.active: + plg_db.active = True + plg_db.save() + + # Save the package_name attribute to the plugin + if plg_db.package_name != package_name: + plg_db.package_name = package_name + plg_db.save() + + # Determine if this plugin should be loaded: + # - If PLUGIN_TESTING is enabled + # - If this is a 'builtin' plugin + # - If this plugin has been explicitly enabled by the user + if settings.PLUGIN_TESTING or builtin or (plg_db and plg_db.active): + # Initialize package - we can be sure that an admin has activated the plugin + logger.debug('Loading plugin `%s`', plg_name) + + try: + t_start = time.time() + plg_i: InvenTreePlugin = plugin() + dt = time.time() - t_start + logger.debug('Loaded plugin `%s` in %.3fs', plg_name, dt) + except Exception as error: + handle_error( + error, log_name='init' + ) # log error and raise it -> disable plugin + + logger.warning('Plugin `%s` could not be loaded', plg_name) + + # Safe extra attributes + plg_i.is_package = getattr(plg_i, 'is_package', False) + + plg_i.pk = plg_db.pk if plg_db else None + plg_i.db = plg_db + + # Run version check for plugin + if (plg_i.MIN_VERSION or plg_i.MAX_VERSION) and not plg_i.check_version(): + # Disable plugin + safe_reference(plugin=plg_i, key=plg_key, active=False) + + p = plg_name + v = version.inventreeVersion() + _msg = _( + f"Plugin '{p}' is not compatible with the current InvenTree version {v}" + ) + if v := plg_i.MIN_VERSION: + _msg += _(f'Plugin requires at least version {v}') + if v := plg_i.MAX_VERSION: + _msg += _(f'Plugin requires at most version {v}') + # Log to error stack + log_error(_msg, reference='init') + else: + safe_reference(plugin=plg_i, key=plg_key) + else: # pragma: no cover + safe_reference(plugin=plugin, key=plg_key, active=False) + + def _init_plugins(self): + """Initialise all found plugins. + + Args: + disabled (str, optional): Loading path of disabled app. Defaults to None. + + Raises: + error: IntegrationPluginError + """ + # Imports need to be in this level to prevent early db model imports + from plugin.models import PluginConfig + logger.debug('Starting plugin initialization') # Fetch and cache list of existing plugin configuration instances @@ -511,102 +563,32 @@ class PluginsRegistry: # Initialize plugins for plg in self.plugin_modules: - # These checks only use attributes - never use plugin supplied functions -> that would lead to arbitrary code execution!! - plg_name = plg.NAME - plg_key = slugify( - plg.SLUG if getattr(plg, 'SLUG', None) else plg_name - ) # keys are slugs! + # Attempt to load each individual plugin + attempts = settings.PLUGIN_RETRY - try: - if plg_key in plugin_configs: - # Configuration already exists - plg_db = plugin_configs[plg_key] - else: - # Configuration needs to be created - plg_db = self.get_plugin_config(plg_key, plg_name) - except (OperationalError, ProgrammingError) as error: - # Exception if the database has not been migrated yet - check if test are running - raise if not - if not settings.PLUGIN_TESTING: - raise error # pragma: no cover - plg_db = None - except IntegrityError as error: # pragma: no cover - logger.exception('Error initializing plugin `%s`: %s', plg_name, error) - handle_error(error, log_name='init') - - # Append reference to plugin - plg.db = plg_db - - # Check if this is a 'builtin' plugin - builtin = plg.check_is_builtin() - - package_name = None - - # Extract plugin package name - if getattr(plg, 'is_package', False): - package_name = getattr(plg, 'package_name', None) - - # Auto-enable builtin plugins - if builtin and plg_db and not plg_db.active: - plg_db.active = True - plg_db.save() - - # Save the package_name attribute to the plugin - if plg_db.package_name != package_name: - plg_db.package_name = package_name - plg_db.save() - - # Determine if this plugin should be loaded: - # - If PLUGIN_TESTING is enabled - # - If this is a 'builtin' plugin - # - If this plugin has been explicitly enabled by the user - if settings.PLUGIN_TESTING or builtin or (plg_db and plg_db.active): - # Check if the plugin was blocked -> threw an error; option1: package, option2: file-based - if disabled and disabled in (plg.__name__, plg.__module__): - safe_reference(plugin=plg, key=plg_key, active=False) - continue # continue -> the plugin is not loaded - - # Initialize package - we can be sure that an admin has activated the plugin - logger.debug('Loading plugin `%s`', plg_name) + while attempts > 0: + attempts -= 1 try: - t_start = time.time() - plg_i: InvenTreePlugin = plg() - dt = time.time() - t_start - logger.debug('Loaded plugin `%s` in %.3fs', plg_name, dt) + self._init_plugin(plg, plugin_configs) + break + except IntegrationPluginError: + # Error has been handled downstream + pass except Exception as error: + # Handle the error, log it and try again handle_error( - error, log_name='init' - ) # log error and raise it -> disable plugin - logger.warning('Plugin `%s` could not be loaded', plg_name) - - # Safe extra attributes - plg_i.is_package = getattr(plg_i, 'is_package', False) - - plg_i.pk = plg_db.pk if plg_db else None - plg_i.db = plg_db - - # Run version check for plugin - if ( - plg_i.MIN_VERSION or plg_i.MAX_VERSION - ) and not plg_i.check_version(): - # Disable plugin - safe_reference(plugin=plg_i, key=plg_key, active=False) - - p = plg_name - v = version.inventreeVersion() - _msg = _( - f"Plugin '{p}' is not compatible with the current InvenTree version {v}" + error, log_name='init', do_raise=settings.PLUGIN_TESTING ) - if v := plg_i.MIN_VERSION: - _msg += _(f'Plugin requires at least version {v}') - if v := plg_i.MAX_VERSION: - _msg += _(f'Plugin requires at most version {v}') - # Log to error stack - log_error(_msg, reference='init') - else: - safe_reference(plugin=plg_i, key=plg_key) - else: # pragma: no cover - safe_reference(plugin=plg, key=plg_key, active=False) + + if attempts == 0: + logger.exception( + '[PLUGIN] Encountered an error with %s:\n%s', + error.path, + str(error), + ) + + logger.debug('Finished plugin initialization') def __get_mixin_order(self): """Returns a list of mixin classes, in the order that they should be activated.""" @@ -786,7 +768,7 @@ class PluginsRegistry: for k in self.plugin_settings_keys(): try: - val = get_global_setting(k, False, create=False) + val = get_global_setting(k) msg = f'{k}-{val}' data.update(msg.encode()) diff --git a/src/backend/InvenTree/plugin/samples/icons/__init__.py b/src/backend/InvenTree/plugin/samples/icons/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/backend/InvenTree/plugin/samples/icons/icon_sample.py b/src/backend/InvenTree/plugin/samples/icons/icon_sample.py new file mode 100644 index 0000000000..795f147ebf --- /dev/null +++ b/src/backend/InvenTree/plugin/samples/icons/icon_sample.py @@ -0,0 +1,39 @@ +"""Sample icon pack plugin to add custom icons.""" + +from django.templatetags.static import static + +from common.icons import IconPack +from plugin.base.icons.mixins import IconPackMixin +from plugin.plugin import InvenTreePlugin + + +class SampleIconPlugin(IconPackMixin, InvenTreePlugin): + """Example plugin to add custom icons.""" + + NAME = 'SampleIconPackPlugin' + SLUG = 'sampleicons' + TITLE = 'My sample icon pack plugin' + + VERSION = '0.0.1' + + def icon_packs(self): + """Return a list of custom icon packs.""" + return [ + IconPack( + name='My Custom Icons', + prefix='my', + fonts={ + 'woff2': static('fontawesome/webfonts/fa-regular-400.woff2'), + 'woff': static('fontawesome/webfonts/fa-regular-400.woff'), + 'truetype': static('fontawesome/webfonts/fa-regular-400.ttf'), + }, + icons={ + 'my-icon': { + 'name': 'My Icon', + 'category': '', + 'tags': ['my', 'icon'], + 'variants': {'filled': 'f0a5', 'cool': 'f073'}, + } + }, + ) + ] diff --git a/src/backend/InvenTree/plugin/samples/icons/test_icon_sample.py b/src/backend/InvenTree/plugin/samples/icons/test_icon_sample.py new file mode 100644 index 0000000000..fa1eef5af8 --- /dev/null +++ b/src/backend/InvenTree/plugin/samples/icons/test_icon_sample.py @@ -0,0 +1,52 @@ +"""Unit tests for icon pack sample plugins.""" + +from django.urls import reverse + +from InvenTree.unit_test import InvenTreeAPITestCase +from plugin import InvenTreePlugin, registry +from plugin.helpers import MixinNotImplementedError +from plugin.mixins import IconPackMixin + + +class SampleIconPackPluginTests(InvenTreeAPITestCase): + """Tests for SampleIconPackPlugin.""" + + def test_get_icons_api(self): + """Check get icons api.""" + # Activate plugin + config = registry.get_plugin('sampleicons').plugin_config() + config.active = True + config.save() + + response = self.get(reverse('api-icon-list'), expected_code=200) + self.assertEqual(len(response.data), 2) + + for icon_pack in response.data: + if icon_pack['prefix'] == 'my': + break + else: + self.fail('My icon pack not found') + + self.assertEqual(icon_pack['prefix'], 'my') + self.assertEqual(icon_pack['name'], 'My Custom Icons') + for font_format in ['woff2', 'woff', 'truetype']: + self.assertIn(font_format, icon_pack['fonts']) + + self.assertEqual(len(icon_pack['icons']), 1) + self.assertEqual(icon_pack['icons']['my-icon']['name'], 'My Icon') + self.assertEqual(icon_pack['icons']['my-icon']['category'], '') + self.assertEqual(icon_pack['icons']['my-icon']['tags'], ['my', 'icon']) + self.assertEqual( + icon_pack['icons']['my-icon']['variants'], + {'filled': 'f0a5', 'cool': 'f073'}, + ) + + def test_mixin(self): + """Test that MixinNotImplementedError is raised.""" + + class Wrong(IconPackMixin, InvenTreePlugin): + pass + + with self.assertRaises(MixinNotImplementedError): + plugin = Wrong() + plugin.icon_packs() 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 d81fcd1873..b67c8e96f1 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,6 @@ import random from plugin import InvenTreePlugin from plugin.mixins import ReportMixin -from report.models import ReportTemplate class SampleReportPlugin(ReportMixin, InvenTreePlugin): diff --git a/src/backend/InvenTree/plugin/staticfiles.py b/src/backend/InvenTree/plugin/staticfiles.py index e80f4a25f5..0ece4bcc7e 100644 --- a/src/backend/InvenTree/plugin/staticfiles.py +++ b/src/backend/InvenTree/plugin/staticfiles.py @@ -1,7 +1,6 @@ """Static files management for InvenTree plugins.""" import logging -from pathlib import Path from django.contrib.staticfiles.storage import staticfiles_storage @@ -23,12 +22,15 @@ def clear_static_dir(path, recursive=True): dirs, files = staticfiles_storage.listdir(path) for f in files: - staticfiles_storage.delete(f'{path}/{f}') + staticfiles_storage.delete(f'{path}{f}') if recursive: for d in dirs: - clear_static_dir(f'{path}/{d}', recursive=True) - staticfiles_storage.delete(d) + clear_static_dir(f'{path}{d}/', recursive=True) + staticfiles_storage.delete(f'{path}{d}') + + # Finally, delete the directory itself to remove orphan folders when uninstalling a plugin + staticfiles_storage.delete(path) def collect_plugins_static_files(): @@ -38,19 +40,20 @@ def collect_plugins_static_files(): logger.info('Collecting static files for all installed plugins.') for slug in registry.plugins.keys(): - copy_plugin_static_files(slug) + copy_plugin_static_files(slug, check_reload=False) -def copy_plugin_static_files(slug): +def copy_plugin_static_files(slug, check_reload=True): """Copy static files for the specified plugin.""" - registry.check_reload() + if check_reload: + registry.check_reload() plugin = registry.get_plugin(slug) if not plugin: return - logger.info("Copying static files for plugin '%s'") + logger.info("Copying static files for plugin '%s'", slug) # Get the source path for the plugin source_path = plugin.path().joinpath('static') @@ -86,7 +89,7 @@ def copy_plugin_static_files(slug): with item.open('rb') as src: staticfiles_storage.save(destination_path, src) - logger.debug(f'- copied {item} to {destination_path}') + logger.debug('- copied %s to %s', str(item), str(destination_path)) copied += 1 - logger.info(f"Copied %s static files for plugin '%s'.", copied, slug) + logger.info("Copied %s static files for plugin '%s'.", copied, slug) diff --git a/src/backend/InvenTree/plugin/templatetags/plugin_extras.py b/src/backend/InvenTree/plugin/templatetags/plugin_extras.py index 38abaa650e..c7d15e95a8 100644 --- a/src/backend/InvenTree/plugin/templatetags/plugin_extras.py +++ b/src/backend/InvenTree/plugin/templatetags/plugin_extras.py @@ -2,6 +2,7 @@ from django import template from django.conf import settings as djangosettings +from django.templatetags.static import static from django.urls import reverse from common.notifications import storage @@ -96,3 +97,27 @@ def notification_list(context, *args, **kwargs): } for a in storage.liste ] + + +@register.simple_tag(takes_context=True) +def plugin_static(context, file: str, **kwargs): + """Return the URL for a static file within a plugin. + + Arguments: + file: The path to the file within the plugin static directory + + Keyword Arguments: + plugin: The plugin slug (optional, will be inferred from the context if not provided) + + """ + plugin = context.get('plugin', None) + + if plugin: + plugin = plugin.slug + else: + plugin = kwargs.get('plugin', None) + + if not plugin: + return file + + return static(f'plugins/{plugin}/{file}') diff --git a/src/backend/InvenTree/plugin/test_api.py b/src/backend/InvenTree/plugin/test_api.py index bdef4481e3..d5cd8a1a4a 100644 --- a/src/backend/InvenTree/plugin/test_api.py +++ b/src/backend/InvenTree/plugin/test_api.py @@ -233,7 +233,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): # Activate the 'sample' plugin via the API cfg = PluginConfig.objects.filter(key='sample').first() - assert cfg is not None + self.assertIsNotNone(cfg) url = reverse('api-plugin-detail-activate', kwargs={'plugin': cfg.key}) self.client.patch(url, {}, expected_code=200) @@ -292,3 +292,14 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): ) self.assertEqual(response.data['value'], '456') + + def test_plugin_metadata(self): + """Test metadata endpoint for plugin.""" + self.user.is_superuser = True + self.user.save() + + cfg = PluginConfig.objects.filter(key='sample').first() + self.assertIsNotNone(cfg) + + url = reverse('api-plugin-metadata', kwargs={'plugin': cfg.key}) + self.get(url, expected_code=200) diff --git a/src/backend/InvenTree/plugin/test_plugin.py b/src/backend/InvenTree/plugin/test_plugin.py index cff4373975..4fe03ea1c9 100644 --- a/src/backend/InvenTree/plugin/test_plugin.py +++ b/src/backend/InvenTree/plugin/test_plugin.py @@ -273,15 +273,17 @@ class RegistryTests(TestCase): # Reload to rediscover plugins registry.reload_plugins(full_reload=True, collect=True) - self.assertEqual(len(registry.errors), 3) + self.assertEqual(len(registry.errors), 2) + # There should be at least one discovery error in the module `broken_file` 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.assertGreater(len(registry.errors.get('load')), 0) + self.assertGreater(len(registry.errors.get('init')), 0) self.assertEqual( - registry.errors.get('load')[0]['broken_sample'], "'This is a dummy error'" + registry.errors.get('init')[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 ac454e588e..5d6485e4ec 100644 --- a/src/backend/InvenTree/plugin/urls.py +++ b/src/backend/InvenTree/plugin/urls.py @@ -3,20 +3,18 @@ from django.conf import settings from django.urls import include, re_path +from common.validators import get_global_setting + 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.registry import registry urls = [] - if ( - InvenTreeSetting.get_setting('ENABLE_PLUGINS_URL', False) - or settings.PLUGIN_TESTING_SETUP - ): + if get_global_setting('ENABLE_PLUGINS_URL', False) or settings.PLUGIN_TESTING_SETUP: for plugin in registry.plugins.values(): if plugin.mixin_enabled('urls'): urls.append(plugin.urlpatterns) diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index c4e566067b..75959557f7 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -354,7 +354,7 @@ class ReportPrint(GenericAPIView): for plugin in registry.with_mixin('report'): try: plugin.report_callback(self, instance, output, request) - except Exception as e: + except Exception: InvenTree.exceptions.log_error( f'plugins.{plugin.slug}.report_callback' ) diff --git a/src/backend/InvenTree/report/helpers.py b/src/backend/InvenTree/report/helpers.py index a790b02662..04e328da8a 100644 --- a/src/backend/InvenTree/report/helpers.py +++ b/src/backend/InvenTree/report/helpers.py @@ -70,7 +70,7 @@ def page_size(page_code): def report_page_size_default(): """Returns the default page size for PDF reports.""" try: - page_size = get_global_setting('REPORT_DEFAULT_PAGE_SIZE', 'A4') + page_size = get_global_setting('REPORT_DEFAULT_PAGE_SIZE', 'A4', create=False) except Exception as exc: logger.exception('Error getting default page size: %s', str(exc)) page_size = 'A4' @@ -78,21 +78,21 @@ def report_page_size_default(): return page_size -def encode_image_base64(image, format: str = 'PNG'): +def encode_image_base64(image, img_format: str = 'PNG'): """Return a base-64 encoded image which can be rendered in an tag. Arguments: image: {Image} -- Image to encode - format: {str} -- Image format (default = 'PNG') + img_format: {str} -- Image format (default = 'PNG') Returns: str -- Base64 encoded image data e.g. 'data:image/png;base64,xxxxxxxxx' """ - fmt = format.lower() + img_format = str(img_format).lower() buffered = io.BytesIO() - image.save(buffered, fmt) + image.save(buffered, img_format) img_str = base64.b64encode(buffered.getvalue()) - return f'data:image/{fmt};charset=utf-8;base64,' + img_str.decode() + return f'data:image/{img_format};charset=utf-8;base64,' + img_str.decode() diff --git a/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py b/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py index e1ce0fbd69..0e04b915db 100644 --- a/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py +++ b/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py @@ -36,7 +36,7 @@ def convert_legacy_labels(table_name, model_name, template_model): 'name', 'description', 'label', 'enabled', 'height', 'width', 'filename_pattern', 'filters' ] - non_null_fields = ['decription', 'filename_pattern', 'filters'] + non_null_fields = ['description', 'filename_pattern', 'filters'] fieldnames = ', '.join(fields) diff --git a/src/backend/InvenTree/report/models.py b/src/backend/InvenTree/report/models.py index 05584b5588..58cb2a0998 100644 --- a/src/backend/InvenTree/report/models.py +++ b/src/backend/InvenTree/report/models.py @@ -15,12 +15,12 @@ from django.template.loader import render_to_string from django.urls import reverse from django.utils.translation import gettext_lazy as _ -import common.models import InvenTree.exceptions import InvenTree.helpers import InvenTree.models import report.helpers import report.validators +from common.settings import get_global_setting from InvenTree.helpers_model import get_base_url from InvenTree.models import MetadataMixin from plugin.registry import registry @@ -311,8 +311,8 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): def get_report_size(self): """Return the printable page size for this report.""" try: - page_size_default = common.models.InvenTreeSetting.get_setting( - 'REPORT_DEFAULT_PAGE_SIZE', 'A4' + page_size_default = get_global_setting( + 'REPORT_DEFAULT_PAGE_SIZE', 'A4', create=False ) except Exception: page_size_default = 'A4' @@ -408,7 +408,7 @@ class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): for plugin in plugins: # Let each plugin add its own context data - plugin.add_label_context(self, self.object_to_print, request, context) + plugin.add_label_context(self, instance, request, context) return context 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 4e25b4598f..25a4598154 100644 --- a/src/backend/InvenTree/report/templates/report/inventree_test_report.html +++ b/src/backend/InvenTree/report/templates/report/inventree_test_report.html @@ -111,8 +111,7 @@ content: "{% trans 'Stock Item Test Report' %}";
    {% for key in test_keys %} - - {% getkey test_template_map key as test_template %} + {% getkey test_templates key as test_template %} {% getkey results key as test_result %} diff --git a/src/backend/InvenTree/report/templatetags/barcode.py b/src/backend/InvenTree/report/templatetags/barcode.py index 72568421ad..85aeed953f 100644 --- a/src/backend/InvenTree/report/templatetags/barcode.py +++ b/src/backend/InvenTree/report/templatetags/barcode.py @@ -3,12 +3,20 @@ from django import template import barcode as python_barcode -import qrcode as python_qrcode +import qrcode.constants as ECL +from qrcode.main import QRCode import report.helpers register = template.Library() +QR_ECL_LEVEL_MAP = { + 'L': ECL.ERROR_CORRECT_L, + 'M': ECL.ERROR_CORRECT_M, + 'Q': ECL.ERROR_CORRECT_Q, + 'H': ECL.ERROR_CORRECT_H, +} + def image_data(img, fmt='PNG'): """Convert an image into HTML renderable data. @@ -22,36 +30,44 @@ def image_data(img, fmt='PNG'): def qrcode(data, **kwargs): """Return a byte-encoded QR code image. - kwargs: - fill_color: Fill color (default = black) - back_color: Background color (default = white) - version: Default = 1 - box_size: Default = 20 - border: Default = 1 + Arguments: + data: Data to encode + + Keyword Arguments: + version: QR code version, (None to auto detect) (default = None) + error_correction: Error correction level (L: 7%, M: 15%, Q: 25%, H: 30%) (default = 'M') + box_size: pixel dimensions for one black square pixel in the QR code (default = 20) + border: count white QR square pixels around the qr code, needed as padding (default = 1) + optimize: data will be split into multiple chunks of at least this length using different modes (text, alphanumeric, binary) to optimize the QR code size. Set to `0` to disable. (default = 1) + format: Image format (default = 'PNG') + fill_color: Fill color (default = "black") + back_color: Background color (default = "white") Returns: base64 encoded image data """ - # Construct "default" values - params = {'box_size': 20, 'border': 1, 'version': 1} - + # Extract other arguments from kwargs fill_color = kwargs.pop('fill_color', 'black') back_color = kwargs.pop('back_color', 'white') + image_format = kwargs.pop('format', 'PNG') + optimize = kwargs.pop('optimize', 1) - format = kwargs.pop('format', 'PNG') - - params.update(**kwargs) - - qr = python_qrcode.QRCode(**params) - - qr.add_data(data, optimize=20) - qr.make(fit=True) + # Construct QR code object + qr = QRCode(**{ + 'box_size': 20, + 'border': 1, + 'version': None, + **kwargs, + 'error_correction': QR_ECL_LEVEL_MAP[kwargs.get('error_correction', 'M')], + }) + qr.add_data(data, optimize=optimize) + qr.make(fit=False) # if version is None, it will automatically use fit=True qri = qr.make_image(fill_color=fill_color, back_color=back_color) # Render to byte-encoded image - return image_data(qri, fmt=format) + return image_data(qri, fmt=image_format) @register.simple_tag() @@ -59,7 +75,7 @@ def barcode(data, barcode_class='code128', **kwargs): """Render a barcode.""" constructor = python_barcode.get_barcode_class(barcode_class) - format = kwargs.pop('format', 'PNG') + img_format = kwargs.pop('format', 'PNG') data = str(data).zfill(constructor.digits) @@ -70,4 +86,4 @@ def barcode(data, barcode_class='code128', **kwargs): image = barcode_image.render(writer_options=kwargs) # Render to byte-encoded image - return image_data(image, fmt=format) + return image_data(image, fmt=img_format) diff --git a/src/backend/InvenTree/report/templatetags/report.py b/src/backend/InvenTree/report/templatetags/report.py index 92fe1408c2..39f664b870 100644 --- a/src/backend/InvenTree/report/templatetags/report.py +++ b/src/backend/InvenTree/report/templatetags/report.py @@ -7,11 +7,13 @@ from decimal import Decimal from django import template from django.conf import settings +from django.core.exceptions import ValidationError from django.utils.safestring import SafeString, mark_safe from django.utils.translation import gettext_lazy as _ from PIL import Image +import common.icons import InvenTree.helpers import InvenTree.helpers_model import report.helpers @@ -170,6 +172,18 @@ def uploaded_image( width = kwargs.get('width', None) height = kwargs.get('height', None) + if width is not None: + try: + width = int(width) + except ValueError: + width = None + + if height is not None: + try: + height = int(height) + except ValueError: + height = None + if width is not None and height is not None: # Resize the image, width *and* height are provided img = img.resize((width, height)) @@ -185,10 +199,12 @@ def uploaded_image( img = img.resize((wsize, height)) # Optionally rotate the image - rotate = kwargs.get('rotate', None) - - if rotate is not None: - img = img.rotate(rotate) + if rotate := kwargs.get('rotate', None): + try: + rotate = int(rotate) + img = img.rotate(rotate) + except ValueError: + pass # Return a base-64 encoded image img_data = report.helpers.encode_image_base64(img) @@ -459,3 +475,61 @@ def format_date(date, timezone=None, format=None): return date.strftime(format) else: return date.isoformat() + + +@register.simple_tag() +def icon(name, **kwargs): + """Render an icon from the icon packs. + + Arguments: + name: The name of the icon to render + + Keyword Arguments: + class: Optional class name(s) to apply to the icon element + """ + if not name: + return '' + + try: + pack, icon, variant = common.icons.validate_icon(name) + except ValidationError: + return '' + + unicode = chr(int(icon['variants'][variant], 16)) + return mark_safe( + f'{unicode}' + ) + + +@register.simple_tag() +def include_icon_fonts(): + """Return the CSS font-face rule for the icon fonts used on the current page (or all).""" + fonts = [] + + for font in common.icons.get_icon_packs().values(): + # generate the font src string (prefer ttf over woff, woff2 is not supported by weasyprint) + if 'truetype' in font.fonts: + font_format, url = 'truetype', font.fonts['truetype'] + elif 'woff' in font.fonts: + font_format, url = 'woff', font.fonts['woff'] + + fonts.append(f""" +@font-face {'{'} + font-family: 'inventree-icon-font-{font.prefix}'; + src: url('{InvenTree.helpers_model.construct_absolute_url(url)}') format('{font_format}'); +{'}'}\n""") + + icon_class = f""" +.icon {'{'} + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better font rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +{'}'} + """ + + return mark_safe(icon_class + '\n'.join(fonts)) diff --git a/src/backend/InvenTree/report/tests.py b/src/backend/InvenTree/report/tests.py index bf30286f15..8f05fa0041 100644 --- a/src/backend/InvenTree/report/tests.py +++ b/src/backend/InvenTree/report/tests.py @@ -15,14 +15,14 @@ from PIL import Image import report.models as report_models from build.models import Build -from common.models import InvenTreeSetting +from common.models import Attachment, 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 +from stock.models import StockItem class ReportTagTest(TestCase): @@ -186,6 +186,31 @@ class ReportTagTest(TestCase): result = report_tags.format_datetime(time, tz, fmt) self.assertEqual(result, expected) + def test_icon(self): + """Test the icon template tag.""" + for icon in [None, '', 'not:the-correct-format', 'any-non-existent-icon']: + self.assertEqual(report_tags.icon(icon), '') + + self.assertEqual( + report_tags.icon('ti:package:outline'), + f'{chr(int("eaff", 16))}', + ) + self.assertEqual( + report_tags.icon( + 'ti:package:outline', **{'class': 'my-custom-class my-seconds-class'} + ), + f'{chr(int("eaff", 16))}', + ) + + def test_include_icon_fonts(self): + """Test the include_icon_fonts template tag.""" + style = report_tags.include_icon_fonts() + + self.assertIn('@font-face {', style) + self.assertIn("font-family: 'inventree-icon-font-ti';", style) + self.assertIn('tabler-icons/tabler-icons.ttf', style) + self.assertIn('.icon {', style) + class BarcodeTagTest(TestCase): """Unit tests for the barcode template tags.""" @@ -502,7 +527,7 @@ class PrintTestMixins: }, expected_code=201, max_query_time=15, - max_query_count=1000, # TODO: Should look into this + max_query_count=500 * len(qs), ) @@ -548,7 +573,9 @@ class TestReportTest(PrintTestMixins, ReportTest): 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()) + self.assertFalse( + Attachment.objects.filter(model_id=item.pk, model_type='stockitem').exists() + ) return # TODO @matmair - Re-add this test after https://github.com/inventree/InvenTree/pull/7074/files#r1600694356 is resolved @@ -556,14 +583,16 @@ class TestReportTest(PrintTestMixins, ReportTest): InvenTreeSetting.set_setting('REPORT_ATTACH_TEST_REPORT', True, None) response = self.post( - url, {'template': report.pk, 'items': [item.pk]}, expected_code=201 + url, {'template': template.pk, 'items': [item.pk]}, expected_code=201 ) # 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() + attachment = Attachment.objects.filter( + model_id=item.pk, model_type='stockitem' + ).first() self.assertIsNotNone(attachment) def test_mdl_build(self): diff --git a/src/backend/InvenTree/script/update_icons.py b/src/backend/InvenTree/script/update_icons.py new file mode 100644 index 0000000000..1d0dfb2a57 --- /dev/null +++ b/src/backend/InvenTree/script/update_icons.py @@ -0,0 +1,67 @@ +"""This script updates the vendored tabler icons package.""" + +import json +import os +import shutil +import tempfile + +if __name__ == '__main__': + MY_DIR = os.path.dirname(os.path.realpath(__file__)) + STATIC_FOLDER = os.path.abspath( + os.path.join(MY_DIR, '..', 'InvenTree', 'static', 'tabler-icons') + ) + TMP_FOLDER = os.path.join(tempfile.gettempdir(), 'tabler-icons') + + if not os.path.exists(TMP_FOLDER): + os.mkdir(TMP_FOLDER) + + if not os.path.exists(STATIC_FOLDER): + os.mkdir(STATIC_FOLDER) + + print('Downloading tabler icons...') + os.system(f'npm install --prefix {TMP_FOLDER} @tabler/icons @tabler/icons-webfont') + + print(f'Copying tabler icons to {STATIC_FOLDER}...') + + for font in ['tabler-icons.woff', 'tabler-icons.woff2', 'tabler-icons.ttf']: + shutil.copyfile( + os.path.join( + TMP_FOLDER, + 'node_modules', + '@tabler', + 'icons-webfont', + 'dist', + 'fonts', + font, + ), + os.path.join(STATIC_FOLDER, font), + ) + + # Copy license + shutil.copyfile( + os.path.join(TMP_FOLDER, 'node_modules', '@tabler', 'icons-webfont', 'LICENSE'), + os.path.join(STATIC_FOLDER, 'LICENSE'), + ) + + print('Generating icon list...') + with open( + os.path.join(TMP_FOLDER, 'node_modules', '@tabler', 'icons', 'icons.json'), 'r' + ) as f: + icons = json.load(f) + + res = {} + for icon in icons.values(): + res[icon['name']] = { + 'name': icon['name'], + 'category': icon['category'], + 'tags': icon['tags'], + 'variants': { + name: style['unicode'] for name, style in icon['styles'].items() + }, + } + + with open(os.path.join(STATIC_FOLDER, 'icons.json'), 'w') as f: + json.dump(res, f, separators=(',', ':')) + + print('Cleaning up...') + shutil.rmtree(TMP_FOLDER) diff --git a/src/backend/InvenTree/stock/admin.py b/src/backend/InvenTree/stock/admin.py index eca6728dac..ced26f60fa 100644 --- a/src/backend/InvenTree/stock/admin.py +++ b/src/backend/InvenTree/stock/admin.py @@ -16,7 +16,6 @@ from part.models import Part from .models import ( StockItem, - StockItemAttachment, StockItemTestResult, StockItemTracking, StockLocation, @@ -234,17 +233,17 @@ class StockItemResource(InvenTreeResource): is_building = Field( attribute='is_building', column_name=_('Building'), - widget=widgets.IntegerWidget(), + widget=widgets.BooleanWidget(), ) review_needed = Field( attribute='review_needed', column_name=_('Review Needed'), - widget=widgets.IntegerWidget(), + widget=widgets.BooleanWidget(), ) delete_on_deplete = Field( attribute='delete_on_deplete', column_name=_('Delete on Deplete'), - widget=widgets.IntegerWidget(), + widget=widgets.BooleanWidget(), ) # Date management @@ -301,15 +300,6 @@ class StockItemAdmin(ImportExportModelAdmin): ] -@admin.register(StockItemAttachment) -class StockAttachmentAdmin(admin.ModelAdmin): - """Admin class for StockAttachment.""" - - list_display = ('stock_item', 'attachment', 'comment') - - autocomplete_fields = ['stock_item'] - - @admin.register(StockItemTracking) class StockTrackingAdmin(ImportExportModelAdmin): """Admin class for StockTracking.""" diff --git a/src/backend/InvenTree/stock/api.py b/src/backend/InvenTree/stock/api.py index 4142083006..9fbf257b71 100644 --- a/src/backend/InvenTree/stock/api.py +++ b/src/backend/InvenTree/stock/api.py @@ -1,6 +1,5 @@ """JSON API for the Stock app.""" -import json from collections import OrderedDict from datetime import timedelta @@ -13,7 +12,7 @@ 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 drf_spectacular.utils import extend_schema, extend_schema_field from rest_framework import permissions, status from rest_framework.generics import GenericAPIView from rest_framework.response import Response @@ -28,12 +27,8 @@ from build.serializers import BuildSerializer from company.models import Company, SupplierPart from company.serializers import CompanySerializer from generic.states.api import StatusView -from InvenTree.api import ( - APIDownloadMixin, - AttachmentMixin, - ListCreateDestroyAPIView, - MetadataView, -) +from importer.mixins import DataExportViewMixin +from InvenTree.api import ListCreateDestroyAPIView, MetadataView from InvenTree.filters import ( ORDER_FILTER_ALIAS, SEARCH_ORDER_FILTER, @@ -41,7 +36,6 @@ from InvenTree.filters import ( InvenTreeDateFilter, ) from InvenTree.helpers import ( - DownloadFile, extract_serial_numbers, generateTestKey, is_ajax, @@ -64,11 +58,9 @@ 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, StockItemTestResult, StockItemTracking, StockLocation, @@ -332,6 +324,21 @@ class StockLocationFilter(rest_filters.FilterSet): return queryset + top_level = rest_filters.BooleanFilter( + label=_('Top Level'), + method='filter_top_level', + help_text=_('Filter by top-level locations'), + ) + + def filter_top_level(self, queryset, name, value): + """Filter by top-level locations.""" + cascade = str2bool(self.data.get('cascade', False)) + + if value and not cascade: + return queryset.filter(parent=None) + + return queryset + cascade = rest_filters.BooleanFilter( label=_('Cascade'), method='filter_cascade', @@ -344,9 +351,10 @@ class StockLocationFilter(rest_filters.FilterSet): Note: If the "parent" filter is provided, we offload the logic to that method. """ parent = self.data.get('parent', None) + top_level = str2bool(self.data.get('top_level', None)) # If the parent is *not* provided, update the results based on the "cascade" value - if not parent: + if not parent or top_level: if not value: # If "cascade" is False, only return top-level location queryset = queryset.filter(parent=None) @@ -389,7 +397,7 @@ class StockLocationFilter(rest_filters.FilterSet): return queryset -class StockLocationList(APIDownloadMixin, ListCreateAPI): +class StockLocationList(DataExportViewMixin, ListCreateAPI): """API endpoint for list view of StockLocation objects. - GET: Return list of StockLocation objects @@ -400,14 +408,6 @@ class StockLocationList(APIDownloadMixin, ListCreateAPI): serializer_class = StockSerializers.LocationSerializer filterset_class = StockLocationFilter - def download_queryset(self, queryset, export_format): - """Download the filtered queryset as a data file.""" - dataset = LocationResource().export(queryset=queryset) - filedata = dataset.export(export_format) - filename = f'InvenTree_Locations.{export_format}' - - return DownloadFile(filedata, filename) - def get_queryset(self, *args, **kwargs): """Return annotated queryset for the StockLocationList endpoint.""" queryset = super().get_queryset(*args, **kwargs) @@ -416,7 +416,7 @@ class StockLocationList(APIDownloadMixin, ListCreateAPI): filter_backends = SEARCH_ORDER_FILTER - search_fields = ['name', 'description', 'tags__name', 'tags__slug'] + search_fields = ['name', 'description', 'pathstring', 'tags__name', 'tags__slug'] ordering_fields = ['name', 'pathstring', 'items', 'level', 'tree_id', 'lft'] @@ -860,7 +860,7 @@ class StockFilter(rest_filters.FilterSet): return queryset.exclude(stale_filter) -class StockList(APIDownloadMixin, ListCreateDestroyAPIView): +class StockList(DataExportViewMixin, ListCreateDestroyAPIView): """API endpoint for list view of Stock objects. - GET: Return a list of all StockItem objects (with optional query filters) @@ -1078,19 +1078,6 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): headers=self.get_success_headers(serializer.data), ) - def download_queryset(self, queryset, export_format): - """Download this queryset as a file. - - Uses the APIDownloadMixin mixin class - """ - dataset = StockItemResource().export(queryset=queryset) - - filedata = dataset.export(export_format) - - filename = f'InvenTree_StockItems_{InvenTree.helpers.current_date().strftime("%d-%b-%Y")}.{export_format}' - - return DownloadFile(filedata, filename) - def get_queryset(self, *args, **kwargs): """Annotate queryset before returning.""" queryset = super().get_queryset(*args, **kwargs) @@ -1201,6 +1188,7 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): 'updated', 'stocktake_date', 'expiry_date', + 'packaging', 'quantity', 'stock', 'status', @@ -1221,22 +1209,6 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): ] -class StockAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): - """API endpoint for listing, creating and bulk deleting a StockItemAttachment (file upload).""" - - queryset = StockItemAttachment.objects.all() - serializer_class = StockSerializers.StockItemAttachmentSerializer - - filterset_fields = ['stock_item'] - - -class StockAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): - """Detail endpoint for StockItemAttachment.""" - - queryset = StockItemAttachment.objects.all() - serializer_class = StockSerializers.StockItemAttachmentSerializer - - class StockItemTestResultMixin: """Mixin class for the StockItemTestResult API endpoints.""" @@ -1314,6 +1286,54 @@ class StockItemTestResultFilter(rest_filters.FilterSet): return queryset.filter(template__key=key) +class TestStatisticsFilter(rest_filters.FilterSet): + """API filter for the filtering the test results belonging to a specific build.""" + + class Meta: + """Metaclass options.""" + + model = StockItemTestResult + fields = [] + + # Created date filters + finished_before = InvenTreeDateFilter( + label='Finished before', field_name='finished_datetime', lookup_expr='lte' + ) + finished_after = InvenTreeDateFilter( + label='Finished after', field_name='finished_datetime', lookup_expr='gte' + ) + + +class TestStatistics(GenericAPIView): + """API endpoint for accessing a test statistics broken down by test templates.""" + + queryset = StockItemTestResult.objects.all() + serializer_class = StockSerializers.TestStatisticsSerializer + pagination_class = None + filterset_class = TestStatisticsFilter + filter_backends = SEARCH_ORDER_FILTER_ALIAS + + @extend_schema( + responses={200: StockSerializers.TestStatisticsSerializer(many=False)} + ) + def get(self, request, pk, *args, **kwargs): + """Return test execution count matrix broken down by test result.""" + instance = self.get_object() + serializer = self.get_serializer(instance) + if request.resolver_match.url_name == 'api-test-statistics-by-part': + serializer.context['type'] = 'by-part' + elif request.resolver_match.url_name == 'api-test-statistics-by-build': + serializer.context['type'] = 'by-build' + serializer.context['finished_datetime_after'] = self.request.query_params.get( + 'finished_datetime_after' + ) + serializer.context['finished_datetime_before'] = self.request.query_params.get( + 'finished_datetime_before' + ) + serializer.context['pk'] = pk + return Response([serializer.data]) + + class StockItemTestResultList(StockItemTestResultMixin, ListCreateDestroyAPIView): """API endpoint for listing (and creating) a StockItemTestResult object.""" @@ -1376,7 +1396,7 @@ class StockTrackingDetail(RetrieveAPI): serializer_class = StockSerializers.StockTrackingSerializer -class StockTrackingList(ListAPI): +class StockTrackingList(DataExportViewMixin, ListAPI): """API endpoint for list view of StockItemTracking objects. StockItemTracking objects are read-only @@ -1444,7 +1464,7 @@ class StockTrackingList(ListAPI): # Run a first pass through the data to determine which related models we need to lookup for item in data: - deltas = item['deltas'] + deltas = item['deltas'] or {} for key in delta_models.keys(): if key in deltas: @@ -1461,7 +1481,7 @@ class StockTrackingList(ListAPI): # Now, update the data with the serialized data for item in data: - deltas = item['deltas'] + deltas = item['deltas'] or {} if key in deltas: item['deltas'][f'{key}_detail'] = related_data.get( @@ -1609,18 +1629,6 @@ stock_api_urls = [ path('assign/', StockAssign.as_view(), name='api-stock-assign'), path('merge/', StockMerge.as_view(), name='api-stock-merge'), path('change_status/', StockChangeStatus.as_view(), name='api-stock-change-status'), - # StockItemAttachment API endpoints - path( - 'attachment/', - include([ - path( - '/', - StockAttachmentDetail.as_view(), - name='api-stock-attachment-detail', - ), - path('', StockAttachmentList.as_view(), name='api-stock-attachment-list'), - ]), - ), # StockItemTestResult API endpoints path( 'test/', @@ -1701,3 +1709,27 @@ stock_api_urls = [ # Anything else path('', StockList.as_view(), name='api-stock-list'), ] + +test_statistics_api_urls = [ + # Test statistics endpoints + path( + 'by-part/', + include([ + path( + '/', + TestStatistics.as_view(), + name='api-test-statistics-by-part', + ) + ]), + ), + path( + 'by-build/', + include([ + path( + '/', + TestStatistics.as_view(), + name='api-test-statistics-by-build', + ) + ]), + ), +] diff --git a/src/backend/InvenTree/stock/filters.py b/src/backend/InvenTree/stock/filters.py index 4257bd49b9..ac3098a632 100644 --- a/src/backend/InvenTree/stock/filters.py +++ b/src/backend/InvenTree/stock/filters.py @@ -3,8 +3,6 @@ from django.db.models import F, Func, IntegerField, OuterRef, Q, Subquery from django.db.models.functions import Coalesce -from sql_util.utils import SubqueryCount - import stock.models diff --git a/src/backend/InvenTree/stock/generators.py b/src/backend/InvenTree/stock/generators.py index f08ec0ab05..37accce6e7 100644 --- a/src/backend/InvenTree/stock/generators.py +++ b/src/backend/InvenTree/stock/generators.py @@ -76,8 +76,6 @@ def generate_batch_code(**kwargs): 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: diff --git a/src/backend/InvenTree/stock/migrations/0001_initial.py b/src/backend/InvenTree/stock/migrations/0001_initial.py index 040a48efeb..ac8b7b7a48 100644 --- a/src/backend/InvenTree/stock/migrations/0001_initial.py +++ b/src/backend/InvenTree/stock/migrations/0001_initial.py @@ -64,6 +64,9 @@ class Migration(migrations.Migration): ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tracking_info', to='stock.StockItem')), ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), ], + options={ + 'verbose_name': 'Stock Item Tracking', + } ), migrations.AddField( model_name='stockitem', diff --git a/src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py b/src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py index 946f6251b0..1ffc87b1e2 100644 --- a/src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py +++ b/src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py @@ -16,7 +16,7 @@ class Migration(migrations.Migration): name='StockItemAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment)), + ('attachment', models.FileField(help_text='Select file to attach', upload_to='attachments')), ('comment', models.CharField(help_text='File comment', max_length=100)), ('stock_item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='stock.StockItem')), ], diff --git a/src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py b/src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py index fdf0344925..6629d6634d 100644 --- a/src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py +++ b/src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py @@ -25,5 +25,8 @@ class Migration(migrations.Migration): ('stock_item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='test_results', to='stock.StockItem')), ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), ], + options={ + 'verbose_name': 'Stock Item Test Result', + }, ), ] diff --git a/src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py b/src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py index b027a53854..3305b719e5 100644 --- a/src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py +++ b/src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py @@ -32,7 +32,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitemattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), ), migrations.AlterField( model_name='stockitemattachment', diff --git a/src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py b/src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py index a2f6ef322d..3c23c28f65 100644 --- a/src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py +++ b/src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py @@ -20,6 +20,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitemattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0111_delete_stockitemattachment.py b/src/backend/InvenTree/stock/migrations/0111_delete_stockitemattachment.py new file mode 100644 index 0000000000..1526a63799 --- /dev/null +++ b/src/backend/InvenTree/stock/migrations/0111_delete_stockitemattachment.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.12 on 2024-06-09 09:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0050_auto_20240508_0138'), + ('common', '0026_auto_20240608_1238'), + ('company', '0069_company_active'), + ('order', '0099_alter_salesorder_status'), + ('part', '0123_parttesttemplate_choices'), + ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') + ] + + operations = [ + migrations.DeleteModel( + name='StockItemAttachment', + ), + ] diff --git a/src/backend/InvenTree/stock/migrations/0112_alter_stocklocation_custom_icon_and_more.py b/src/backend/InvenTree/stock/migrations/0112_alter_stocklocation_custom_icon_and_more.py new file mode 100644 index 0000000000..21b48b91da --- /dev/null +++ b/src/backend/InvenTree/stock/migrations/0112_alter_stocklocation_custom_icon_and_more.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.11 on 2024-07-20 22:30 + +import common.icons +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0111_delete_stockitemattachment'), + ] + + operations = [ + migrations.AlterField( + model_name='stocklocation', + name='custom_icon', + field=models.CharField(blank=True, db_column='icon', help_text='Icon (optional)', max_length=100, validators=[common.icons.validate_icon], verbose_name='Icon'), + ), + migrations.AlterField( + model_name='stocklocationtype', + name='icon', + field=models.CharField(blank=True, help_text='Default icon for all locations that have no icon set (optional)', max_length=100, validators=[common.icons.validate_icon], verbose_name='Icon'), + ), + ] diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index 192b8fa62f..de8be1ce79 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -9,7 +9,7 @@ from decimal import Decimal, InvalidOperation from django.conf import settings from django.contrib.auth.models import User -from django.core.exceptions import FieldError, ValidationError +from django.core.exceptions import ValidationError from django.core.validators import MinValueValidator from django.db import models, transaction from django.db.models import Q, Sum @@ -20,6 +20,7 @@ from django.dispatch import receiver from django.urls import reverse from django.utils.translation import gettext_lazy as _ +from djmoney.contrib.exchange.models import convert_money from mptt.managers import TreeManager from mptt.models import MPTTModel, TreeForeignKey from taggit.managers import TaggableManager @@ -32,12 +33,15 @@ import InvenTree.ready import InvenTree.tasks import report.mixins import report.models +from build import models as BuildModels +from common.icons import validate_icon from common.settings import get_global_setting from company import models as CompanyModels from InvenTree.fields import InvenTreeModelMoneyField, InvenTreeURLField from order.status_codes import SalesOrderStatusGroups from part import models as PartModels from plugin.events import trigger_event +from stock import models as StockModels from stock.generators import generate_batch_code from stock.status_codes import StockHistoryCode, StockStatus, StockStatusGroups from users.models import Owner @@ -85,6 +89,7 @@ class StockLocationType(InvenTree.models.MetadataMixin, models.Model): max_length=100, verbose_name=_('Icon'), help_text=_('Default icon for all locations that have no icon set (optional)'), + validators=[validate_icon], ) @@ -116,6 +121,8 @@ class StockLocation( ITEM_PARENT_KEY = 'location' + EXTRA_PATH_FIELDS = ['icon'] + objects = StockLocationManager() class Meta: @@ -141,11 +148,16 @@ class StockLocation( """Return API url.""" return reverse('api-location-list') + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'SL' + def report_context(self): """Return report context data for this StockLocation.""" return { 'location': self, - 'qr_data': self.format_barcode(brief=True), + 'qr_data': self.barcode, 'parent': self.parent, 'stock_location': self, 'stock_items': self.get_stock_items(), @@ -157,6 +169,7 @@ class StockLocation( verbose_name=_('Icon'), help_text=_('Icon (optional)'), db_column='icon', + validators=[validate_icon], ) owner = models.ForeignKey( @@ -206,6 +219,11 @@ class StockLocation( if self.location_type: return self.location_type.icon + if default_icon := get_global_setting( + 'STOCK_LOCATION_DEFAULT_ICON', cache=True + ): + return default_icon + return '' @icon.setter @@ -316,6 +334,7 @@ def default_delete_on_deplete(): class StockItem( + InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, report.mixins.InvenTreeReportMixin, @@ -365,6 +384,11 @@ class StockItem( """Custom API instance filters.""" return {'parent': {'exclude_tree': self.pk}} + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'SI' + def get_test_keys(self, include_installed=True): """Construct a flattened list of test 'keys' for this StockItem.""" keys = [] @@ -395,7 +419,7 @@ class StockItem( 'item': self, 'name': self.part.full_name, 'part': self.part, - 'qr_data': self.format_barcode(brief=True), + 'qr_data': self.barcode, 'qr_url': self.get_absolute_url(), 'parameters': self.part.parameters_map(), 'quantity': InvenTree.helpers.normalize(self.quantity), @@ -712,8 +736,6 @@ class StockItem( self.delete_on_deplete = False except PartModels.Part.DoesNotExist: - # This gets thrown if self.supplier_part is null - # TODO - Find a test than can be performed... pass # Ensure that the item cannot be assigned to itself @@ -1107,7 +1129,11 @@ class StockItem( item.add_tracking_entry(code, user, deltas, notes=notes) - trigger_event('stockitem.assignedtocustomer', id=self.id, customer=customer.id) + trigger_event( + 'stockitem.assignedtocustomer', + id=self.id, + customer=customer.id if customer else None, + ) # Return the reference to the stock item return item @@ -1705,6 +1731,12 @@ class StockItem( parent_id = self.parent.pk if self.parent else None + # Keep track of pricing data for the merged data + pricing_data = [] + + if self.purchase_price: + pricing_data.append([self.purchase_price, self.quantity]) + for other in other_items: # If the stock item cannot be merged, return if not self.can_merge(other, raise_error=raise_error, **kwargs): @@ -1713,11 +1745,15 @@ class StockItem( ) return + for other in other_items: tree_ids.add(other.tree_id) - for other in other_items: self.quantity += other.quantity + if other.purchase_price: + # Only add pricing data if it is available + pricing_data.append([other.purchase_price, other.quantity]) + # Any "build order allocations" for the other item must be assigned to this one for allocation in other.allocations.all(): allocation.stock_item = self @@ -1743,7 +1779,31 @@ class StockItem( deltas={'location': location.pk if location else None}, ) + # Update the location of the item self.location = location + + # Update the unit price - calculate weighted average of available pricing data + if len(pricing_data) > 0: + unit_price, quantity = pricing_data[0] + + # Use the first currency as the base currency + base_currency = unit_price.currency + + total_price = unit_price * quantity + + for price, qty in pricing_data[1:]: + # Attempt to convert the price to the base currency + try: + price = convert_money(price, base_currency) + total_price += price * qty + quantity += qty + except Exception: + # Skip this entry, cannot convert to base currency + continue + + if quantity > 0: + self.purchase_price = total_price / quantity + self.save() # Rebuild stock trees as required @@ -2255,23 +2315,6 @@ def after_save_stock_item(sender, instance: StockItem, created, **kwargs): instance.part.schedule_pricing_update(create=True) -class StockItemAttachment(InvenTree.models.InvenTreeAttachment): - """Model for storing file attachments against a StockItem object.""" - - @staticmethod - def get_api_url(): - """Return API url.""" - return reverse('api-stock-attachment-list') - - def getSubdir(self): - """Override attachment location.""" - return os.path.join('stock_files', str(self.stock_item.id)) - - stock_item = models.ForeignKey( - StockItem, on_delete=models.CASCADE, related_name='attachments' - ) - - class StockItemTracking(InvenTree.models.InvenTreeModel): """Stock tracking entry - used for tracking history of a particular StockItem. @@ -2292,6 +2335,11 @@ class StockItemTracking(InvenTree.models.InvenTreeModel): deltas: The changes associated with this history item """ + class Meta: + """Meta data for the StockItemTracking class.""" + + verbose_name = _('Stock Item Tracking') + @staticmethod def get_api_url(): """Return API url.""" @@ -2360,6 +2408,11 @@ class StockItemTestResult(InvenTree.models.InvenTreeMetadataModel): date: Date the test result was recorded """ + class Meta: + """Meta data for the StockItemTestResult class.""" + + verbose_name = _('Stock Item Test Result') + def __str__(self): """Return string representation.""" return f'{self.test_name} - {self.result}' @@ -2408,6 +2461,67 @@ class StockItemTestResult(InvenTree.models.InvenTreeMetadataModel): """Return key for test.""" return InvenTree.helpers.generateTestKey(self.test_name) + def calculate_test_statistics_for_test_template( + self, query_base, test_template, ret, start, end + ): + """Helper function to calculate the passed/failed/total tests count per test template type.""" + query = query_base & Q(template=test_template.pk) + if start is not None and end is not None: + query = query & Q(started_datetime__range=(start, end)) + elif start is not None and end is None: + query = query & Q(started_datetime__gt=start) + elif start is None and end is not None: + query = query & Q(started_datetime__lt=end) + + passed = StockModels.StockItemTestResult.objects.filter( + query & Q(result=True) + ).count() + failed = StockModels.StockItemTestResult.objects.filter( + query & ~Q(result=True) + ).count() + if test_template.test_name not in ret: + ret[test_template.test_name] = {'passed': 0, 'failed': 0, 'total': 0} + ret[test_template.test_name]['passed'] += passed + ret[test_template.test_name]['failed'] += failed + ret[test_template.test_name]['total'] += passed + failed + ret['total']['passed'] += passed + ret['total']['failed'] += failed + ret['total']['total'] += passed + failed + return ret + + def build_test_statistics(self, build_order_pk, start, end): + """Generate a statistics matrix for each test template based on the test executions result counts.""" + build = BuildModels.Build.objects.get(pk=build_order_pk) + if not build or not build.part.trackable: + return {} + + test_templates = build.part.getTestTemplates() + ret = {'total': {'passed': 0, 'failed': 0, 'total': 0}} + for build_item in build.get_build_outputs(): + for test_template in test_templates: + query_base = Q(stock_item=build_item) + ret = self.calculate_test_statistics_for_test_template( + query_base, test_template, ret, start, end + ) + return ret + + def part_test_statistics(self, part_pk, start, end): + """Generate a statistics matrix for each test template based on the test executions result counts.""" + part = PartModels.Part.objects.get(pk=part_pk) + + if not part or not part.trackable: + return {} + + test_templates = part.getTestTemplates() + ret = {'total': {'passed': 0, 'failed': 0, 'total': 0}} + for bo in part.stock_entries(): + for test_template in test_templates: + query_base = Q(stock_item=bo) + ret = self.calculate_test_statistics_for_test_template( + query_base, test_template, ret, start, end + ) + return ret + stock_item = models.ForeignKey( StockItem, on_delete=models.CASCADE, related_name='test_results' ) diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index 2e0c2d2531..8f83b59751 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -17,21 +17,22 @@ from taggit.serializers import TagListSerializerField import build.models import company.models +import company.serializers as company_serializers import InvenTree.helpers import InvenTree.serializers import order.models import part.filters as part_filters import part.models as part_models +import part.serializers as part_serializers import stock.filters import stock.status_codes from common.settings import get_global_setting -from company.serializers import SupplierPartSerializer +from importer.mixins import DataImportExportSerializerMixin +from importer.registry import register_importer from InvenTree.serializers import InvenTreeCurrencySerializer, InvenTreeDecimalField -from part.serializers import PartBriefSerializer, PartTestTemplateSerializer from .models import ( StockItem, - StockItemAttachment, StockItemTestResult, StockItemTracking, StockLocation, @@ -178,7 +179,10 @@ class LocationBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): fields = ['pk', 'name', 'pathstring'] -class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializer): +@register_importer() +class StockItemTestResultSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +): """Serializer for the StockItemTestResult model.""" class Meta: @@ -213,10 +217,10 @@ class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializ super().__init__(*args, **kwargs) if user_detail is not True: - self.fields.pop('user_detail') + self.fields.pop('user_detail', None) if template_detail is not True: - self.fields.pop('template_detail') + self.fields.pop('template_detail', None) user_detail = InvenTree.serializers.UserSerializer(source='user', read_only=True) @@ -229,7 +233,9 @@ class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializ label=_('Test template for this result'), ) - template_detail = PartTestTemplateSerializer(source='template', read_only=True) + template_detail = part_serializers.PartTestTemplateSerializer( + source='template', read_only=True + ) attachment = InvenTree.serializers.InvenTreeAttachmentSerializerField( required=False @@ -300,6 +306,7 @@ class StockItemSerializerBrief( 'location', 'quantity', 'serial', + 'batch', 'supplier_part', 'barcode_hash', ] @@ -317,13 +324,22 @@ class StockItemSerializerBrief( return value -class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): +@register_importer() +class StockItemSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeTagModelSerializer +): """Serializer for a StockItem. - Includes serialization for the linked part - Includes serialization for the item location """ + export_exclude_fields = ['tracking_items'] + + export_only_fields = ['part_pricing_min', 'part_pricing_max'] + + import_exclude_fields = ['use_pack_size', 'tags'] + class Meta: """Metaclass options.""" @@ -339,11 +355,13 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): 'is_building', 'link', 'location', + 'location_name', 'location_detail', 'location_path', 'notes', 'owner', 'packaging', + 'parent', 'part', 'part_detail', 'purchase_order', @@ -357,6 +375,7 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): 'status_text', 'stocktake_date', 'supplier_part', + 'sku', 'supplier_part_detail', 'barcode_hash', 'updated', @@ -372,6 +391,9 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): 'stale', 'tracking_items', 'tags', + # Export only fields + 'part_pricing_min', + 'part_pricing_max', ] """ @@ -402,19 +424,19 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): super(StockItemSerializer, self).__init__(*args, **kwargs) if not part_detail: - self.fields.pop('part_detail') + self.fields.pop('part_detail', None) if not location_detail: - self.fields.pop('location_detail') + self.fields.pop('location_detail', None) if not supplier_part_detail: - self.fields.pop('supplier_part_detail') + self.fields.pop('supplier_part_detail', None) if not tests: - self.fields.pop('tests') + self.fields.pop('tests', None) if not path_detail: - self.fields.pop('location_path') + self.fields.pop('location_path', None) part = serializers.PrimaryKeyRelatedField( queryset=part_models.Part.objects.all(), @@ -424,6 +446,17 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): label=_('Part'), ) + parent = serializers.PrimaryKeyRelatedField( + many=False, + read_only=True, + label=_('Parent Item'), + help_text=_('Parent stock item'), + ) + + location_name = serializers.CharField( + source='location.name', read_only=True, label=_('Location Name') + ) + location_path = serializers.ListField( child=serializers.DictField(), source='location.get_path', read_only=True ) @@ -469,10 +502,14 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): ) ).prefetch_related(None), ), + 'parent', 'part__category', 'part__pricing_data', 'supplier_part', + 'supplier_part__part', + 'supplier_part__supplier', 'supplier_part__manufacturer_part', + 'supplier_part__manufacturer_part__manufacturer', 'supplier_part__tags', 'test_results', 'tags', @@ -526,8 +563,10 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): status_text = serializers.CharField(source='get_status_display', read_only=True) + sku = serializers.CharField(source='supplier_part.SKU', read_only=True) + # Optional detail fields, which can be appended via query parameters - supplier_part_detail = SupplierPartSerializer( + supplier_part_detail = company_serializers.SupplierPartSerializer( source='supplier_part', supplier_detail=False, manufacturer_detail=False, @@ -535,10 +574,14 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): many=False, read_only=True, ) - part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + part_detail = part_serializers.PartBriefSerializer( + source='part', many=False, read_only=True + ) + location_detail = LocationBriefSerializer( source='location', many=False, read_only=True ) + tests = StockItemTestResultSerializer( source='test_results', many=True, read_only=True ) @@ -546,12 +589,22 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): quantity = InvenTreeDecimalField() # Annotated fields - allocated = serializers.FloatField(required=False) - expired = serializers.BooleanField(required=False, read_only=True) - installed_items = serializers.IntegerField(read_only=True, required=False) - child_items = serializers.IntegerField(read_only=True, required=False) - stale = serializers.BooleanField(required=False, read_only=True) - tracking_items = serializers.IntegerField(read_only=True, required=False) + allocated = serializers.FloatField( + required=False, read_only=True, label=_('Allocated Quantity') + ) + expired = serializers.BooleanField( + required=False, read_only=True, label=_('Expired') + ) + installed_items = serializers.IntegerField( + read_only=True, required=False, label=_('Installed Items') + ) + child_items = serializers.IntegerField( + read_only=True, required=False, label=_('Child Items') + ) + stale = serializers.BooleanField(required=False, read_only=True, label=_('Stale')) + tracking_items = serializers.IntegerField( + read_only=True, required=False, label=_('Tracking Items') + ) purchase_price = InvenTree.serializers.InvenTreeMoneySerializer( label=_('Purchase Price'), @@ -572,6 +625,18 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): tags = TagListSerializerField(required=False) + part_pricing_min = InvenTree.serializers.InvenTreeMoneySerializer( + source='part.pricing_data.overall_min', + read_only=True, + label=_('Minimum Pricing'), + ) + + part_pricing_max = InvenTree.serializers.InvenTreeMoneySerializer( + source='part.pricing_data.overall_max', + read_only=True, + label=_('Maximum Pricing'), + ) + class SerializeStockItemSerializer(serializers.Serializer): """A DRF serializer for "serializing" a StockItem. @@ -808,6 +873,36 @@ class UninstallStockItemSerializer(serializers.Serializer): item.uninstall_into_location(location, request.user, note) +class TestStatisticsLineField(serializers.DictField): + """DRF field definition for one column of the test statistics.""" + + test_name = serializers.CharField() + results = serializers.DictField(child=serializers.IntegerField(min_value=0)) + + +class TestStatisticsSerializer(serializers.Serializer): + """DRF serializer class for the test statistics.""" + + results = serializers.ListField(child=TestStatisticsLineField(), read_only=True) + + def to_representation(self, obj): + """Just pass through the test statistics from the model.""" + if self.context['type'] == 'by-part': + return obj.part_test_statistics( + self.context['pk'], + self.context['finished_datetime_after'], + self.context['finished_datetime_before'], + ) + elif self.context['type'] == 'by-build': + return obj.build_test_statistics( + self.context['pk'], + self.context['finished_datetime_after'], + self.context['finished_datetime_before'], + ) + + raise ValidationError(_('Unsupported statistic type: ' + self.context['type'])) + + class ConvertStockItemSerializer(serializers.Serializer): """DRF serializer class for converting a StockItem to a valid variant part.""" @@ -1027,9 +1122,14 @@ class LocationTreeSerializer(InvenTree.serializers.InvenTreeModelSerializer): return queryset.annotate(sublocations=stock.filters.annotate_sub_locations()) -class LocationSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): +@register_importer() +class LocationSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeTagModelSerializer +): """Detailed information about a stock location.""" + import_exclude_fields = ['tags'] + class Meta: """Metaclass options.""" @@ -1056,7 +1156,7 @@ class LocationSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): 'tags', ] - read_only_fields = ['barcode_hash', 'icon'] + read_only_fields = ['barcode_hash', 'icon', 'level', 'pathstring'] def __init__(self, *args, **kwargs): """Optionally add or remove extra fields.""" @@ -1065,7 +1165,7 @@ class LocationSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): super().__init__(*args, **kwargs) if not path_detail: - self.fields.pop('path') + self.fields.pop('path', None) @staticmethod def annotate_queryset(queryset): @@ -1078,6 +1178,15 @@ class LocationSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): return queryset + parent = serializers.PrimaryKeyRelatedField( + queryset=StockLocation.objects.all(), + many=False, + allow_null=True, + required=False, + label=_('Parent Location'), + help_text=_('Parent stock location'), + ) + url = serializers.CharField(source='get_absolute_url', read_only=True) items = serializers.IntegerField(read_only=True, label=_('Stock Items')) @@ -1101,22 +1210,10 @@ class LocationSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): ) -class StockItemAttachmentSerializer( - InvenTree.serializers.InvenTreeAttachmentSerializer +@register_importer() +class StockTrackingSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer ): - """Serializer for StockItemAttachment model.""" - - class Meta: - """Metaclass options.""" - - model = StockItemAttachment - - fields = InvenTree.serializers.InvenTreeAttachmentSerializer.attachment_fields([ - 'stock_item' - ]) - - -class StockTrackingSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for StockItemTracking model.""" class Meta: @@ -1146,10 +1243,10 @@ class StockTrackingSerializer(InvenTree.serializers.InvenTreeModelSerializer): super().__init__(*args, **kwargs) if item_detail is not True: - self.fields.pop('item_detail') + self.fields.pop('item_detail', None) if user_detail is not True: - self.fields.pop('user_detail') + self.fields.pop('user_detail', None) label = serializers.CharField(read_only=True) @@ -1455,7 +1552,7 @@ class StockAdjustmentItemSerializer(serializers.Serializer): ) quantity = serializers.DecimalField( - max_digits=15, decimal_places=5, min_value=0, required=True + max_digits=15, decimal_places=5, min_value=Decimal(0), required=True ) batch = serializers.CharField( diff --git a/src/backend/InvenTree/stock/templates/stock/item.html b/src/backend/InvenTree/stock/templates/stock/item.html index 214a409bcd..f85c5694e9 100644 --- a/src/backend/InvenTree/stock/templates/stock/item.html +++ b/src/backend/InvenTree/stock/templates/stock/item.html @@ -220,17 +220,7 @@ }); onPanelLoad('attachments', function() { - loadAttachmentTable('{% url "api-stock-attachment-list" %}', { - filters: { - stock_item: {{ item.pk }}, - }, - fields: { - stock_item: { - value: {{ item.pk }}, - hidden: true, - } - } - }); + loadAttachmentTable('stockitem', {{ item.pk }}); }); {% settings_value "TEST_STATION_DATA" as test_station_fields %} diff --git a/src/backend/InvenTree/stock/templates/stock/item_base.html b/src/backend/InvenTree/stock/templates/stock/item_base.html index 05107cac28..fac0adf14d 100644 --- a/src/backend/InvenTree/stock/templates/stock/item_base.html +++ b/src/backend/InvenTree/stock/templates/stock/item_base.html @@ -534,7 +534,7 @@ $('#stock-edit-status').click(function () { $("#show-qr-code").click(function() { showQRDialog( '{% trans "Stock Item QR Code" escape %}', - '{"stockitem": {{ item.pk }} }', + '{{ item.barcode }}', ); }); @@ -646,7 +646,6 @@ $("#stock-return-from-customer").click(function() { {% endif %} tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, notes: { diff --git a/src/backend/InvenTree/stock/templates/stock/location.html b/src/backend/InvenTree/stock/templates/stock/location.html index edd44c70f5..a2e34576ee 100644 --- a/src/backend/InvenTree/stock/templates/stock/location.html +++ b/src/backend/InvenTree/stock/templates/stock/location.html @@ -15,10 +15,7 @@ {% block heading %} {% if location %} {% trans "Stock Location" %}: -{% settings_value "STOCK_LOCATION_DEFAULT_ICON" as default_icon %} -{% if location.icon or default_icon %} - -{% endif %} + {{ location.name }} {% else %} {% trans "Stock" %} @@ -244,6 +241,10 @@ {% block js_ready %} {{ block.super }} + loadApiIconPacks().then(() => { + $('#location-icon').addClass(getApiIconClass('{{ location.icon }}')); + }); + {% settings_value "STOCKTAKE_ENABLE" as stocktake_enable %} {% if stocktake_enable and roles.stocktake.add %} $('#location-stocktake').click(function() { @@ -251,14 +252,12 @@ category: { tree_picker: { url: '{% url "api-part-category-tree" %}', - default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, location: { {% if location %}value: {{ location.pk }},{% endif %} tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, generate_report: {}, @@ -280,6 +279,8 @@ params: { {% if location %} parent: {{ location.pk }}, + {% else %} + top_level: true, {% endif %} }, allowTreeView: true, @@ -390,7 +391,7 @@ $('#show-qr-code').click(function() { showQRDialog( '{% trans "Stock Location QR Code" escape %}', - '{"stocklocation": {{ location.pk }} }' + '{{ location.barcode }}' ); }); @@ -453,7 +454,6 @@ return node; }, - defaultIcon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }); {% endblock js_ready %} diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index a0cf28c3bf..61a8a43ba7 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -472,13 +472,13 @@ class StockLocationTypeTest(StockAPITestCase): """Test that the list endpoint works as expected.""" location_types = [ StockLocationType.objects.create( - name='Type 1', description='Type 1 desc', icon='fas fa-box' + name='Type 1', description='Type 1 desc', icon='ti:package:outline' ), StockLocationType.objects.create( - name='Type 2', description='Type 2 desc', icon='fas fa-box' + name='Type 2', description='Type 2 desc', icon='ti:package:outline' ), StockLocationType.objects.create( - name='Type 3', description='Type 3 desc', icon='fas fa-box' + name='Type 3', description='Type 3 desc', icon='ti:package:outline' ), ] @@ -493,7 +493,7 @@ class StockLocationTypeTest(StockAPITestCase): def test_delete(self): """Test that we can delete a location type via API.""" location_type = StockLocationType.objects.create( - name='Type 1', description='Type 1 desc', icon='fas fa-box' + name='Type 1', description='Type 1 desc', icon='ti:package:outline' ) self.delete( reverse('api-location-type-detail', kwargs={'pk': location_type.pk}), @@ -506,8 +506,19 @@ class StockLocationTypeTest(StockAPITestCase): self.post( self.list_url, {'name': 'Test Type 1', 'description': 'Test desc 1', 'icon': 'fas fa-box'}, + expected_code=400, + ) + + self.post( + self.list_url, + { + 'name': 'Test Type 1', + 'description': 'Test desc 1', + 'icon': 'ti:package:outline', + }, expected_code=201, ) + self.assertIsNotNone( StockLocationType.objects.filter(name='Test Type 1').first() ) @@ -515,14 +526,20 @@ class StockLocationTypeTest(StockAPITestCase): def test_update(self): """Test that we can update a location type via API.""" location_type = StockLocationType.objects.create( - name='Type 1', description='Type 1 desc', icon='fas fa-box' + name='Type 1', description='Type 1 desc', icon='ti:package:outline' ) - res = self.patch( + self.patch( reverse('api-location-type-detail', kwargs={'pk': location_type.pk}), {'icon': 'fas fa-shapes'}, + expected_code=400, + ) + + res = self.patch( + reverse('api-location-type-detail', kwargs={'pk': location_type.pk}), + {'icon': 'ti:tag:outline'}, expected_code=200, ).json() - self.assertEqual(res['icon'], 'fas fa-shapes') + self.assertEqual(res['icon'], 'ti:tag:outline') class StockItemListTest(StockAPITestCase): @@ -765,11 +782,11 @@ class StockItemListTest(StockAPITestCase): # Expected headers headers = [ - 'Part ID', - 'Customer ID', - 'Location ID', + 'Part', + 'Customer', + 'Stock Location', 'Location Name', - 'Parent ID', + 'Parent Item', 'Quantity', 'Status', ] @@ -885,13 +902,6 @@ class StockItemListTest(StockAPITestCase): def test_query_count(self): """Test that the number of queries required to fetch stock items is reasonable.""" - - def get_stock(data, expected_status=200): - """Helper function to fetch stock items.""" - response = self.client.get(self.list_url, data=data) - self.assertEqual(response.status_code, expected_status) - return response.data - # Create a bunch of StockItem objects prt = Part.objects.first() @@ -901,20 +911,18 @@ class StockItemListTest(StockAPITestCase): ]) # List *all* stock items - with self.assertNumQueriesLessThan(25): - get_stock({}) + self.get(self.list_url, {}, max_query_count=35) # List all stock items, with part detail - with self.assertNumQueriesLessThan(20): - get_stock({'part_detail': True}) + self.get(self.list_url, {'part_detail': True}, max_query_count=35) # List all stock items, with supplier_part detail - with self.assertNumQueriesLessThan(20): - get_stock({'supplier_part_detail': True}) + self.get(self.list_url, {'supplier_part_detail': True}, max_query_count=35) # List all stock items, with 'location' and 'tests' detail - with self.assertNumQueriesLessThan(20): - get_stock({'location_detail': True, 'tests': True}) + self.get( + self.list_url, {'location_detail': True, 'tests': True}, max_query_count=35 + ) class StockItemTest(StockAPITestCase): diff --git a/src/backend/InvenTree/stock/tests.py b/src/backend/InvenTree/stock/tests.py index fe7a2b0e9d..dcbf2cf3d3 100644 --- a/src/backend/InvenTree/stock/tests.py +++ b/src/backend/InvenTree/stock/tests.py @@ -15,7 +15,13 @@ from order.models import SalesOrder from part.models import Part, PartTestTemplate from stock.status_codes import StockHistoryCode -from .models import StockItem, StockItemTestResult, StockItemTracking, StockLocation +from .models import ( + StockItem, + StockItemTestResult, + StockItemTracking, + StockLocation, + StockLocationType, +) class StockTestBase(InvenTreeTestCase): @@ -755,23 +761,14 @@ class StockTest(StockTestBase): # First, we will create a stock location structure A = StockLocation.objects.create(name='A', description='Top level location') - B1 = StockLocation.objects.create(name='B1', parent=A) - B2 = StockLocation.objects.create(name='B2', parent=A) - B3 = StockLocation.objects.create(name='B3', parent=A) - C11 = StockLocation.objects.create(name='C11', parent=B1) - C12 = StockLocation.objects.create(name='C12', parent=B1) - C21 = StockLocation.objects.create(name='C21', parent=B2) - C22 = StockLocation.objects.create(name='C22', parent=B2) - C31 = StockLocation.objects.create(name='C31', parent=B3) - C32 = StockLocation.objects.create(name='C32', parent=B3) # Check that the tree_id is correct for each sublocation @@ -895,6 +892,62 @@ class StockTest(StockTestBase): self.assertEqual(len(p.metadata.keys()), 4) + def test_merge(self): + """Test merging of multiple stock items.""" + from djmoney.money import Money + + part = Part.objects.first() + part.stock_items.all().delete() + + # Test simple merge without any pricing information + s1 = StockItem.objects.create(part=part, quantity=10) + s2 = StockItem.objects.create(part=part, quantity=20) + s3 = StockItem.objects.create(part=part, quantity=30) + + self.assertEqual(part.stock_items.count(), 3) + s1.merge_stock_items([s2, s3]) + self.assertEqual(part.stock_items.count(), 1) + s1.refresh_from_db() + self.assertEqual(s1.quantity, 60) + self.assertIsNone(s1.purchase_price) + + part.stock_items.all().delete() + + # Create some stock items with pricing information + s1 = StockItem.objects.create(part=part, quantity=10, purchase_price=None) + s2 = StockItem.objects.create( + part=part, quantity=15, purchase_price=Money(10, 'USD') + ) + s3 = StockItem.objects.create(part=part, quantity=30) + + self.assertEqual(part.stock_items.count(), 3) + s1.merge_stock_items([s2, s3]) + self.assertEqual(part.stock_items.count(), 1) + s1.refresh_from_db() + self.assertEqual(s1.quantity, 55) + self.assertEqual(s1.purchase_price, Money(10, 'USD')) + + part.stock_items.all().delete() + + s1 = StockItem.objects.create( + part=part, quantity=10, purchase_price=Money(5, 'USD') + ) + s2 = StockItem.objects.create( + part=part, quantity=25, purchase_price=Money(10, 'USD') + ) + s3 = StockItem.objects.create( + part=part, quantity=5, purchase_price=Money(75, 'USD') + ) + + self.assertEqual(part.stock_items.count(), 3) + s1.merge_stock_items([s2, s3]) + self.assertEqual(part.stock_items.count(), 1) + s1.refresh_from_db() + self.assertEqual(s1.quantity, 40) + + # Final purchase price should be the weighted average + self.assertAlmostEqual(s1.purchase_price.amount, 16.875, places=3) + class StockBarcodeTest(StockTestBase): """Run barcode tests for the stock app.""" @@ -905,12 +958,6 @@ class StockBarcodeTest(StockTestBase): self.assertEqual(StockItem.barcode_model_type(), 'stockitem') - # Call format_barcode method - barcode = item.format_barcode(brief=False) - - for key in ['tool', 'version', 'instance', 'stockitem']: - self.assertIn(key, barcode) - # Render simple barcode data for the StockItem barcode = item.barcode self.assertEqual(barcode, '{"stockitem": 1}') @@ -921,7 +968,7 @@ class StockBarcodeTest(StockTestBase): loc = StockLocation.objects.get(pk=1) - barcode = loc.format_barcode(brief=True) + barcode = loc.format_barcode() self.assertEqual('{"stocklocation": 1}', barcode) @@ -1264,3 +1311,39 @@ class TestResultTest(StockTestBase): tests = item.testResultMap(include_installed=False) self.assertEqual(len(tests), 3) self.assertNotIn('somenewtest', tests) + + +class StockLocationTest(InvenTreeTestCase): + """Tests for the StockLocation model.""" + + def test_icon(self): + """Test stock location icon.""" + # No default icon set + loc = StockLocation.objects.create(name='Test Location') + loc_type = StockLocationType.objects.create( + name='Test Type', icon='ti:cube-send:outline' + ) + self.assertEqual(loc.icon, '') + + # Set a default icon + InvenTreeSetting.set_setting( + 'STOCK_LOCATION_DEFAULT_ICON', 'ti:package:outline' + ) + self.assertEqual(loc.icon, 'ti:package:outline') + + # Assign location type and check that it takes precedence over default icon + loc.location_type = loc_type + loc.save() + self.assertEqual(loc.icon, 'ti:cube-send:outline') + + # Set a custom icon and assert that it takes precedence over all other icons + loc.icon = 'ti:tag:outline' + loc.save() + self.assertEqual(loc.icon, 'ti:tag:outline') + InvenTreeSetting.set_setting('STOCK_LOCATION_DEFAULT_ICON', '') + + # Test that the icon can be set to None again + loc.icon = '' + loc.location_type = None + loc.save() + self.assertEqual(loc.icon, '') diff --git a/src/backend/InvenTree/templates/InvenTree/settings/barcode.html b/src/backend/InvenTree/templates/InvenTree/settings/barcode.html index 3e6fb6835b..8da99c0a9a 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/barcode.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/barcode.html @@ -15,6 +15,8 @@ {% include "InvenTree/settings/setting.html" with key="BARCODE_ENABLE" icon="fa-qrcode" %} {% include "InvenTree/settings/setting.html" with key="BARCODE_INPUT_DELAY" icon="fa-hourglass-half" %} {% include "InvenTree/settings/setting.html" with key="BARCODE_WEBCAM_SUPPORT" icon="fa-video" %} + {% include "InvenTree/settings/setting.html" with key="BARCODE_SHOW_TEXT" icon="fa-closed-captioning" %} + {% include "InvenTree/settings/setting.html" with key="BARCODE_GENERATION_PLUGIN" icon="fa-qrcode" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/build.html b/src/backend/InvenTree/templates/InvenTree/settings/build.html index 781bb71525..cce783b372 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/build.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/build.html @@ -14,6 +14,10 @@ {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REFERENCE_PATTERN" %} {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_RESPONSIBLE" %} + {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_ACTIVE_PART" %} + {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_LOCKED_PART" %} + {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_VALID_BOM" %} + {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_CLOSED_CHILDS" %} {% include "InvenTree/settings/setting.html" with key="PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/login.html b/src/backend/InvenTree/templates/InvenTree/settings/login.html index d2b557978c..d94a3a1831 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/login.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/login.html @@ -39,6 +39,10 @@ {% include "InvenTree/settings/setting.html" with key="LOGIN_ENABLE_SSO" icon="fa-user-shield" %} {% include "InvenTree/settings/setting.html" with key="LOGIN_ENABLE_SSO_REG" icon="fa-user-plus" %} {% include "InvenTree/settings/setting.html" with key="LOGIN_SIGNUP_SSO_AUTO" icon="fa-key" %} + {% include "InvenTree/settings/setting.html" with key="LOGIN_ENABLE_SSO_GROUP_SYNC" icon="fa-users" %} + {% include "InvenTree/settings/setting.html" with key="SSO_GROUP_KEY" icon="fa-key" %} + {% include "InvenTree/settings/setting.html" with key="SSO_GROUP_MAP" icon="fa-book" %} + {% include "InvenTree/settings/setting.html" with key="SSO_REMOVE_GROUPS" icon="fa-user-minus" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/part.html b/src/backend/InvenTree/templates/InvenTree/settings/part.html index dae8368b7f..96aafc3f30 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/part.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/part.html @@ -12,6 +12,7 @@ {% include "InvenTree/settings/setting.html" with key="PART_ENABLE_REVISION" %} + {% include "InvenTree/settings/setting.html" with key="PART_REVISION_ASSEMBLY_ONLY" %} {% 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" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/settings_staff_js.html b/src/backend/InvenTree/templates/InvenTree/settings/settings_staff_js.html index 85d90193db..5b2a0ce898 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/settings_staff_js.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/settings_staff_js.html @@ -330,7 +330,6 @@ onPanelLoad('category', function() { icon: 'fa-sitemap', tree_picker: { url: '{% url "api-part-category-tree" %}', - default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, default_value: {}, @@ -394,7 +393,6 @@ onPanelLoad('category', function() { value: pk, tree_picker: { url: '{% url "api-part-category-tree" %}', - default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, default_value: {}, @@ -429,7 +427,8 @@ onPanelLoad('parts', function() { }); // Javascript for the Stock settings panel -onPanelLoad("stock", function() { +onPanelLoad("stock", async function() { + await loadApiIconPacks(); // Construct the stock location type table $('#location-type-table').bootstrapTable({ @@ -440,6 +439,15 @@ onPanelLoad("stock", function() { return '{% trans "No stock location types found" escape %}'; }, columns: [ + { + field: 'icon', + sortable: true, + title: '{% trans "Icon" escape %}', + width: "50px", + formatter: function(value, row) { + return `` + } + }, { field: 'name', sortable: true, @@ -450,11 +458,6 @@ onPanelLoad("stock", function() { sortable: false, title: '{% trans "Description" escape %}', }, - { - field: 'icon', - sortable: true, - title: '{% trans "Icon" escape %}', - }, { field: 'location_count', sortable: true, @@ -560,13 +563,11 @@ onPanelLoad('stocktake', function() { category: { tree_picker: { url: '{% url "api-part-category-tree" %}', - default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, location: { tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, generate_report: {}, diff --git a/src/backend/InvenTree/templates/InvenTree/settings/user_display.html b/src/backend/InvenTree/templates/InvenTree/settings/user_display.html index 7ae7ae19e3..ab2144939d 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/user_display.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/user_display.html @@ -41,7 +41,7 @@
    + + + + + + + + + + + `; return html; @@ -1324,7 +1387,6 @@ function receivePurchaseOrderItems(order_id, line_items, options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, }, @@ -1472,6 +1534,14 @@ function receivePurchaseOrderItems(order_id, line_items, options={}) { line.batch_code = getFormFieldValue(`items_batch_code_${pk}`); } + if (getFormFieldElement(`items_packaging_${pk}`).exists()) { + line.packaging = getFormFieldValue(`items_packaging_${pk}`); + } + + if (getFormFieldElement(`items_note_${pk}`).exists()) { + line.note = getFormFieldValue(`items_note_${pk}`); + } + if (getFormFieldElement(`items_serial_numbers_${pk}`).exists()) { line.serial_numbers = getFormFieldValue(`items_serial_numbers_${pk}`); } diff --git a/src/backend/InvenTree/templates/js/translated/return_order.js b/src/backend/InvenTree/templates/js/translated/return_order.js index 23c921dfc2..c22330c87d 100644 --- a/src/backend/InvenTree/templates/js/translated/return_order.js +++ b/src/backend/InvenTree/templates/js/translated/return_order.js @@ -552,7 +552,6 @@ function receiveReturnOrderItems(order_id, line_items, options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, } }, diff --git a/src/backend/InvenTree/templates/js/translated/stock.js b/src/backend/InvenTree/templates/js/translated/stock.js index d5d9e15e4b..f9c5c2b3e3 100644 --- a/src/backend/InvenTree/templates/js/translated/stock.js +++ b/src/backend/InvenTree/templates/js/translated/stock.js @@ -4,6 +4,7 @@ /* globals addCachedAlert, + addTableFilter, baseCurrency, calculateTotalPrice, clearFormInput, @@ -16,7 +17,9 @@ formatCurrency, formatDecimal, formatPriceRange, + getApiIconClass, getCurrencyConversionRates, + getFormFieldElement, getFormFieldValue, getTableData, global_settings, @@ -36,8 +39,11 @@ makeIconBadge, makeIconButton, makeRemoveButton, + moment, orderParts, partDetail, + reloadTableFilters, + removeTableFilter, renderClipboard, renderDate, renderLink, @@ -68,6 +74,7 @@ duplicateStockItem, editStockItem, editStockLocation, + filterTestStatisticsTableDateRange, findStockItemBySerialNumber, installStockItem, loadInstalledInTable, @@ -76,6 +83,7 @@ loadStockTestResultsTable, loadStockTrackingTable, loadTableFilters, + prepareTestStatisticsTable, mergeStockItems, removeStockRow, serializeStockItem, @@ -136,8 +144,8 @@ function stockLocationTypeFields() { name: {}, description: {}, icon: { - help_text: `{% trans "Default icon for all locations that have no icon set (optional) - Explore all available icons on" %} Font Awesome.`, - placeholder: 'fas fa-box', + help_text: `{% trans "Icon (optional) - Explore all available icons on" %} Tabler Icons.`, + placeholder: 'ti:: (e.g. ti:alert-circle:filled)', icon: "fa-icons", }, } @@ -153,7 +161,6 @@ function stockLocationFields(options={}) { required: false, tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, name: {}, @@ -172,8 +179,8 @@ function stockLocationFields(options={}) { }, }, custom_icon: { - help_text: `{% trans "Icon (optional) - Explore all available icons on" %} Font Awesome.`, - placeholder: 'fas fa-box', + help_text: `{% trans "Icon (optional) - Explore all available icons on" %} Tabler Icons.`, + placeholder: 'ti:: (e.g. ti:alert-circle:filled)', icon: "fa-icons", }, }; @@ -355,7 +362,6 @@ function stockItemFields(options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, quantity: { @@ -915,7 +921,6 @@ function mergeStockItems(items, options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, notes: { @@ -1010,14 +1015,16 @@ function mergeStockItems(items, options={}) { */ function adjustStock(action, items, options={}) { - var formTitle = 'Form Title Here'; - var actionTitle = null; + let formTitle = 'Form Title Here'; + let actionTitle = null; + + const allowExtraFields = action == 'move'; // API url var url = null; - var specifyLocation = false; - var allowSerializedStock = false; + let specifyLocation = false; + let allowSerializedStock = false; switch (action) { case 'move': @@ -1069,7 +1076,7 @@ function adjustStock(action, items, options={}) { for (var idx = 0; idx < items.length; idx++) { - var item = items[idx]; + const item = items[idx]; if ((item.serial != null) && (item.serial != '') && !allowSerializedStock) { continue; @@ -1112,7 +1119,6 @@ function adjustStock(action, items, options={}) { let quantityString = ''; - var location = locationDetail(item, false); if (item.location_detail) { @@ -1152,11 +1158,68 @@ function adjustStock(action, items, options={}) { ); } - let buttons = wrapButtons(makeRemoveButton( + let buttons = ''; + + if (allowExtraFields) { + buttons += makeIconButton( + 'fa-layer-group', + 'button-row-add-batch', + pk, + '{% trans "Adjust batch code" %}', + { + collapseTarget: `row-batch-${pk}` + } + ); + + buttons += makeIconButton( + 'fa-boxes', + 'button-row-add-packaging', + pk, + '{% trans "Adjust packaging" %}', + { + collapseTarget: `row-packaging-${pk}` + } + ); + } + + buttons += makeRemoveButton( 'button-stock-item-remove', pk, '{% trans "Remove stock item" %}', - )); + ); + + buttons = wrapButtons(buttons); + + // Add in options for "batch code" and "serial numbers" + const batch_input = constructField( + `items_batch_code_${pk}`, + { + type: 'string', + required: false, + label: '{% trans "Batch Code" %}', + help_text: '{% trans "Enter batch code for incoming stock items" %}', + icon: 'fa-layer-group', + value: item.batch, + }, + { + hideLabels: true, + } + ); + + const packaging_input = constructField( + `items_packaging_${pk}`, + { + type: 'string', + required: false, + label: '{% trans "Packaging" %}', + help_text: '{% trans "Specify packaging for incoming stock items" %}', + icon: 'fa-boxes', + value: item.packaging, + }, + { + hideLabels: true, + } + ); html += ` @@ -1170,6 +1233,19 @@ function adjustStock(action, items, options={}) { + + + + + + + + + + + + + `; itemCount += 1; @@ -1266,21 +1342,30 @@ function adjustStock(action, items, options={}) { var item_pk_values = []; items.forEach(function(item) { - var pk = item.pk; + let pk = item.pk; // Does the row exist in the form? - var row = $(opts.modal).find(`#stock_item_${pk}`); + let row = $(opts.modal).find(`#stock_item_${pk}`); if (row.exists()) { item_pk_values.push(pk); - var quantity = getFormFieldValue(`items_quantity_${pk}`, {}, opts); - - data.items.push({ + let quantity = getFormFieldValue(`items_quantity_${pk}`, {}, opts); + let line = { pk: pk, - quantity: quantity, - }); + quantity: quantity + }; + + if (getFormFieldElement(`items_batch_code_${pk}`).exists()) { + line.batch = getFormFieldValue(`items_batch_code_${pk}`); + } + + if (getFormFieldElement(`items_packaging_${pk}`).exists()) { + line.packaging = getFormFieldValue(`items_packaging_${pk}`); + } + + data.items.push(line); } }); @@ -2730,9 +2815,8 @@ function loadStockLocationTable(table, options) { } } - const icon = row.icon || global_settings.STOCK_LOCATION_DEFAULT_ICON; - if (icon) { - html += ``; + if (row.icon) { + html += ``; } html += renderLink( @@ -3181,7 +3265,6 @@ function uninstallStockItem(installed_item_id, options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', - default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, note: { @@ -3334,3 +3417,105 @@ function setStockStatus(items, options={}) { } }); } + + +/* + * Load TestStatistics table. + */ +function loadTestStatisticsTable(table, prefix, url, options, filters = {}) { + inventreeGet(url, filters, { + async: true, + success: function(data) { + const keys = ['passed', 'failed', 'total'] + let header = ''; + let rows = [] + let passed= ''; + let failed = ''; + let total = ''; + $('.test-stat-result-cell').remove(); + $.each(data[0], function(key, value){ + if (key != "total") { + header += ''; + keys.forEach(function(keyName) { + var tdText = '-'; + if (value['total'] != '0' && value[keyName] != '0') { + let percentage = '' + if (keyName != 'total' && value[total] != 0) { + percentage = ' (' + (100.0 * (parseFloat(value[keyName]) / parseFloat(value['total']))).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 2}) + '%)'; + } + tdText = value[keyName] + percentage; + } + rows[keyName] += ''; + }) + } + }); + $('#' + prefix + '-test-statistics-table-header-id').after(header); + + keys.forEach(function(keyName) { + let valueStr = data[0]['total'][keyName]; + if (keyName != 'total' && data[0]['total']['total'] != '0') { + valueStr += ' (' + (100.0 * (parseFloat(valueStr) / parseFloat(data[0]['total']['total']))).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 2}) + '%)'; + } + rows[keyName] += ''; + $('#' + prefix + '-test-statistics-table-body-' + keyName).after(rows[keyName]); + }); + $('#' + prefix + '-test-statistics-table').show(); + setupFilterList(prefix + "teststatistics", table, "#filter-list-" + prefix + "teststatistics", options); + }, + }); +} + +function prepareTestStatisticsTable(keyName, apiUrl) +{ + let options = { + custom_actions: [ + { + icon: 'fa-calendar-week', + actions: [ + { + icon: 'fa-calendar-week', + title: '{% trans "This week" %}', + label: 'this-week', + callback: function(data) { + filterTestStatisticsTableDateRange(data, 'this-week', $("#test-statistics-table"), keyName + 'teststatistics', options); + } + }, + { + icon: 'fa-calendar-week', + title: '{% trans "This month" %}', + label: 'this-month', + callback: function(data) { + filterTestStatisticsTableDateRange(data, 'this-month', $("#test-statistics-table"), keyName + 'teststatistics', options); + } + }, + ], + } + ], + callback: function(table, filters, options) { + loadTestStatisticsTable($("#test-statistics-table"), keyName, apiUrl, options, filters); + } + } + setupFilterList(keyName + 'teststatistics', $("#test-statistics-table"), '#filter-list-' + keyName + 'teststatistics', options); + + // Load test statistics table + loadTestStatisticsTable($("#test-statistics-table"), keyName, apiUrl, options); +} + +function filterTestStatisticsTableDateRange(data, range, table, tableKey, options) +{ + var startDateString = ''; + var d = new Date(); + if (range == "this-week") { + startDateString = moment(new Date(d.getFullYear(), d.getMonth(), d.getDate() - (d.getDay() == 0 ? 6 : d.getDay() - 1))).format('YYYY-MM-DD'); + } else if (range == "this-month") { + startDateString = moment(new Date(d.getFullYear(), d.getMonth(), 1)).format('YYYY-MM-DD'); + } else { + console.warn(`Invalid range specified for filterTestStatisticsTableDateRange`); + return; + } + var filters = addTableFilter(tableKey, 'finished_datetime_after', startDateString); + removeTableFilter(tableKey, 'finished_datetime_before') + + reloadTableFilters(table, filters, options); + setupFilterList(tableKey, table, "#filter-list-" + tableKey, options); +} diff --git a/src/backend/InvenTree/templates/js/translated/table_filters.js b/src/backend/InvenTree/templates/js/translated/table_filters.js index 0c10b06f33..71b8c8a917 100644 --- a/src/backend/InvenTree/templates/js/translated/table_filters.js +++ b/src/backend/InvenTree/templates/js/translated/table_filters.js @@ -462,6 +462,20 @@ function getStockTestTableFilters() { }; } +// Return a dictionary of filters for the "test statistics" table +function getTestStatisticsTableFilters() { + + return { + finished_datetime_after: { + type: 'date', + title: '{% trans "Interval start" %}', + }, + finished_datetime_before: { + type: 'date', + title: '{% trans "Interval end" %}', + } + }; +} // Return a dictionary of filters for the "stocktracking" table function getStockTrackingTableFilters() { @@ -716,6 +730,11 @@ function getPartTableFilters() { title: '{% trans "Active" %}', description: '{% trans "Show active parts" %}', }, + locked: { + type: 'bool', + title: '{% trans "Locked" %}', + description: '{% trans "Show locked parts" %}', + }, assembly: { type: 'bool', title: '{% trans "Assembly" %}', @@ -858,6 +877,8 @@ function getAvailableTableFilters(tableKey) { return getBuildItemTableFilters(); case 'buildlines': return getBuildLineTableFilters(); + case 'buildteststatistics': + return getTestStatisticsTableFilters(); case 'bom': return getBOMTableFilters(); case 'category': @@ -880,6 +901,8 @@ function getAvailableTableFilters(tableKey) { return getPartTableFilters(); case 'parttests': return getPartTestTemplateFilters(); + case 'partteststatistics': + return getTestStatisticsTableFilters(); case 'plugins': return getPluginTableFilters(); case 'purchaseorder': diff --git a/src/backend/InvenTree/templates/test_statistics_table.html b/src/backend/InvenTree/templates/test_statistics_table.html new file mode 100644 index 0000000000..24361a3bf9 --- /dev/null +++ b/src/backend/InvenTree/templates/test_statistics_table.html @@ -0,0 +1,22 @@ +{% load i18n %} +{% load inventree_extras %} + +
    ${batch_input}
    {% trans "Packaging" %}${packaging_input}
    {% trans "Serials" %} ${sn_input}
    {% trans "Note" %}${note_input}
    ${buttons}
    {% trans "Batch" %}${batch_input}
    {% trans "Packaging" %}${packaging_input}
    ' + key + '' + tdText + '' + valueStr + '
    + + + + + + + + + + + + + + + + + + diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index 6ff708dbca..c8cfb12807 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -3,17 +3,23 @@ import datetime import logging -from django.contrib.auth import get_user, login, logout +from django.contrib.auth import authenticate, get_user, login, logout from django.contrib.auth.models import Group, User -from django.urls import include, path, re_path +from django.http.response import HttpResponse +from django.shortcuts import redirect +from django.urls import include, path, re_path, reverse from django.views.generic.base import RedirectView +from allauth.account import app_settings from allauth.account.adapter import get_adapter +from allauth_2fa.utils import user_has_valid_totp_device 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 from rest_framework.authentication import BasicAuthentication from rest_framework.decorators import authentication_classes +from rest_framework.generics import DestroyAPIView +from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView @@ -29,8 +35,13 @@ from InvenTree.mixins import ( ) from InvenTree.serializers import ExendedUserSerializer, UserCreateSerializer from InvenTree.settings import FRONTEND_URL_BASE -from users.models import ApiToken, Owner, RuleSet, check_user_role -from users.serializers import GroupSerializer, OwnerSerializer +from users.models import ApiToken, Owner +from users.serializers import ( + ApiTokenSerializer, + GroupSerializer, + OwnerSerializer, + RoleSerializer, +) logger = logging.getLogger('inventree') @@ -108,44 +119,15 @@ class OwnerDetail(RetrieveAPI): serializer_class = OwnerSerializer -class RoleDetails(APIView): - """API endpoint which lists the available role permissions for the current user. - - (Requires authentication) - """ +class RoleDetails(RetrieveAPI): + """API endpoint which lists the available role permissions for the current user.""" permission_classes = [permissions.IsAuthenticated] - serializer_class = None + serializer_class = RoleSerializer - def get(self, request, *args, **kwargs): - """Return the list of roles / permissions available to the current user.""" - user = request.user - - roles = {} - - for ruleset in RuleSet.RULESET_CHOICES: - role, _text = ruleset - - permissions = [] - - for permission in RuleSet.RULESET_PERMISSIONS: - if check_user_role(user, role, permission): - permissions.append(permission) - - if len(permissions) > 0: - roles[role] = permissions - else: - roles[role] = None # pragma: no cover - - data = { - 'user': user.pk, - 'username': user.username, - 'roles': roles, - 'is_staff': user.is_staff, - 'is_superuser': user.is_superuser, - } - - return Response(data) + def get_object(self): + """Overwritten to always return current user.""" + return self.request.user class UserDetail(RetrieveUpdateDestroyAPI): @@ -187,7 +169,24 @@ class UserList(ListCreateAPI): filterset_fields = ['is_staff', 'is_active', 'is_superuser'] -class GroupDetail(RetrieveUpdateDestroyAPI): +class GroupMixin: + """Mixin for Group API endpoints to add permissions filter.""" + + def get_serializer(self, *args, **kwargs): + """Return serializer instance for this endpoint.""" + # Do we wish to include extra detail? + try: + params = self.request.query_params + kwargs['permission_detail'] = InvenTree.helpers.str2bool( + params.get('permission_detail', None) + ) + except AttributeError: + pass + kwargs['context'] = self.get_serializer_context() + return self.serializer_class(*args, **kwargs) + + +class GroupDetail(GroupMixin, RetrieveUpdateDestroyAPI): """Detail endpoint for a particular auth group.""" queryset = Group.objects.all() @@ -195,7 +194,7 @@ class GroupDetail(RetrieveUpdateDestroyAPI): permission_classes = [permissions.IsAuthenticated] -class GroupList(ListCreateAPI): +class GroupList(GroupMixin, ListCreateAPI): """List endpoint for all auth groups.""" queryset = Group.objects.all() @@ -218,12 +217,40 @@ class GroupList(ListCreateAPI): class Login(LoginView): """API view for logging in via API.""" + def post(self, request, *args, **kwargs): + """API view for logging in via API.""" + _data = request.data.copy() + _data.update(request.POST.copy()) + + if not _data.get('mfa', None): + return super().post(request, *args, **kwargs) + + # Check if login credentials valid + user = authenticate( + request, username=_data.get('username'), password=_data.get('password') + ) + if user is None: + return HttpResponse(status=401) + + # Check if user has mfa set up + if not user_has_valid_totp_device(user): + return super().post(request, *args, **kwargs) + + # Stage login and redirect to 2fa + request.session['allauth_2fa_user_id'] = str(user.id) + request.session['allauth_2fa_login'] = { + 'email_verification': app_settings.EMAIL_VERIFICATION, + 'signal_kwargs': None, + 'signup': False, + 'email': None, + 'redirect_url': reverse('platform'), + } + return redirect(reverse('two-factor-authenticate')) + 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) @@ -260,7 +287,7 @@ class Logout(LogoutView): try: token = ApiToken.objects.get(key=token_key, user=request.user) token.delete() - except ApiToken.DoesNotExist: + except ApiToken.DoesNotExist: # pragma: no cover pass return super().logout(request) @@ -322,6 +349,22 @@ class GetAuthToken(APIView): raise exceptions.NotAuthenticated() +class TokenListView(DestroyAPIView, ListAPI): + """List of registered tokens for current users.""" + + permission_classes = (IsAuthenticated,) + serializer_class = ApiTokenSerializer + + def get_queryset(self): + """Only return data for current user.""" + return ApiToken.objects.filter(user=self.request.user) + + def perform_destroy(self, instance): + """Revoke token.""" + instance.revoked = True + instance.save() + + class LoginRedirect(RedirectView): """Redirect to the correct starting page after backend login.""" @@ -336,6 +379,13 @@ class LoginRedirect(RedirectView): user_urls = [ path('roles/', RoleDetails.as_view(), name='api-user-roles'), path('token/', GetAuthToken.as_view(), name='api-token'), + path( + 'tokens/', + include([ + path('/', TokenListView.as_view(), name='api-token-detail'), + path('', TokenListView.as_view(), name='api-token-list'), + ]), + ), path('me/', MeUserDetail.as_view(), name='api-user-me'), path( 'owner/', diff --git a/src/backend/InvenTree/users/apps.py b/src/backend/InvenTree/users/apps.py index a4c52ee777..fdf96ca0ec 100644 --- a/src/backend/InvenTree/users/apps.py +++ b/src/backend/InvenTree/users/apps.py @@ -26,7 +26,7 @@ class UsersConfig(AppConfig): # Skip if running migrations if InvenTree.ready.isRunningMigrations(): - return + return # pragma: no cover if InvenTree.ready.canAppAccessDatabase(allow_test=True): try: diff --git a/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py index cdda226fe9..31d606fab2 100644 --- a/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py +++ b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py @@ -6,9 +6,13 @@ from django.conf import settings from django.db import migrations -def clear_sessions(apps, schema_editor): +def clear_sessions(apps, schema_editor): # pragma: no cover """Clear all user sessions.""" + # Ignore in test mode + if settings.TESTING: + return + try: engine = import_module(settings.SESSION_ENGINE) engine.SessionStore.clear_expired() @@ -16,6 +20,7 @@ def clear_sessions(apps, schema_editor): except Exception: # Database may not be ready yet, so this does not matter anyhow pass + class Migration(migrations.Migration): atomic = False diff --git a/src/backend/InvenTree/users/migrations/0012_alter_ruleset_can_view.py b/src/backend/InvenTree/users/migrations/0012_alter_ruleset_can_view.py new file mode 100644 index 0000000000..fbe0a7bebd --- /dev/null +++ b/src/backend/InvenTree/users/migrations/0012_alter_ruleset_can_view.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.12 on 2024-07-18 21:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("users", "0011_auto_20240523_1640"), + ] + + operations = [ + migrations.AlterField( + model_name="ruleset", + name="can_view", + field=models.BooleanField( + default=False, help_text="Permission to view items", verbose_name="View" + ), + ), + ] diff --git a/src/backend/InvenTree/users/models.py b/src/backend/InvenTree/users/models.py index 0a175b3c7a..7a0cd636aa 100644 --- a/src/backend/InvenTree/users/models.py +++ b/src/backend/InvenTree/users/models.py @@ -258,7 +258,6 @@ class RuleSet(models.Model): 'part_partpricing', 'part_bomitem', 'part_bomitemsubstitute', - 'part_partattachment', 'part_partsellpricebreak', 'part_partinternalpricebreak', 'part_parttesttemplate', @@ -270,13 +269,11 @@ class RuleSet(models.Model): 'company_supplierpart', 'company_manufacturerpart', 'company_manufacturerpartparameter', - 'company_manufacturerpartattachment', ], 'stocktake': ['part_partstocktake', 'part_partstocktakereport'], 'stock_location': ['stock_stocklocation', 'stock_stocklocationtype'], 'stock': [ 'stock_stockitem', - 'stock_stockitemattachment', 'stock_stockitemtracking', 'stock_stockitemtestresult', ], @@ -288,13 +285,11 @@ class RuleSet(models.Model): 'build_build', 'build_builditem', 'build_buildline', - 'build_buildorderattachment', 'stock_stockitem', 'stock_stocklocation', ], 'purchase_order': [ 'company_company', - 'company_companyattachment', 'company_contact', 'company_address', 'company_manufacturerpart', @@ -302,31 +297,26 @@ class RuleSet(models.Model): 'company_supplierpart', 'company_supplierpricebreak', 'order_purchaseorder', - 'order_purchaseorderattachment', 'order_purchaseorderlineitem', 'order_purchaseorderextraline', ], 'sales_order': [ 'company_company', - 'company_companyattachment', 'company_contact', 'company_address', 'order_salesorder', 'order_salesorderallocation', - 'order_salesorderattachment', 'order_salesorderlineitem', 'order_salesorderextraline', 'order_salesordershipment', ], 'return_order': [ 'company_company', - 'company_companyattachment', 'company_contact', 'company_address', 'order_returnorder', 'order_returnorderlineitem', 'order_returnorderextraline', - 'order_returnorderattachment', ], } @@ -344,6 +334,7 @@ class RuleSet(models.Model): 'admin_logentry', 'contenttypes_contenttype', # Models which currently do not require permissions + 'common_attachment', 'common_colortheme', 'common_customunit', 'common_inventreesetting', @@ -366,6 +357,10 @@ class RuleSet(models.Model): 'django_q_task', 'django_q_schedule', 'django_q_success', + # Importing + 'importer_dataimportsession', + 'importer_dataimportcolumnmap', + 'importer_dataimportrow', ] RULESET_CHANGE_INHERIT = [('part', 'partparameter'), ('part', 'bomitem')] @@ -394,7 +389,7 @@ class RuleSet(models.Model): ) can_view = models.BooleanField( - verbose_name=_('View'), default=True, help_text=_('Permission to view items') + verbose_name=_('View'), default=False, help_text=_('Permission to view items') ) can_add = models.BooleanField( @@ -414,7 +409,7 @@ class RuleSet(models.Model): ) @classmethod - def check_table_permission(cls, user, table, permission): + def check_table_permission(cls, user: User, table, permission): """Check if the provided user has the specified permission against the table.""" # Superuser knows no bounds if user.is_superuser: @@ -673,7 +668,7 @@ def update_group_roles(group, debug=False): ) -def clear_user_role_cache(user): +def clear_user_role_cache(user: User): """Remove user role permission information from the cache. - This function is called whenever the user / group is updated @@ -683,30 +678,11 @@ def clear_user_role_cache(user): """ for role in RuleSet.get_ruleset_models().keys(): for perm in ['add', 'change', 'view', 'delete']: - key = f'role_{user}_{role}_{perm}' + key = f'role_{user.pk}_{role}_{perm}' cache.delete(key) -def get_user_roles(user): - """Return all roles available to a given user.""" - roles = set() - - for group in user.groups.all(): - for rule in group.rule_sets.all(): - name = rule.name - if rule.can_view: - roles.add(f'{name}.view') - if rule.can_add: - roles.add(f'{name}.add') - if rule.can_change: - roles.add(f'{name}.change') - if rule.can_delete: - roles.add(f'{name}.delete') - - return roles - - -def check_user_role(user, role, permission): +def check_user_role(user: User, role, permission): """Check if a user has a particular role:permission combination. If the user is a superuser, this will return True @@ -715,11 +691,11 @@ def check_user_role(user, role, permission): return True # First, check the cache - key = f'role_{user}_{role}_{permission}' + key = f'role_{user.pk}_{role}_{permission}' try: result = cache.get(key) - except Exception: + except Exception: # pragma: no cover result = None if result is not None: @@ -750,7 +726,7 @@ def check_user_role(user, role, permission): # Save result to cache try: cache.set(key, result, timeout=3600) - except Exception: + except Exception: # pragma: no cover pass return result diff --git a/src/backend/InvenTree/users/serializers.py b/src/backend/InvenTree/users/serializers.py index b4e3dbb7da..8455dfd2b6 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -1,12 +1,14 @@ """DRF API serializers for the 'users' app.""" -from django.contrib.auth.models import Group, User +from django.contrib.auth.models import Group, Permission, User +from django.core.exceptions import AppRegistryNotReady +from django.db.models import Q from rest_framework import serializers from InvenTree.serializers import InvenTreeModelSerializer -from .models import Owner, RuleSet, check_user_role +from .models import ApiToken, Owner, RuleSet, check_user_role class OwnerSerializer(InvenTreeModelSerializer): @@ -30,7 +32,25 @@ class GroupSerializer(InvenTreeModelSerializer): """Metaclass defines serializer fields.""" model = Group - fields = ['pk', 'name'] + fields = ['pk', 'name', 'permissions'] + + def __init__(self, *args, **kwargs): + """Initialize this serializer with extra fields as required.""" + permission_detail = kwargs.pop('permission_detail', False) + + super().__init__(*args, **kwargs) + + try: + if not permission_detail: + self.fields.pop('permissions', None) + except AppRegistryNotReady: + pass + + permissions = serializers.SerializerMethodField() + + def get_permissions(self, group: Group): + """Return a list of permissions associated with the group.""" + return generate_permission_dict(group.permissions.all()) class RoleSerializer(InvenTreeModelSerializer): @@ -40,16 +60,21 @@ class RoleSerializer(InvenTreeModelSerializer): """Metaclass options.""" model = User - fields = ['user', 'username', 'is_staff', 'is_superuser', 'roles'] + fields = [ + 'user', + 'username', + 'roles', + 'permissions', + 'is_staff', + 'is_superuser', + ] user = serializers.IntegerField(source='pk') - username = serializers.CharField() - is_staff = serializers.BooleanField() - is_superuser = serializers.BooleanField() roles = serializers.SerializerMethodField() + permissions = serializers.SerializerMethodField() def get_roles(self, user: User) -> dict: - """Return roles associated with the specified User.""" + """Roles associated with the user.""" roles = {} for ruleset in RuleSet.RULESET_CHOICES: @@ -67,3 +92,59 @@ class RoleSerializer(InvenTreeModelSerializer): roles[role] = None # pragma: no cover return roles + + def get_permissions(self, user: User) -> dict: + """Permissions associated with the user.""" + if user.is_superuser: + permissions = Permission.objects.all() + else: + permissions = Permission.objects.filter( + Q(user=user) | Q(group__user=user) + ).distinct() + + return generate_permission_dict(permissions) + + +def generate_permission_dict(permissions): + """Generate a dictionary of permissions for a given set of permissions.""" + perms = {} + + for permission in permissions: + perm, model = permission.codename.split('_') + + if model not in perms: + perms[model] = [] + + perms[model].append(perm) + return perms + + +class ApiTokenSerializer(InvenTreeModelSerializer): + """Serializer for the ApiToken model.""" + + in_use = serializers.SerializerMethodField(read_only=True) + + def get_in_use(self, token: ApiToken) -> bool: + """Return True if the token is currently used to call the endpoint.""" + from InvenTree.middleware import get_token_from_request + + request = self.context.get('request') + rq_token = get_token_from_request(request) + return token.key == rq_token + + class Meta: + """Meta options for ApiTokenSerializer.""" + + model = ApiToken + fields = [ + 'created', + 'expiry', + 'id', + 'last_seen', + 'name', + 'token', + 'active', + 'revoked', + 'user', + 'in_use', + ] diff --git a/src/backend/InvenTree/users/test_api.py b/src/backend/InvenTree/users/test_api.py index c25b9acbff..ea271f7e19 100644 --- a/src/backend/InvenTree/users/test_api.py +++ b/src/backend/InvenTree/users/test_api.py @@ -12,6 +12,29 @@ from users.models import ApiToken class UserAPITests(InvenTreeAPITestCase): """Tests for user API endpoints.""" + def test_user_options(self): + """Tests for the User OPTIONS request.""" + self.assignRole('admin.add') + response = self.options(reverse('api-user-list'), expected_code=200) + + fields = response.data['actions']['POST'] + + # Check some of the field values + self.assertEqual(fields['username']['label'], 'Username') + + self.assertEqual(fields['email']['label'], 'Email') + self.assertEqual(fields['email']['help_text'], 'Email address of the user') + + self.assertEqual(fields['is_active']['label'], 'Active') + self.assertEqual( + fields['is_active']['help_text'], 'Is this user account active' + ) + + self.assertEqual(fields['is_staff']['label'], 'Staff') + self.assertEqual( + fields['is_staff']['help_text'], 'Does this user have staff permissions' + ) + def test_user_api(self): """Tests for User API endpoints.""" response = self.get(reverse('api-user-list'), expected_code=200) @@ -48,6 +71,25 @@ class UserAPITests(InvenTreeAPITestCase): self.assertIn('name', response.data) + def test_logout(self): + """Test api logout endpoint.""" + token_key = self.get(url=reverse('api-token')).data['token'] + self.client.logout() + self.client.credentials(HTTP_AUTHORIZATION='Token ' + token_key) + + self.post(reverse('api-logout'), expected_code=200) + self.get(reverse('api-token'), expected_code=401) + + def test_login_redirect(self): + """Test login redirect endpoint.""" + response = self.get(reverse('api-login-redirect'), expected_code=302) + self.assertEqual(response.url, '/index/') + + # PUI + self.put(reverse('api-ui-preference'), {'preferred_method': 'pui'}) + response = self.get(reverse('api-login-redirect'), expected_code=302) + self.assertEqual(response.url, '/platform/logged-in/') + class UserTokenTests(InvenTreeAPITestCase): """Tests for user token functionality.""" @@ -156,3 +198,13 @@ class UserTokenTests(InvenTreeAPITestCase): token.save() self.client.get(me, expected_code=200) + + def test_buildin_token(self): + """Test the built-in token authentication.""" + response = self.post( + reverse('rest_login'), + {'username': self.username, 'password': self.password}, + expected_code=200, + ) + self.assertIn('key', response.data) + self.assertTrue(response.data['key'].startswith('inv-')) diff --git a/src/backend/InvenTree/users/tests.py b/src/backend/InvenTree/users/tests.py index 44ea1ac1e8..1d5d9686c0 100644 --- a/src/backend/InvenTree/users/tests.py +++ b/src/backend/InvenTree/users/tests.py @@ -5,7 +5,7 @@ from django.contrib.auth.models import Group from django.test import TestCase, tag from django.urls import reverse -from InvenTree.unit_test import InvenTreeTestCase +from InvenTree.unit_test import InvenTreeAPITestCase, InvenTreeTestCase from users.models import ApiToken, Owner, RuleSet @@ -123,8 +123,8 @@ class RuleSetModelTest(TestCase): for model in models: permission_set.add(model) - # Every ruleset by default sets one permission, the "view" permission set - self.assertEqual(group.permissions.count(), len(permission_set)) + # By default no permissions should be assigned + self.assertEqual(group.permissions.count(), 0) # Add some more rules for rule in rulesets: @@ -221,6 +221,10 @@ class OwnerModelTest(InvenTreeTestCase): self.client.login(username=self.username, password=self.password) # user list self.do_request(reverse('api-owner-list'), {}) + + # user list with 'is_active' filter + self.do_request(reverse('api-owner-list'), {'is_active': False}) + # user list with search self.do_request(reverse('api-owner-list'), {'search': 'user'}) @@ -265,3 +269,47 @@ class OwnerModelTest(InvenTreeTestCase): reverse('api-user-me'), {'name': 'another-token'}, 200 ) self.assertEqual(response['username'], self.username) + + +class MFALoginTest(InvenTreeAPITestCase): + """Some simplistic tests to ensure that MFA is working.""" + + def test_api(self): + """Test that the API is working.""" + auth_data = {'username': self.username, 'password': self.password} + login_url = reverse('api-login') + + # Normal login + response = self.post(login_url, auth_data, expected_code=200) + self.assertIn('key', response.data) + self.client.logout() + + # Add MFA + totp_model = self.user.totpdevice_set.create() + + # Login with MFA enabled but not provided + response = self.post(login_url, auth_data, expected_code=403) + self.assertContains(response, 'MFA required for this user', status_code=403) + + # Login with MFA enabled and provided - should redirect to MFA page + auth_data['mfa'] = 'anything' + response = self.post(login_url, auth_data, expected_code=302) + self.assertEqual(response.url, reverse('two-factor-authenticate')) + # MFA not finished - no access allowed + self.get(reverse('api-token'), expected_code=401) + + # Login with MFA enabled and provided - but incorrect pwd + auth_data['password'] = 'wrong' + self.post(login_url, auth_data, expected_code=401) + auth_data['password'] = self.password + + # Remove MFA + totp_model.delete() + + # Login with MFA disabled but correct credentials provided + response = self.post(login_url, auth_data, expected_code=200) + self.assertIn('key', response.data) + + # Wrong login should not work + auth_data['password'] = 'wrong' + self.post(login_url, auth_data, expected_code=401) diff --git a/src/backend/package-lock.json b/src/backend/package-lock.json index fab059686b..0023f7f4bd 100644 --- a/src/backend/package-lock.json +++ b/src/backend/package-lock.json @@ -5,7 +5,7 @@ "packages": { "": { "dependencies": { - "eslint": "^9.4.0", + "eslint": "^9.7.0", "eslint-config-google": "^0.14.0" } }, @@ -43,21 +43,21 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/config-array": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.15.1.tgz", - "integrity": "sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", "dependencies": { - "@eslint/object-schema": "^2.1.3", + "@eslint/object-schema": "^2.1.4", "debug": "^4.3.1", - "minimatch": "^3.0.5" + "minimatch": "^3.1.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -86,17 +86,17 @@ } }, "node_modules/@eslint/js": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.4.0.tgz", - "integrity": "sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.7.0.tgz", + "integrity": "sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/object-schema": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.3.tgz", - "integrity": "sha512-HAbhAYKfsAC2EkTqve00ibWIZlaU74Z1EHwAjYr4PXF0YU2VEA1zSIKSSpKszRLRWwHzzRZXvK632u+uXzvsvw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -158,9 +158,9 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "bin": { "acorn": "bin/acorn" }, @@ -322,15 +322,15 @@ } }, "node_modules/eslint": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.4.0.tgz", - "integrity": "sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.7.0.tgz", + "integrity": "sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/config-array": "^0.15.1", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.17.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.4.0", + "@eslint/js": "9.7.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", @@ -339,10 +339,10 @@ "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", + "eslint-scope": "^8.0.2", "eslint-visitor-keys": "^4.0.0", - "espree": "^10.0.1", - "esquery": "^1.4.2", + "espree": "^10.1.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", @@ -368,7 +368,7 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" } }, "node_modules/eslint-config-google": { @@ -383,9 +383,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -409,11 +409,11 @@ } }, "node_modules/espree": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", - "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "dependencies": { - "acorn": "^8.11.3", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.0.0" }, diff --git a/src/backend/package.json b/src/backend/package.json index b72a219be5..af77f35b2e 100644 --- a/src/backend/package.json +++ b/src/backend/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "eslint": "^9.4.0", + "eslint": "^9.7.0", "eslint-config-google": "^0.14.0" }, "type": "module" diff --git a/src/backend/requirements-dev.txt b/src/backend/requirements-dev.txt index aea5becad4..72b7aba4b5 100644 --- a/src/backend/requirements-dev.txt +++ b/src/backend/requirements-dev.txt @@ -1,9 +1,11 @@ # This file was autogenerated by uv via the following command: -# uv pip compile src/backend/requirements-dev.in -o src/backend/requirements-dev.txt --python-version=3.9 --no-strip-extras --generate-hashes +# uv pip compile src/backend/requirements-dev.in -o src/backend/requirements-dev.txt --no-strip-extras --generate-hashes asgiref==3.8.1 \ --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47 \ --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 - # via django + # via + # -c src/backend/requirements.txt + # django build==1.2.1 \ --hash=sha256:526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d \ --hash=sha256:75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4 @@ -61,7 +63,9 @@ cffi==1.16.0 \ --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 - # via cryptography + # via + # -c src/backend/requirements.txt + # cryptography cfgv==3.4.0 \ --hash=sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9 \ --hash=sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560 @@ -157,162 +161,182 @@ charset-normalizer==3.3.2 \ --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 - # via pdfminer-six + # via + # -c src/backend/requirements.txt + # pdfminer-six click==8.1.7 \ --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de # via pip-tools -coverage[toml]==7.5.1 \ - --hash=sha256:0646599e9b139988b63704d704af8e8df7fa4cbc4a1f33df69d97f36cb0a38de \ - --hash=sha256:0cdcbc320b14c3e5877ee79e649677cb7d89ef588852e9583e6b24c2e5072661 \ - --hash=sha256:0d0a0f5e06881ecedfe6f3dd2f56dcb057b6dbeb3327fd32d4b12854df36bf26 \ - --hash=sha256:1434e088b41594baa71188a17533083eabf5609e8e72f16ce8c186001e6b8c41 \ - --hash=sha256:16db7f26000a07efcf6aea00316f6ac57e7d9a96501e990a36f40c965ec7a95d \ - --hash=sha256:1cc0fe9b0b3a8364093c53b0b4c0c2dd4bb23acbec4c9240b5f284095ccf7981 \ - --hash=sha256:1fc81d5878cd6274ce971e0a3a18a8803c3fe25457165314271cf78e3aae3aa2 \ - --hash=sha256:2ec92012fefebee89a6b9c79bc39051a6cb3891d562b9270ab10ecfdadbc0c34 \ - --hash=sha256:39afcd3d4339329c5f58de48a52f6e4e50f6578dd6099961cf22228feb25f38f \ - --hash=sha256:4a7b0ceee8147444347da6a66be737c9d78f3353b0681715b668b72e79203e4a \ - --hash=sha256:4a9ca3f2fae0088c3c71d743d85404cec8df9be818a005ea065495bedc33da35 \ - --hash=sha256:4bf0655ab60d754491004a5efd7f9cccefcc1081a74c9ef2da4735d6ee4a6223 \ - --hash=sha256:4cc37def103a2725bc672f84bd939a6fe4522310503207aae4d56351644682f1 \ - --hash=sha256:4fc84a37bfd98db31beae3c2748811a3fa72bf2007ff7902f68746d9757f3746 \ - --hash=sha256:5037f8fcc2a95b1f0e80585bd9d1ec31068a9bcb157d9750a172836e98bc7a90 \ - --hash=sha256:54de9ef3a9da981f7af93eafde4ede199e0846cd819eb27c88e2b712aae9708c \ - --hash=sha256:556cf1a7cbc8028cb60e1ff0be806be2eded2daf8129b8811c63e2b9a6c43bca \ - --hash=sha256:57e0204b5b745594e5bc14b9b50006da722827f0b8c776949f1135677e88d0b8 \ - --hash=sha256:5a5740d1fb60ddf268a3811bcd353de34eb56dc24e8f52a7f05ee513b2d4f596 \ - --hash=sha256:5c3721c2c9e4c4953a41a26c14f4cef64330392a6d2d675c8b1db3b645e31f0e \ - --hash=sha256:5fa567e99765fe98f4e7d7394ce623e794d7cabb170f2ca2ac5a4174437e90dd \ - --hash=sha256:5fd215c0c7d7aab005221608a3c2b46f58c0285a819565887ee0b718c052aa4e \ - --hash=sha256:6175d1a0559986c6ee3f7fccfc4a90ecd12ba0a383dcc2da30c2b9918d67d8a3 \ - --hash=sha256:61c4bf1ba021817de12b813338c9be9f0ad5b1e781b9b340a6d29fc13e7c1b5e \ - --hash=sha256:6537e7c10cc47c595828b8a8be04c72144725c383c4702703ff4e42e44577312 \ - --hash=sha256:68f962d9b72ce69ea8621f57551b2fa9c70509af757ee3b8105d4f51b92b41a7 \ - --hash=sha256:7352b9161b33fd0b643ccd1f21f3a3908daaddf414f1c6cb9d3a2fd618bf2572 \ - --hash=sha256:796a79f63eca8814ca3317a1ea443645c9ff0d18b188de470ed7ccd45ae79428 \ - --hash=sha256:79afb6197e2f7f60c4824dd4b2d4c2ec5801ceb6ba9ce5d2c3080e5660d51a4f \ - --hash=sha256:7a588d39e0925f6a2bff87154752481273cdb1736270642aeb3635cb9b4cad07 \ - --hash=sha256:8748731ad392d736cc9ccac03c9845b13bb07d020a33423fa5b3a36521ac6e4e \ - --hash=sha256:8fe7502616b67b234482c3ce276ff26f39ffe88adca2acf0261df4b8454668b4 \ - --hash=sha256:9314d5678dcc665330df5b69c1e726a0e49b27df0461c08ca12674bcc19ef136 \ - --hash=sha256:9735317685ba6ec7e3754798c8871c2f49aa5e687cc794a0b1d284b2389d1bd5 \ - --hash=sha256:9981706d300c18d8b220995ad22627647be11a4276721c10911e0e9fa44c83e8 \ - --hash=sha256:9e78295f4144f9dacfed4f92935fbe1780021247c2fabf73a819b17f0ccfff8d \ - --hash=sha256:b016ea6b959d3b9556cb401c55a37547135a587db0115635a443b2ce8f1c7228 \ - --hash=sha256:b6cf3764c030e5338e7f61f95bd21147963cf6aa16e09d2f74f1fa52013c1206 \ - --hash=sha256:beccf7b8a10b09c4ae543582c1319c6df47d78fd732f854ac68d518ee1fb97fa \ - --hash=sha256:c0884920835a033b78d1c73b6d3bbcda8161a900f38a488829a83982925f6c2e \ - --hash=sha256:c3e757949f268364b96ca894b4c342b41dc6f8f8b66c37878aacef5930db61be \ - --hash=sha256:ca498687ca46a62ae590253fba634a1fe9836bc56f626852fb2720f334c9e4e5 \ - --hash=sha256:d1d0d98d95dd18fe29dc66808e1accf59f037d5716f86a501fc0256455219668 \ - --hash=sha256:d21918e9ef11edf36764b93101e2ae8cc82aa5efdc7c5a4e9c6c35a48496d601 \ - --hash=sha256:d7fed867ee50edf1a0b4a11e8e5d0895150e572af1cd6d315d557758bfa9c057 \ - --hash=sha256:db66fc317a046556a96b453a58eced5024af4582a8dbdc0c23ca4dbc0d5b3146 \ - --hash=sha256:dde0070c40ea8bb3641e811c1cfbf18e265d024deff6de52c5950677a8fb1e0f \ - --hash=sha256:df4e745a81c110e7446b1cc8131bf986157770fa405fe90e15e850aaf7619bc8 \ - --hash=sha256:e2213def81a50519d7cc56ed643c9e93e0247f5bbe0d1247d15fa520814a7cd7 \ - --hash=sha256:ef48e2707fb320c8f139424a596f5b69955a85b178f15af261bab871873bb987 \ - --hash=sha256:f152cbf5b88aaeb836127d920dd0f5e7edff5a66f10c079157306c4343d86c19 \ - --hash=sha256:fc0b4d8bfeabd25ea75e94632f5b6e047eef8adaed0c2161ada1e922e7f7cece -cryptography==42.0.7 \ - --hash=sha256:02c0eee2d7133bdbbc5e24441258d5d2244beb31da5ed19fbb80315f4bbbff55 \ - --hash=sha256:0d563795db98b4cd57742a78a288cdbdc9daedac29f2239793071fe114f13785 \ - --hash=sha256:16268d46086bb8ad5bf0a2b5544d8a9ed87a0e33f5e77dd3c3301e63d941a83b \ - --hash=sha256:1a58839984d9cb34c855197043eaae2c187d930ca6d644612843b4fe8513c886 \ - --hash=sha256:2954fccea107026512b15afb4aa664a5640cd0af630e2ee3962f2602693f0c82 \ - --hash=sha256:2e47577f9b18723fa294b0ea9a17d5e53a227867a0a4904a1a076d1646d45ca1 \ - --hash=sha256:31adb7d06fe4383226c3e963471f6837742889b3c4caa55aac20ad951bc8ffda \ - --hash=sha256:3577d029bc3f4827dd5bf8bf7710cac13527b470bbf1820a3f394adb38ed7d5f \ - --hash=sha256:36017400817987670037fbb0324d71489b6ead6231c9604f8fc1f7d008087c68 \ - --hash=sha256:362e7197754c231797ec45ee081f3088a27a47c6c01eff2ac83f60f85a50fe60 \ - --hash=sha256:3de9a45d3b2b7d8088c3fbf1ed4395dfeff79d07842217b38df14ef09ce1d8d7 \ - --hash=sha256:4f698edacf9c9e0371112792558d2f705b5645076cc0aaae02f816a0171770fd \ - --hash=sha256:5482e789294854c28237bba77c4c83be698be740e31a3ae5e879ee5444166582 \ - --hash=sha256:5e44507bf8d14b36b8389b226665d597bc0f18ea035d75b4e53c7b1ea84583cc \ - --hash=sha256:779245e13b9a6638df14641d029add5dc17edbef6ec915688f3acb9e720a5858 \ - --hash=sha256:789caea816c6704f63f6241a519bfa347f72fbd67ba28d04636b7c6b7da94b0b \ - --hash=sha256:7f8b25fa616d8b846aef64b15c606bb0828dbc35faf90566eb139aa9cff67af2 \ - --hash=sha256:8cb8ce7c3347fcf9446f201dc30e2d5a3c898d009126010cbd1f443f28b52678 \ - --hash=sha256:93a3209f6bb2b33e725ed08ee0991b92976dfdcf4e8b38646540674fc7508e13 \ - --hash=sha256:a3a5ac8b56fe37f3125e5b72b61dcde43283e5370827f5233893d461b7360cd4 \ - --hash=sha256:a47787a5e3649008a1102d3df55424e86606c9bae6fb77ac59afe06d234605f8 \ - --hash=sha256:a79165431551042cc9d1d90e6145d5d0d3ab0f2d66326c201d9b0e7f5bf43604 \ - --hash=sha256:a987f840718078212fdf4504d0fd4c6effe34a7e4740378e59d47696e8dfb477 \ - --hash=sha256:a9bc127cdc4ecf87a5ea22a2556cab6c7eda2923f84e4f3cc588e8470ce4e42e \ - --hash=sha256:bd13b5e9b543532453de08bcdc3cc7cebec6f9883e886fd20a92f26940fd3e7a \ - --hash=sha256:c65f96dad14f8528a447414125e1fc8feb2ad5a272b8f68477abbcc1ea7d94b9 \ - --hash=sha256:d8e3098721b84392ee45af2dd554c947c32cc52f862b6a3ae982dbb90f577f14 \ - --hash=sha256:e6b79d0adb01aae87e8a44c2b64bc3f3fe59515280e00fb6d57a7267a2583cda \ - --hash=sha256:e6b8f1881dac458c34778d0a424ae5769de30544fc678eac51c1c8bb2183e9da \ - --hash=sha256:e9b2a6309f14c0497f348d08a065d52f3020656f675819fc405fb63bbcd26562 \ - --hash=sha256:ecbfbc00bf55888edda9868a4cf927205de8499e7fabe6c050322298382953f2 \ - --hash=sha256:efd0bf5205240182e0f13bcaea41be4fdf5c22c5129fc7ced4a0282ac86998c9 - # via pdfminer-six +coverage[toml]==7.5.4 \ + --hash=sha256:018a12985185038a5b2bcafab04ab833a9a0f2c59995b3cec07e10074c78635f \ + --hash=sha256:02ff6e898197cc1e9fa375581382b72498eb2e6d5fc0b53f03e496cfee3fac6d \ + --hash=sha256:042183de01f8b6d531e10c197f7f0315a61e8d805ab29c5f7b51a01d62782747 \ + --hash=sha256:1014fbf665fef86cdfd6cb5b7371496ce35e4d2a00cda501cf9f5b9e6fced69f \ + --hash=sha256:1137f46adb28e3813dec8c01fefadcb8c614f33576f672962e323b5128d9a68d \ + --hash=sha256:16852febd96acd953b0d55fc842ce2dac1710f26729b31c80b940b9afcd9896f \ + --hash=sha256:2174e7c23e0a454ffe12267a10732c273243b4f2d50d07544a91198f05c48f47 \ + --hash=sha256:2214ee920787d85db1b6a0bd9da5f8503ccc8fcd5814d90796c2f2493a2f4d2e \ + --hash=sha256:3257fdd8e574805f27bb5342b77bc65578e98cbc004a92232106344053f319ba \ + --hash=sha256:3684bc2ff328f935981847082ba4fdc950d58906a40eafa93510d1b54c08a66c \ + --hash=sha256:3a6612c99081d8d6134005b1354191e103ec9705d7ba2754e848211ac8cacc6b \ + --hash=sha256:3d7564cc09dd91b5a6001754a5b3c6ecc4aba6323baf33a12bd751036c998be4 \ + --hash=sha256:44da56a2589b684813f86d07597fdf8a9c6ce77f58976727329272f5a01f99f7 \ + --hash=sha256:5013ed890dc917cef2c9f765c4c6a8ae9df983cd60dbb635df8ed9f4ebc9f555 \ + --hash=sha256:54317c2b806354cbb2dc7ac27e2b93f97096912cc16b18289c5d4e44fc663233 \ + --hash=sha256:56b4eafa21c6c175b3ede004ca12c653a88b6f922494b023aeb1e836df953ace \ + --hash=sha256:581ea96f92bf71a5ec0974001f900db495488434a6928a2ca7f01eee20c23805 \ + --hash=sha256:5cd64adedf3be66f8ccee418473c2916492d53cbafbfcff851cbec5a8454b136 \ + --hash=sha256:5df54843b88901fdc2f598ac06737f03d71168fd1175728054c8f5a2739ac3e4 \ + --hash=sha256:65e528e2e921ba8fd67d9055e6b9f9e34b21ebd6768ae1c1723f4ea6ace1234d \ + --hash=sha256:6aae5cce399a0f065da65c7bb1e8abd5c7a3043da9dceb429ebe1b289bc07806 \ + --hash=sha256:6cfb5a4f556bb51aba274588200a46e4dd6b505fb1a5f8c5ae408222eb416f99 \ + --hash=sha256:7076b4b3a5f6d2b5d7f1185fde25b1e54eb66e647a1dfef0e2c2bfaf9b4c88c8 \ + --hash=sha256:73ca8fbc5bc622e54627314c1a6f1dfdd8db69788f3443e752c215f29fa87a0b \ + --hash=sha256:79b356f3dd5b26f3ad23b35c75dbdaf1f9e2450b6bcefc6d0825ea0aa3f86ca5 \ + --hash=sha256:7a892be37ca35eb5019ec85402c3371b0f7cda5ab5056023a7f13da0961e60da \ + --hash=sha256:8192794d120167e2a64721d88dbd688584675e86e15d0569599257566dec9bf0 \ + --hash=sha256:820bc841faa502e727a48311948e0461132a9c8baa42f6b2b84a29ced24cc078 \ + --hash=sha256:8f894208794b164e6bd4bba61fc98bf6b06be4d390cf2daacfa6eca0a6d2bb4f \ + --hash=sha256:a04e990a2a41740b02d6182b498ee9796cf60eefe40cf859b016650147908029 \ + --hash=sha256:a44963520b069e12789d0faea4e9fdb1e410cdc4aab89d94f7f55cbb7fef0353 \ + --hash=sha256:a6bb74ed465d5fb204b2ec41d79bcd28afccf817de721e8a807d5141c3426638 \ + --hash=sha256:ab73b35e8d109bffbda9a3e91c64e29fe26e03e49addf5b43d85fc426dde11f9 \ + --hash=sha256:aea072a941b033813f5e4814541fc265a5c12ed9720daef11ca516aeacd3bd7f \ + --hash=sha256:b1ccf5e728ccf83acd313c89f07c22d70d6c375a9c6f339233dcf792094bcbf7 \ + --hash=sha256:b385d49609f8e9efc885790a5a0e89f2e3ae042cdf12958b6034cc442de428d3 \ + --hash=sha256:b3d45ff86efb129c599a3b287ae2e44c1e281ae0f9a9bad0edc202179bcc3a2e \ + --hash=sha256:b4a474f799456e0eb46d78ab07303286a84a3140e9700b9e154cfebc8f527016 \ + --hash=sha256:b95c3a8cb0463ba9f77383d0fa8c9194cf91f64445a63fc26fb2327e1e1eb088 \ + --hash=sha256:c5986ee7ea0795a4095ac4d113cbb3448601efca7f158ec7f7087a6c705304e4 \ + --hash=sha256:cdd31315fc20868c194130de9ee6bfd99755cc9565edff98ecc12585b90be882 \ + --hash=sha256:cef4649ec906ea7ea5e9e796e68b987f83fa9a718514fe147f538cfeda76d7a7 \ + --hash=sha256:d05c16cf4b4c2fc880cb12ba4c9b526e9e5d5bb1d81313d4d732a5b9fe2b9d53 \ + --hash=sha256:d2e344d6adc8ef81c5a233d3a57b3c7d5181f40e79e05e1c143da143ccb6377d \ + --hash=sha256:d45d3cbd94159c468b9b8c5a556e3f6b81a8d1af2a92b77320e887c3e7a5d080 \ + --hash=sha256:db14f552ac38f10758ad14dd7b983dbab424e731588d300c7db25b6f89e335b5 \ + --hash=sha256:dbc5958cb471e5a5af41b0ddaea96a37e74ed289535e8deca404811f6cb0bc3d \ + --hash=sha256:ddbd2f9713a79e8e7242d7c51f1929611e991d855f414ca9996c20e44a895f7c \ + --hash=sha256:e16f3d6b491c48c5ae726308e6ab1e18ee830b4cdd6913f2d7f77354b33f91c8 \ + --hash=sha256:e2afe743289273209c992075a5a4913e8d007d569a406ffed0bd080ea02b0633 \ + --hash=sha256:e564c2cf45d2f44a9da56f4e3a26b2236504a496eb4cb0ca7221cd4cc7a9aca9 \ + --hash=sha256:ed550e7442f278af76d9d65af48069f1fb84c9f745ae249c1a183c1e9d1b025c + # via -r src/backend/requirements-dev.in +cryptography==42.0.8 \ + --hash=sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad \ + --hash=sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583 \ + --hash=sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b \ + --hash=sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c \ + --hash=sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1 \ + --hash=sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648 \ + --hash=sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949 \ + --hash=sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba \ + --hash=sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c \ + --hash=sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9 \ + --hash=sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d \ + --hash=sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c \ + --hash=sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e \ + --hash=sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2 \ + --hash=sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d \ + --hash=sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7 \ + --hash=sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70 \ + --hash=sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2 \ + --hash=sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7 \ + --hash=sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14 \ + --hash=sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe \ + --hash=sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e \ + --hash=sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71 \ + --hash=sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961 \ + --hash=sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7 \ + --hash=sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c \ + --hash=sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28 \ + --hash=sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842 \ + --hash=sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902 \ + --hash=sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801 \ + --hash=sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a \ + --hash=sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e + # via + # -c src/backend/requirements.txt + # pdfminer-six distlib==0.3.8 \ --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 # via virtualenv -django==4.2.12 \ - --hash=sha256:6a6b4aff8a2db2dc7dcc5650cb2c7a7a0d1eb38e2aa2335fdf001e41801e9797 \ - --hash=sha256:7640e86835d44ae118c2916a803d8081f40e214ee18a5a92a0202994ca60a4b4 +django==4.2.15 \ + --hash=sha256:61ee4a130efb8c451ef3467c67ca99fdce400fedd768634efc86a68c18d80d30 \ + --hash=sha256:c77f926b81129493961e19c0e02188f8d07c112a1162df69bfab178ae447f94a # via + # -c src/backend/requirements.txt # django-admin-shell # django-slowtests django-admin-shell==2.0.1 \ --hash=sha256:334a651e53ae4f59d0d279d7ede7dc5ed7a7733d4d093765b447dca5274c7b30 \ --hash=sha256:b129e282ebd581c2099c0504edf081259728b3a504b40c5784d0457b8cb41470 + # via -r src/backend/requirements-dev.in django-querycount==0.8.3 \ --hash=sha256:0782484e8a1bd29498fa0195a67106e47cdcc98fafe80cebb1991964077cb694 + # via -r src/backend/requirements-dev.in django-slowtests==1.1.1 \ --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 -django-test-migrations==1.3.0 \ - --hash=sha256:b42edb1af481e08c9d91c95aa9b373e76e905a931bc19c086ec00a6cb936876e \ - --hash=sha256:b52b29475f9a1bcaa4512f2ec8fad08b5f470cf1cf522e86b7d950252fb6fbf1 -filelock==3.14.0 \ - --hash=sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f \ - --hash=sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a + # via -r src/backend/requirements-dev.in +django-test-migrations==1.4.0 \ + --hash=sha256:294dff98f6d43d020d4046b971bac5339e7c71458a35e9ad6450c388fe16ed6b \ + --hash=sha256:f0c9c92864ed27d0c9a582e92056637e91227f54bd868a50cb9a1726668c563e + # via -r src/backend/requirements-dev.in +filelock==3.15.4 \ + --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ + --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 # via virtualenv identify==2.5.36 \ --hash=sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa \ --hash=sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d # via pre-commit -importlib-metadata==7.0.0 \ - --hash=sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7 \ - --hash=sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67 - # via build +importlib-metadata==7.1.0 \ + --hash=sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570 \ + --hash=sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2 + # via + # -c src/backend/requirements.txt + # build isort==5.13.2 \ --hash=sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109 \ --hash=sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6 -nodeenv==1.8.0 \ - --hash=sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2 \ - --hash=sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec + # via -r src/backend/requirements-dev.in +nodeenv==1.9.1 \ + --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \ + --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9 # via pre-commit -packaging==24.0 \ - --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ - --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 - # via build +packaging==24.1 \ + --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ + --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 + # via + # -c src/backend/requirements.txt + # build pdfminer-six==20231228 \ --hash=sha256:6004da3ad1a7a4d45930cb950393df89b068e73be365a6ff64a838d37bcb08c4 \ --hash=sha256:e8d3c3310e6fbc1fe414090123ab01351634b4ecb021232206c4c9a8ca3e3b8f -pip==24.0 \ - --hash=sha256:ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc \ - --hash=sha256:ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2 + # via -r src/backend/requirements-dev.in +pip==24.2 \ + --hash=sha256:2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2 \ + --hash=sha256:5b5e490b5e9cb275c879595064adce9ebd31b854e3e803740b72f9ccf34a45b8 # via pip-tools pip-tools==7.4.1 \ --hash=sha256:4c690e5fbae2f21e87843e89c26191f0d9454f362d8acdbd695716493ec8b3a9 \ --hash=sha256:864826f5073864450e24dbeeb85ce3920cdfb09848a3d69ebf537b521f14bcc9 -platformdirs==4.2.1 \ - --hash=sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf \ - --hash=sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1 + # via -r src/backend/requirements-dev.in +platformdirs==4.2.2 \ + --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ + --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 # via virtualenv -pre-commit==3.7.0 \ - --hash=sha256:5eae9e10c2b5ac51577c3452ec0a490455c45a0533f7960f993a0d01e59decab \ - --hash=sha256:e209d61b8acdcf742404408531f0c37d49d2c734fd7cff2d6076083d191cb060 +pre-commit==3.7.1 \ + --hash=sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a \ + --hash=sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5 + # via -r src/backend/requirements-dev.in pycparser==2.22 \ --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc - # via cffi + # via + # -c src/backend/requirements.txt + # cffi pyproject-hooks==1.1.0 \ --hash=sha256:4b37730834edbd6bd37f26ece6b44802fb1c1ee2ece0e54ddff8bfc06db86965 \ --hash=sha256:7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2 @@ -371,17 +395,22 @@ pyyaml==6.0.1 \ --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f - # via pre-commit -setuptools==70.0.0 \ - --hash=sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4 \ - --hash=sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0 # via - # nodeenv + # -c src/backend/requirements.txt + # pre-commit +setuptools==72.1.0 \ + --hash=sha256:5a03e1860cf56bb6ef48ce186b0e557fdba433237481a9a625176c2831be15d1 \ + --hash=sha256:8d243eff56d095e5817f796ede6ae32941278f542e0f941867cc05ae52b162ec + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements-dev.in # pip-tools sqlparse==0.5.0 \ --hash=sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93 \ --hash=sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663 - # via django + # via + # -c src/backend/requirements.txt + # django tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f @@ -389,21 +418,24 @@ tomli==2.0.1 \ # build # coverage # pip-tools -typing-extensions==4.11.0 \ - --hash=sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0 \ - --hash=sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a +typing-extensions==4.12.2 \ + --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ + --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 # via + # -c src/backend/requirements.txt # asgiref # django-test-migrations -virtualenv==20.26.1 \ - --hash=sha256:604bfdceaeece392802e6ae48e69cec49168b9c5f4a44e483963f9242eb0e78b \ - --hash=sha256:7aa9982a728ae5892558bff6a2839c00b9ed145523ece2274fad6f414690ae75 +virtualenv==20.26.3 \ + --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ + --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 # via pre-commit wheel==0.43.0 \ --hash=sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85 \ --hash=sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81 # via pip-tools -zipp==3.18.1 \ - --hash=sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b \ - --hash=sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715 - # via importlib-metadata +zipp==3.19.2 \ + --hash=sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19 \ + --hash=sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c + # via + # -c src/backend/requirements.txt + # importlib-metadata diff --git a/src/backend/requirements.in b/src/backend/requirements.in index b0ede62f5e..327047bb49 100644 --- a/src/backend/requirements.in +++ b/src/backend/requirements.in @@ -2,7 +2,7 @@ Django<5.0 # Django package coreapi # API documentation for djangorestframework cryptography>=40.0.0,!=40.0.2 # Core cryptographic functionality -django-allauth # SSO for external providers via OpenID +django-allauth[openid,saml] # SSO for external providers via OpenID django-allauth-2fa # MFA / 2FA django-cleanup # Automated deletion of old / unused uploaded files django-cors-headers # CORS headers extension for DRF @@ -13,7 +13,7 @@ django-filter # Extended filtering options django-flags # Feature flags django-formtools # Form wizard tools django-ical # iCal export for calendar views -django-import-export # Data import / export for admin interface +django-import-export<4.0 # Data import / export for admin interface # FIXED 2024-06-26 see https://github.com/inventree/InvenTree/pull/7521 django-maintenance-mode # Shut down application while reloading etc. django-markdownify # Markdown rendering django-mptt # Modified Preorder Tree Traversal @@ -30,7 +30,7 @@ django-stdimage # Advanced ImageField management django-taggit # Tagging support django-user-sessions # user sessions in DB django-weasyprint # django weasyprint integration -djangorestframework # DRF framework +djangorestframework<3.15 # DRF framework # FIXED 2024-06-26 see https://github.com/inventree/InvenTree/pull/7521 djangorestframework-simplejwt[crypto] # JWT authentication django-xforwardedfor-middleware # IP forwarding metadata dj-rest-auth # Authentication API endpoints diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index 80c816ca37..9ddd6e42e0 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -1,5 +1,5 @@ # This file was autogenerated by uv via the following command: -# uv pip compile src/backend/requirements.in -o src/backend/requirements.txt --python-version=3.9 --no-strip-extras --generate-hashes +# uv pip compile src/backend/requirements.in -o src/backend/requirements.txt --no-strip-extras --generate-hashes asgiref==3.8.1 \ --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47 \ --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 @@ -109,9 +109,9 @@ brotli==1.1.0 \ --hash=sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2 \ --hash=sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064 # via fonttools -certifi==2024.2.2 \ - --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ - --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 +certifi==2024.7.4 \ + --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ + --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 # via # requests # sentry-sdk @@ -266,46 +266,47 @@ charset-normalizer==3.3.2 \ coreapi==2.3.3 \ --hash=sha256:46145fcc1f7017c076a2ef684969b641d18a2991051fddec9458ad3f78ffc1cb \ --hash=sha256:bf39d118d6d3e171f10df9ede5666f63ad80bba9a29a8ec17726a66cf52ee6f3 + # via -r src/backend/requirements.in coreschema==0.0.4 \ --hash=sha256:5e6ef7bf38c1525d5e55a895934ab4273548629f16aed5c0a6caa74ebf45551f \ --hash=sha256:9503506007d482ab0867ba14724b93c18a33b22b6d19fb419ef2d239dd4a1607 # via coreapi -cryptography==42.0.7 \ - --hash=sha256:02c0eee2d7133bdbbc5e24441258d5d2244beb31da5ed19fbb80315f4bbbff55 \ - --hash=sha256:0d563795db98b4cd57742a78a288cdbdc9daedac29f2239793071fe114f13785 \ - --hash=sha256:16268d46086bb8ad5bf0a2b5544d8a9ed87a0e33f5e77dd3c3301e63d941a83b \ - --hash=sha256:1a58839984d9cb34c855197043eaae2c187d930ca6d644612843b4fe8513c886 \ - --hash=sha256:2954fccea107026512b15afb4aa664a5640cd0af630e2ee3962f2602693f0c82 \ - --hash=sha256:2e47577f9b18723fa294b0ea9a17d5e53a227867a0a4904a1a076d1646d45ca1 \ - --hash=sha256:31adb7d06fe4383226c3e963471f6837742889b3c4caa55aac20ad951bc8ffda \ - --hash=sha256:3577d029bc3f4827dd5bf8bf7710cac13527b470bbf1820a3f394adb38ed7d5f \ - --hash=sha256:36017400817987670037fbb0324d71489b6ead6231c9604f8fc1f7d008087c68 \ - --hash=sha256:362e7197754c231797ec45ee081f3088a27a47c6c01eff2ac83f60f85a50fe60 \ - --hash=sha256:3de9a45d3b2b7d8088c3fbf1ed4395dfeff79d07842217b38df14ef09ce1d8d7 \ - --hash=sha256:4f698edacf9c9e0371112792558d2f705b5645076cc0aaae02f816a0171770fd \ - --hash=sha256:5482e789294854c28237bba77c4c83be698be740e31a3ae5e879ee5444166582 \ - --hash=sha256:5e44507bf8d14b36b8389b226665d597bc0f18ea035d75b4e53c7b1ea84583cc \ - --hash=sha256:779245e13b9a6638df14641d029add5dc17edbef6ec915688f3acb9e720a5858 \ - --hash=sha256:789caea816c6704f63f6241a519bfa347f72fbd67ba28d04636b7c6b7da94b0b \ - --hash=sha256:7f8b25fa616d8b846aef64b15c606bb0828dbc35faf90566eb139aa9cff67af2 \ - --hash=sha256:8cb8ce7c3347fcf9446f201dc30e2d5a3c898d009126010cbd1f443f28b52678 \ - --hash=sha256:93a3209f6bb2b33e725ed08ee0991b92976dfdcf4e8b38646540674fc7508e13 \ - --hash=sha256:a3a5ac8b56fe37f3125e5b72b61dcde43283e5370827f5233893d461b7360cd4 \ - --hash=sha256:a47787a5e3649008a1102d3df55424e86606c9bae6fb77ac59afe06d234605f8 \ - --hash=sha256:a79165431551042cc9d1d90e6145d5d0d3ab0f2d66326c201d9b0e7f5bf43604 \ - --hash=sha256:a987f840718078212fdf4504d0fd4c6effe34a7e4740378e59d47696e8dfb477 \ - --hash=sha256:a9bc127cdc4ecf87a5ea22a2556cab6c7eda2923f84e4f3cc588e8470ce4e42e \ - --hash=sha256:bd13b5e9b543532453de08bcdc3cc7cebec6f9883e886fd20a92f26940fd3e7a \ - --hash=sha256:c65f96dad14f8528a447414125e1fc8feb2ad5a272b8f68477abbcc1ea7d94b9 \ - --hash=sha256:d8e3098721b84392ee45af2dd554c947c32cc52f862b6a3ae982dbb90f577f14 \ - --hash=sha256:e6b79d0adb01aae87e8a44c2b64bc3f3fe59515280e00fb6d57a7267a2583cda \ - --hash=sha256:e6b8f1881dac458c34778d0a424ae5769de30544fc678eac51c1c8bb2183e9da \ - --hash=sha256:e9b2a6309f14c0497f348d08a065d52f3020656f675819fc405fb63bbcd26562 \ - --hash=sha256:ecbfbc00bf55888edda9868a4cf927205de8499e7fabe6c050322298382953f2 \ - --hash=sha256:efd0bf5205240182e0f13bcaea41be4fdf5c22c5129fc7ced4a0282ac86998c9 +cryptography==42.0.8 \ + --hash=sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad \ + --hash=sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583 \ + --hash=sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b \ + --hash=sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c \ + --hash=sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1 \ + --hash=sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648 \ + --hash=sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949 \ + --hash=sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba \ + --hash=sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c \ + --hash=sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9 \ + --hash=sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d \ + --hash=sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c \ + --hash=sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e \ + --hash=sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2 \ + --hash=sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d \ + --hash=sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7 \ + --hash=sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70 \ + --hash=sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2 \ + --hash=sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7 \ + --hash=sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14 \ + --hash=sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe \ + --hash=sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e \ + --hash=sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71 \ + --hash=sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961 \ + --hash=sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7 \ + --hash=sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c \ + --hash=sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28 \ + --hash=sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842 \ + --hash=sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902 \ + --hash=sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801 \ + --hash=sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a \ + --hash=sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e # via + # -r src/backend/requirements.in # djangorestframework-simplejwt - # pyjwt cssselect2==0.7.0 \ --hash=sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a \ --hash=sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969 @@ -329,10 +330,12 @@ diff-match-patch==20230430 \ # via django-import-export dj-rest-auth==6.0.0 \ --hash=sha256:760b45f3a07cd6182e6a20fe07d0c55230c5f950167df724d7914d0dd8c50133 -django==4.2.12 \ - --hash=sha256:6a6b4aff8a2db2dc7dcc5650cb2c7a7a0d1eb38e2aa2335fdf001e41801e9797 \ - --hash=sha256:7640e86835d44ae118c2916a803d8081f40e214ee18a5a92a0202994ca60a4b4 + # via -r src/backend/requirements.in +django==4.2.15 \ + --hash=sha256:61ee4a130efb8c451ef3467c67ca99fdce400fedd768634efc86a68c18d80d30 \ + --hash=sha256:c77f926b81129493961e19c0e02188f8d07c112a1162df69bfab178ae447f94a # via + # -r src/backend/requirements.in # dj-rest-auth # django-allauth # django-allauth-2fa @@ -363,42 +366,55 @@ django==4.2.12 \ # djangorestframework # djangorestframework-simplejwt # drf-spectacular -django-allauth==0.61.1 \ - --hash=sha256:5b4ae515ea74f54f0041210692eee10c309ad15ddbbd03d3620693c75e3f7945 - # via django-allauth-2fa +django-allauth[openid, saml]==0.63.3 \ + --hash=sha256:2374164c468a309e6badf70bc3405136df6036f24a20a13387f2a063066bdaa9 + # via + # -r src/backend/requirements.in + # django-allauth-2fa django-allauth-2fa==0.11.1 \ --hash=sha256:02ffdf1025836f072c2f6ec0964494589cf1d52362f663f9ff6d9ca61a7b6962 \ --hash=sha256:2f2d61dd488f66ad45e59780b061f5abe96caea9c3466e3ee4ea50ea1faebef6 + # via -r src/backend/requirements.in django-cleanup==8.1.0 \ --hash=sha256:70df905076a44e7a111b31198199af633dee08876e199e6dce36ca8dd6b8b10f \ --hash=sha256:7903873ea73b3f7e61e055340d27dba49b70634f60c87a573ad748e172836458 -django-cors-headers==4.3.1 \ - --hash=sha256:0b1fd19297e37417fc9f835d39e45c8c642938ddba1acce0c1753d3edef04f36 \ - --hash=sha256:0bf65ef45e606aff1994d35503e6b677c0b26cafff6506f8fd7187f3be840207 + # via -r src/backend/requirements.in +django-cors-headers==4.4.0 \ + --hash=sha256:5c6e3b7fe870876a1efdfeb4f433782c3524078fa0dc9e0195f6706ce7a242f6 \ + --hash=sha256:92cf4633e22af67a230a1456cb1b7a02bb213d6536d2dcb2a4a24092ea9cebc2 + # via -r src/backend/requirements.in django-crispy-forms==1.14.0 \ --hash=sha256:35887b8851a931374dd697207a8f56c57a9c5cb9dbf0b9fa54314da5666cea5b \ --hash=sha256:bc4d2037f6de602d39c0bc452ac3029d1f5d65e88458872cc4dbc01c3a400604 + # via -r src/backend/requirements.in django-dbbackup==4.1.0 \ --hash=sha256:c411d38d0f8e60ab3254017278c14ebd75d4001b5634fc73be7fbe8a5260583b \ --hash=sha256:c539b5246b429a22a8efadbab3719ee6b8eda45c66c4ff6592056c590d51c782 + # via -r src/backend/requirements.in django-error-report-2==0.4.2 \ --hash=sha256:1dd99c497af09b7ea99f5fbaf910501838150a9d5390796ea00e187bc62f6c1b \ --hash=sha256:603e1e3b24d01bbfeab6379af948893b2b034031c80fa8b45cf1c4735341c04b + # via -r src/backend/requirements.in django-filter==24.2 \ --hash=sha256:48e5fc1da3ccd6ca0d5f9bb550973518ce977a4edde9d2a8a154a7f4f0b9f96e \ --hash=sha256:df2ee9857e18d38bed203c8745f62a803fa0f31688c9fe6f8e868120b1848e48 + # via -r src/backend/requirements.in django-flags==5.0.13 \ --hash=sha256:52df74b86d93f5cb402190ad26b68a5ba0f127e9e016189f1a6f2e8ba3c06a42 \ --hash=sha256:ff6940cf37e07d6d0c4ac28c5420c8cfc478b62541473dba4aa02d600f7db9fc + # via -r src/backend/requirements.in django-formtools==2.5.1 \ --hash=sha256:47cb34552c6efca088863d693284d04fc36eaaf350eb21e1a1d935e0df523c93 \ --hash=sha256:bce9b64eda52cc1eef6961cc649cf75aacd1a707c2fff08d6c3efcbc8e7e761a + # via -r src/backend/requirements.in django-ical==1.9.2 \ --hash=sha256:44c9b6fa90d09f25e9ebaa91ed9eb007f079afbc23d6aac909cfc18188a8e90c \ --hash=sha256:74a16bca05735f91a00120cad7250f3c3aa292a9f698a6cfdc544a922c11de70 -django-import-export==3.3.7 \ - --hash=sha256:39a4216c26a2dba6429b64c68b3fe282a6279bb71afb4015c13df0696bdbb4cd \ - --hash=sha256:dffedd53bed33cfcceb3b2f13d4fd93a21826f9a2ae37b9926a1e1f4be24bcb9 + # via -r src/backend/requirements.in +django-import-export==3.3.9 \ + --hash=sha256:16797965e93a8001fe812c61e3b71fb858c57c1bd16da195fe276d6de685348e \ + --hash=sha256:dd6cabc08ed6d1bd37a392e7fb542bd7d196b615c800168f5c69f0f55f49b103 + # via -r src/backend/requirements.in django-js-asset==2.2.0 \ --hash=sha256:0c57a82cae2317e83951d956110ce847f58ff0cdc24e314dbc18b35033917e94 \ --hash=sha256:7ef3e858e13d06f10799b56eea62b1e76706f42cf4e709be4e13356bc0ae30d8 @@ -406,15 +422,19 @@ django-js-asset==2.2.0 \ django-maintenance-mode==0.21.1 \ --hash=sha256:b79afddb671c59972ae542e4fafbc99117d2d37991843eaaa837e328eed12b1b \ --hash=sha256:c02fff0e386b7f8b2ab54479d3a0d336ae34014da22a7a2365ca96d5a2c1db94 -django-markdownify==0.9.3 \ - --hash=sha256:acf42614a418aef55535a66d4b3426b181cf8c8f990e265f453df900c3ad3d25 \ - --hash=sha256:df00291bc338400b9ef999402751fc12c30623d266b7c04e43336d27d0eadee6 + # via -r src/backend/requirements.in +django-markdownify==0.9.5 \ + --hash=sha256:2c4ae44e386c209453caf5e9ea1b74f64535985d338ad2d5ad5e7089cc94be86 \ + --hash=sha256:34c34eba4a797282a5c5bd97b13cec84d6a4c0673ad47ce1c1d000d74dd8d4ab + # via -r src/backend/requirements.in django-money==3.2.0 \ --hash=sha256:2e4174b47993780bf4b61ad3fa0a66ebe140da42fdbe68b628c7ba9788287214 \ --hash=sha256:3099f906407175af06b56ef3ff5c250e2fc525ff00f50d42f77b98597e625459 + # via -r src/backend/requirements.in django-mptt==0.16.0 \ --hash=sha256:56c9606bf0b329b5f5afd55dd8bfd073612ea1d5999b10903b09de62bee84c8e \ --hash=sha256:8716849ba3318d94e2e100ed0923a05c1ffdf8195f8472b690dbaf737d2af3b5 + # via -r src/backend/requirements.in django-otp==1.5.0 \ --hash=sha256:e7142139f1e9686be5f396669a3d3d61178cd9b3e9de9de5933888668908b46b \ --hash=sha256:e88871d2d3b333a86c2cd0cb721be8098d4d6344cb220315a500e5a5c8254295 @@ -425,9 +445,11 @@ django-picklefield==3.2 \ # via django-q2 django-q-sentry==0.1.6 \ --hash=sha256:9b8b4d7fad253a7d9a47f2c2ab0d9dea83078b7ef45c8849dbb1e4176ef8d050 + # via -r src/backend/requirements.in django-q2==1.6.2 \ --hash=sha256:c2d75552c80b83ca0d8c0b0db7db4f17e9f43ee131a46d0ddd514c5f5fc603cb \ --hash=sha256:cd83c16b5791cd99f83a8d106d2447305d73c6c8ed8ec22c7cb954fe0e814284 + # via -r src/backend/requirements.in django-recurrence==1.11.1 \ --hash=sha256:0c65f30872599b5813a9bab6952dada23c55894f28674490a753ada559f14bc5 \ --hash=sha256:9c89444e651a78c587f352c5f63eda48ab2f53996347b9fcdff2d248f4fcff70 @@ -435,41 +457,53 @@ django-recurrence==1.11.1 \ django-redis==5.4.0 \ --hash=sha256:6a02abaa34b0fea8bf9b707d2c363ab6adc7409950b2db93602e6cb292818c42 \ --hash=sha256:ebc88df7da810732e2af9987f7f426c96204bf89319df4c6da6ca9a2942edd5b + # via -r src/backend/requirements.in django-sesame==3.2.2 \ --hash=sha256:523ebd4d04e28c897c262f25b78b6fd8f37e11cdca6e277fdc8bf496bd686cf5 \ --hash=sha256:5d753a309166356b6a0d7fc047690943b9e80b4aa7952f1a6400fe6ce60d573c + # via -r src/backend/requirements.in django-sql-utils==0.7.0 \ --hash=sha256:9371ff28eaf326836a7c52887259123cdd3fbffb7b738e42ae1a21258be0feb6 \ --hash=sha256:fefc40c826896b60fcf33e35b6e30b523fc958955a16006438cd3ba6d795a532 + # via -r src/backend/requirements.in django-sslserver==0.22 \ --hash=sha256:c598a363d2ccdc2421c08ddb3d8b0973f80e8e47a3a5b74e4a2896f21c2947c5 + # via -r src/backend/requirements.in django-stdimage==6.0.2 \ --hash=sha256:880ab14828be56b53f711c3afae83c219ddd5d9af00850626736feb48382bf7f \ --hash=sha256:9a73f7da48c48074580e2b032d5bdb7164935dbe4b9dc4fb88a7e112f3d521c8 + # via -r src/backend/requirements.in django-taggit==5.0.1 \ --hash=sha256:a0ca8a28b03c4b26c2630fd762cb76ec39b5e41abf727a7b66f897a625c5e647 \ --hash=sha256:edcd7db1e0f35c304e082a2f631ddac2e16ef5296029524eb792af7430cab4cc + # via -r src/backend/requirements.in django-user-sessions==2.0.0 \ --hash=sha256:0965554279f556b47062965609fa08b3ae45bbc581001dbe84b2ea599cc67748 \ --hash=sha256:41b8b1ebeb4736065efbc96437c9cfbf491c39e10fd547a76b98f2312e11fa3e + # via -r src/backend/requirements.in django-weasyprint==2.3.0 \ --hash=sha256:2f849e15bfd6c1b2a58512097b9042eddf3533651d37d2e096cd6f7d8be6442b \ --hash=sha256:807cb3b16332123d97c8bbe2ac9c70286103fe353235351803ffd33b67284735 + # via -r src/backend/requirements.in django-xforwardedfor-middleware==2.0 \ --hash=sha256:16fd1cb27f33a5541b6f3e0b43afb1b7334a76f27a1255b69e14ec5c440f0b24 + # via -r src/backend/requirements.in djangorestframework==3.14.0 \ --hash=sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8 \ --hash=sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08 # via + # -r src/backend/requirements.in # dj-rest-auth # djangorestframework-simplejwt # drf-spectacular djangorestframework-simplejwt[crypto]==5.3.1 \ --hash=sha256:381bc966aa46913905629d472cd72ad45faa265509764e20ffd440164c88d220 \ --hash=sha256:6c4bd37537440bc439564ebf7d6085e74c5411485197073f508ebdfa34bc9fae + # via -r src/backend/requirements.in drf-spectacular==0.27.2 \ --hash=sha256:a199492f2163c4101055075ebdbb037d59c6e0030692fc83a1a8c0fc65929981 \ --hash=sha256:b1c04bf8b2fbbeaf6f59414b4ea448c8787aba4d32f76055c3b13335cf7ec37b + # via -r src/backend/requirements.in dulwich==0.22.1 \ --hash=sha256:0d72a88c7af8fafa14c8743e8923c8d46bd0b850a0b7f5e34eb49201f1ead88e \ --hash=sha256:0ea4c5feedd35e8bde175a9ab91ef6705c3cef5ee209eeb2f67dd0b59ff1825f \ @@ -518,6 +552,7 @@ dulwich==0.22.1 \ --hash=sha256:e90b8a2f24149c5803b733a24f1a016a2943b1f5a9ab2360db545e4638354c35 \ --hash=sha256:f9e10678fe0692c5167553981d97cbe342ed055c49016aef10da336e2962b1f2 \ --hash=sha256:fd51e77ff1b4ca08bc9b09b85646a3e77f275827b7b30180d76d769ce608e64d + # via -r src/backend/requirements.in et-xmlfile==1.1.0 \ --hash=sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c \ --hash=sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada @@ -525,122 +560,126 @@ et-xmlfile==1.1.0 \ feedparser==6.0.11 \ --hash=sha256:0be7ee7b395572b19ebeb1d6aafb0028dee11169f1c934e0ed67d54992f4ad45 \ --hash=sha256:c9d0407b64c6f2a065d0ebb292c2b35c01050cc0dc33757461aaabdc4c4184d5 -fonttools[woff]==4.51.0 \ - --hash=sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636 \ - --hash=sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce \ - --hash=sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f \ - --hash=sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1 \ - --hash=sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc \ - --hash=sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f \ - --hash=sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e \ - --hash=sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716 \ - --hash=sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15 \ - --hash=sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77 \ - --hash=sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034 \ - --hash=sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba \ - --hash=sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7 \ - --hash=sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55 \ - --hash=sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a \ - --hash=sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0 \ - --hash=sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b \ - --hash=sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671 \ - --hash=sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a \ - --hash=sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039 \ - --hash=sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74 \ - --hash=sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836 \ - --hash=sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2 \ - --hash=sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308 \ - --hash=sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2 \ - --hash=sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5 \ - --hash=sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1 \ - --hash=sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438 \ - --hash=sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74 \ - --hash=sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f \ - --hash=sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097 \ - --hash=sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e \ - --hash=sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037 \ - --hash=sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1 \ - --hash=sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051 \ - --hash=sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b \ - --hash=sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed \ - --hash=sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68 \ - --hash=sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14 \ - --hash=sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5 \ - --hash=sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e \ - --hash=sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936 + # via -r src/backend/requirements.in +fonttools[woff]==4.53.0 \ + --hash=sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d \ + --hash=sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64 \ + --hash=sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2 \ + --hash=sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4 \ + --hash=sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6 \ + --hash=sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b \ + --hash=sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f \ + --hash=sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380 \ + --hash=sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e \ + --hash=sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749 \ + --hash=sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20 \ + --hash=sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0 \ + --hash=sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4 \ + --hash=sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5 \ + --hash=sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206 \ + --hash=sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9 \ + --hash=sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac \ + --hash=sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1 \ + --hash=sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce \ + --hash=sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4 \ + --hash=sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12 \ + --hash=sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca \ + --hash=sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d \ + --hash=sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068 \ + --hash=sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796 \ + --hash=sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec \ + --hash=sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea \ + --hash=sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f \ + --hash=sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005 \ + --hash=sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2 \ + --hash=sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06 \ + --hash=sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109 \ + --hash=sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002 \ + --hash=sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9 \ + --hash=sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a \ + --hash=sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68 \ + --hash=sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6 \ + --hash=sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161 \ + --hash=sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd \ + --hash=sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d \ + --hash=sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee \ + --hash=sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af # via weasyprint -googleapis-common-protos==1.63.0 \ - --hash=sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e \ - --hash=sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632 +googleapis-common-protos==1.63.2 \ + --hash=sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945 \ + --hash=sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87 # via # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -grpcio==1.63.0 \ - --hash=sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3 \ - --hash=sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094 \ - --hash=sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b \ - --hash=sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d \ - --hash=sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2 \ - --hash=sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172 \ - --hash=sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d \ - --hash=sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c \ - --hash=sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b \ - --hash=sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3 \ - --hash=sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9 \ - --hash=sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357 \ - --hash=sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61 \ - --hash=sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5 \ - --hash=sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a \ - --hash=sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280 \ - --hash=sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434 \ - --hash=sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce \ - --hash=sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d \ - --hash=sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c \ - --hash=sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f \ - --hash=sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f \ - --hash=sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57 \ - --hash=sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f \ - --hash=sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0 \ - --hash=sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2 \ - --hash=sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0 \ - --hash=sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a \ - --hash=sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6 \ - --hash=sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d \ - --hash=sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85 \ - --hash=sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a \ - --hash=sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d \ - --hash=sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f \ - --hash=sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb \ - --hash=sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86 \ - --hash=sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7 \ - --hash=sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda \ - --hash=sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d \ - --hash=sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434 \ - --hash=sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91 \ - --hash=sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a \ - --hash=sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3 \ - --hash=sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3 \ - --hash=sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1 \ - --hash=sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae - # via opentelemetry-exporter-otlp-proto-grpc +grpcio==1.64.1 \ + --hash=sha256:03b43d0ccf99c557ec671c7dede64f023c7da9bb632ac65dbc57f166e4970040 \ + --hash=sha256:0a12ddb1678ebc6a84ec6b0487feac020ee2b1659cbe69b80f06dbffdb249122 \ + --hash=sha256:0a2813093ddb27418a4c99f9b1c223fab0b053157176a64cc9db0f4557b69bd9 \ + --hash=sha256:0cc79c982ccb2feec8aad0e8fb0d168bcbca85bc77b080d0d3c5f2f15c24ea8f \ + --hash=sha256:1257b76748612aca0f89beec7fa0615727fd6f2a1ad580a9638816a4b2eb18fd \ + --hash=sha256:1262402af5a511c245c3ae918167eca57342c72320dffae5d9b51840c4b2f86d \ + --hash=sha256:19264fc964576ddb065368cae953f8d0514ecc6cb3da8903766d9fb9d4554c33 \ + --hash=sha256:198908f9b22e2672a998870355e226a725aeab327ac4e6ff3a1399792ece4762 \ + --hash=sha256:1de403fc1305fd96cfa75e83be3dee8538f2413a6b1685b8452301c7ba33c294 \ + --hash=sha256:20405cb8b13fd779135df23fabadc53b86522d0f1cba8cca0e87968587f50650 \ + --hash=sha256:2981c7365a9353f9b5c864595c510c983251b1ab403e05b1ccc70a3d9541a73b \ + --hash=sha256:2c3c1b90ab93fed424e454e93c0ed0b9d552bdf1b0929712b094f5ecfe7a23ad \ + --hash=sha256:39b9d0acaa8d835a6566c640f48b50054f422d03e77e49716d4c4e8e279665a1 \ + --hash=sha256:3b64ae304c175671efdaa7ec9ae2cc36996b681eb63ca39c464958396697daff \ + --hash=sha256:4657d24c8063e6095f850b68f2d1ba3b39f2b287a38242dcabc166453e950c59 \ + --hash=sha256:4d6dab6124225496010bd22690f2d9bd35c7cbb267b3f14e7a3eb05c911325d4 \ + --hash=sha256:55260032b95c49bee69a423c2f5365baa9369d2f7d233e933564d8a47b893027 \ + --hash=sha256:55697ecec192bc3f2f3cc13a295ab670f51de29884ca9ae6cd6247df55df2502 \ + --hash=sha256:5841dd1f284bd1b3d8a6eca3a7f062b06f1eec09b184397e1d1d43447e89a7ae \ + --hash=sha256:58b1041e7c870bb30ee41d3090cbd6f0851f30ae4eb68228955d973d3efa2e61 \ + --hash=sha256:5e42634a989c3aa6049f132266faf6b949ec2a6f7d302dbb5c15395b77d757eb \ + --hash=sha256:5e56462b05a6f860b72f0fa50dca06d5b26543a4e88d0396259a07dc30f4e5aa \ + --hash=sha256:5f8b75f64d5d324c565b263c67dbe4f0af595635bbdd93bb1a88189fc62ed2e5 \ + --hash=sha256:62b4e6eb7bf901719fce0ca83e3ed474ae5022bb3827b0a501e056458c51c0a1 \ + --hash=sha256:6503b64c8b2dfad299749cad1b595c650c91e5b2c8a1b775380fcf8d2cbba1e9 \ + --hash=sha256:6c024ffc22d6dc59000faf8ad781696d81e8e38f4078cb0f2630b4a3cf231a90 \ + --hash=sha256:73819689c169417a4f978e562d24f2def2be75739c4bed1992435d007819da1b \ + --hash=sha256:75dbbf415026d2862192fe1b28d71f209e2fd87079d98470db90bebe57b33179 \ + --hash=sha256:8caee47e970b92b3dd948371230fcceb80d3f2277b3bf7fbd7c0564e7d39068e \ + --hash=sha256:8d51dd1c59d5fa0f34266b80a3805ec29a1f26425c2a54736133f6d87fc4968a \ + --hash=sha256:940e3ec884520155f68a3b712d045e077d61c520a195d1a5932c531f11883489 \ + --hash=sha256:a011ac6c03cfe162ff2b727bcb530567826cec85eb8d4ad2bfb4bd023287a52d \ + --hash=sha256:a3a035c37ce7565b8f4f35ff683a4db34d24e53dc487e47438e434eb3f701b2a \ + --hash=sha256:a5e771d0252e871ce194d0fdcafd13971f1aae0ddacc5f25615030d5df55c3a2 \ + --hash=sha256:ac15b6c2c80a4d1338b04d42a02d376a53395ddf0ec9ab157cbaf44191f3ffdd \ + --hash=sha256:b1a82e0b9b3022799c336e1fc0f6210adc019ae84efb7321d668129d28ee1efb \ + --hash=sha256:bac71b4b28bc9af61efcdc7630b166440bbfbaa80940c9a697271b5e1dabbc61 \ + --hash=sha256:bbc5b1d78a7822b0a84c6f8917faa986c1a744e65d762ef6d8be9d75677af2ca \ + --hash=sha256:c1a786ac592b47573a5bb7e35665c08064a5d77ab88a076eec11f8ae86b3e3f6 \ + --hash=sha256:c84ad903d0d94311a2b7eea608da163dace97c5fe9412ea311e72c3684925602 \ + --hash=sha256:d4d29cc612e1332237877dfa7fe687157973aab1d63bd0f84cf06692f04c0367 \ + --hash=sha256:e3d9f8d1221baa0ced7ec7322a981e28deb23749c76eeeb3d33e18b72935ab62 \ + --hash=sha256:e7cd5c1325f6808b8ae31657d281aadb2a51ac11ab081ae335f4f7fc44c1721d \ + --hash=sha256:ed6091fa0adcc7e4ff944090cf203a52da35c37a130efa564ded02b7aff63bcd \ + --hash=sha256:ee73a2f5ca4ba44fa33b4d7d2c71e2c8a9e9f78d53f6507ad68e7d2ad5f64a22 \ + --hash=sha256:f10193c69fc9d3d726e83bbf0f3d316f1847c3071c8c93d8090cf5f326b14309 + # via + # -r src/backend/requirements.in + # opentelemetry-exporter-otlp-proto-grpc gunicorn==22.0.0 \ --hash=sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9 \ --hash=sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63 + # via -r src/backend/requirements.in html5lib==1.1 \ --hash=sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d \ --hash=sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f # via weasyprint -icalendar==5.0.12 \ - --hash=sha256:73f9be68477722c98320621400943705dcfdbbc6c2b565253f72d3f87e514db8 \ - --hash=sha256:d873bb859df9c6d0e597b16d247436e0f83f7ac1b90a06429b8393fe8afeba40 +icalendar==5.0.13 \ + --hash=sha256:5ded5415e2e1edef5ab230024a75878a7a81d518a3b1ae4f34bf20b173c84dc2 \ + --hash=sha256:92799fde8cce0b61daa8383593836d1e19136e504fa1671f471f98be9b029706 # via django-ical idna==3.7 \ --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 # via requests -importlib-metadata==7.0.0 \ - --hash=sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7 \ - --hash=sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67 +importlib-metadata==7.1.0 \ + --hash=sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570 \ + --hash=sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2 # via # django-q2 # markdown @@ -649,6 +688,10 @@ inflection==0.5.1 \ --hash=sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417 \ --hash=sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2 # via drf-spectacular +isodate==0.6.1 \ + --hash=sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96 \ + --hash=sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9 + # via python3-saml itypes==1.2.0 \ --hash=sha256:03da6872ca89d29aef62773672b2d408f490f80db48b23079a4b194c86dd04c6 \ --hash=sha256:af886f129dea4a2a1e3d36595a2d139589e4dd287f5cab0b40e799ee81570ff1 @@ -665,6 +708,152 @@ jsonschema-specifications==2023.12.1 \ --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c # via jsonschema +lxml==5.2.2 \ + --hash=sha256:02437fb7308386867c8b7b0e5bc4cd4b04548b1c5d089ffb8e7b31009b961dc3 \ + --hash=sha256:02f6a8eb6512fdc2fd4ca10a49c341c4e109aa6e9448cc4859af5b949622715a \ + --hash=sha256:05f8757b03208c3f50097761be2dea0aba02e94f0dc7023ed73a7bb14ff11eb0 \ + --hash=sha256:06668e39e1f3c065349c51ac27ae430719d7806c026fec462e5693b08b95696b \ + --hash=sha256:07542787f86112d46d07d4f3c4e7c760282011b354d012dc4141cc12a68cef5f \ + --hash=sha256:08ea0f606808354eb8f2dfaac095963cb25d9d28e27edcc375d7b30ab01abbf6 \ + --hash=sha256:0969e92af09c5687d769731e3f39ed62427cc72176cebb54b7a9d52cc4fa3b73 \ + --hash=sha256:0a028b61a2e357ace98b1615fc03f76eb517cc028993964fe08ad514b1e8892d \ + --hash=sha256:0b3f5016e00ae7630a4b83d0868fca1e3d494c78a75b1c7252606a3a1c5fc2ad \ + --hash=sha256:13e69be35391ce72712184f69000cda04fc89689429179bc4c0ae5f0b7a8c21b \ + --hash=sha256:16a8326e51fcdffc886294c1e70b11ddccec836516a343f9ed0f82aac043c24a \ + --hash=sha256:19b4e485cd07b7d83e3fe3b72132e7df70bfac22b14fe4bf7a23822c3a35bff5 \ + --hash=sha256:1a2569a1f15ae6c8c64108a2cd2b4a858fc1e13d25846be0666fc144715e32ab \ + --hash=sha256:1a7aca7964ac4bb07680d5c9d63b9d7028cace3e2d43175cb50bba8c5ad33316 \ + --hash=sha256:1b590b39ef90c6b22ec0be925b211298e810b4856909c8ca60d27ffbca6c12e6 \ + --hash=sha256:1d8a701774dfc42a2f0b8ccdfe7dbc140500d1049e0632a611985d943fcf12df \ + --hash=sha256:1e275ea572389e41e8b039ac076a46cb87ee6b8542df3fff26f5baab43713bca \ + --hash=sha256:2304d3c93f2258ccf2cf7a6ba8c761d76ef84948d87bf9664e14d203da2cd264 \ + --hash=sha256:23441e2b5339bc54dc949e9e675fa35efe858108404ef9aa92f0456929ef6fe8 \ + --hash=sha256:23cfafd56887eaed93d07bc4547abd5e09d837a002b791e9767765492a75883f \ + --hash=sha256:28bf95177400066596cdbcfc933312493799382879da504633d16cf60bba735b \ + --hash=sha256:2eb2227ce1ff998faf0cd7fe85bbf086aa41dfc5af3b1d80867ecfe75fb68df3 \ + --hash=sha256:2fb0ba3e8566548d6c8e7dd82a8229ff47bd8fb8c2da237607ac8e5a1b8312e5 \ + --hash=sha256:303f540ad2dddd35b92415b74b900c749ec2010e703ab3bfd6660979d01fd4ed \ + --hash=sha256:339ee4a4704bc724757cd5dd9dc8cf4d00980f5d3e6e06d5847c1b594ace68ab \ + --hash=sha256:33ce9e786753743159799fdf8e92a5da351158c4bfb6f2db0bf31e7892a1feb5 \ + --hash=sha256:343ab62e9ca78094f2306aefed67dcfad61c4683f87eee48ff2fd74902447726 \ + --hash=sha256:34e17913c431f5ae01d8658dbf792fdc457073dcdfbb31dc0cc6ab256e664a8d \ + --hash=sha256:364d03207f3e603922d0d3932ef363d55bbf48e3647395765f9bfcbdf6d23632 \ + --hash=sha256:38b67afb0a06b8575948641c1d6d68e41b83a3abeae2ca9eed2ac59892b36706 \ + --hash=sha256:3a745cc98d504d5bd2c19b10c79c61c7c3df9222629f1b6210c0368177589fb8 \ + --hash=sha256:3b019d4ee84b683342af793b56bb35034bd749e4cbdd3d33f7d1107790f8c472 \ + --hash=sha256:3b6a30a9ab040b3f545b697cb3adbf3696c05a3a68aad172e3fd7ca73ab3c835 \ + --hash=sha256:3d1e35572a56941b32c239774d7e9ad724074d37f90c7a7d499ab98761bd80cf \ + --hash=sha256:3d98de734abee23e61f6b8c2e08a88453ada7d6486dc7cdc82922a03968928db \ + --hash=sha256:453d037e09a5176d92ec0fd282e934ed26d806331a8b70ab431a81e2fbabf56d \ + --hash=sha256:45f9494613160d0405682f9eee781c7e6d1bf45f819654eb249f8f46a2c22545 \ + --hash=sha256:4820c02195d6dfb7b8508ff276752f6b2ff8b64ae5d13ebe02e7667e035000b9 \ + --hash=sha256:49095a38eb333aaf44c06052fd2ec3b8f23e19747ca7ec6f6c954ffea6dbf7be \ + --hash=sha256:4aefd911793b5d2d7a921233a54c90329bf3d4a6817dc465f12ffdfe4fc7b8fe \ + --hash=sha256:4bc6cb140a7a0ad1f7bc37e018d0ed690b7b6520ade518285dc3171f7a117905 \ + --hash=sha256:4c30a2f83677876465f44c018830f608fa3c6a8a466eb223535035fbc16f3438 \ + --hash=sha256:50127c186f191b8917ea2fb8b206fbebe87fd414a6084d15568c27d0a21d60db \ + --hash=sha256:50ccb5d355961c0f12f6cf24b7187dbabd5433f29e15147a67995474f27d1776 \ + --hash=sha256:519895c99c815a1a24a926d5b60627ce5ea48e9f639a5cd328bda0515ea0f10c \ + --hash=sha256:54401c77a63cc7d6dc4b4e173bb484f28a5607f3df71484709fe037c92d4f0ed \ + --hash=sha256:546cf886f6242dff9ec206331209db9c8e1643ae642dea5fdbecae2453cb50fd \ + --hash=sha256:55ce6b6d803890bd3cc89975fca9de1dff39729b43b73cb15ddd933b8bc20484 \ + --hash=sha256:56793b7a1a091a7c286b5f4aa1fe4ae5d1446fe742d00cdf2ffb1077865db10d \ + --hash=sha256:57f0a0bbc9868e10ebe874e9f129d2917750adf008fe7b9c1598c0fbbfdde6a6 \ + --hash=sha256:5b8c041b6265e08eac8a724b74b655404070b636a8dd6d7a13c3adc07882ef30 \ + --hash=sha256:5e097646944b66207023bc3c634827de858aebc226d5d4d6d16f0b77566ea182 \ + --hash=sha256:60499fe961b21264e17a471ec296dcbf4365fbea611bf9e303ab69db7159ce61 \ + --hash=sha256:610b5c77428a50269f38a534057444c249976433f40f53e3b47e68349cca1425 \ + --hash=sha256:625e3ef310e7fa3a761d48ca7ea1f9d8718a32b1542e727d584d82f4453d5eeb \ + --hash=sha256:657a972f46bbefdbba2d4f14413c0d079f9ae243bd68193cb5061b9732fa54c1 \ + --hash=sha256:69ab77a1373f1e7563e0fb5a29a8440367dec051da6c7405333699d07444f511 \ + --hash=sha256:6a520b4f9974b0a0a6ed73c2154de57cdfd0c8800f4f15ab2b73238ffed0b36e \ + --hash=sha256:6d68ce8e7b2075390e8ac1e1d3a99e8b6372c694bbe612632606d1d546794207 \ + --hash=sha256:6dcc3d17eac1df7859ae01202e9bb11ffa8c98949dcbeb1069c8b9a75917e01b \ + --hash=sha256:6dfdc2bfe69e9adf0df4915949c22a25b39d175d599bf98e7ddf620a13678585 \ + --hash=sha256:739e36ef7412b2bd940f75b278749106e6d025e40027c0b94a17ef7968d55d56 \ + --hash=sha256:7429e7faa1a60cad26ae4227f4dd0459efde239e494c7312624ce228e04f6391 \ + --hash=sha256:74da9f97daec6928567b48c90ea2c82a106b2d500f397eeb8941e47d30b1ca85 \ + --hash=sha256:74e4f025ef3db1c6da4460dd27c118d8cd136d0391da4e387a15e48e5c975147 \ + --hash=sha256:75a9632f1d4f698b2e6e2e1ada40e71f369b15d69baddb8968dcc8e683839b18 \ + --hash=sha256:76acba4c66c47d27c8365e7c10b3d8016a7da83d3191d053a58382311a8bf4e1 \ + --hash=sha256:79d1fb9252e7e2cfe4de6e9a6610c7cbb99b9708e2c3e29057f487de5a9eaefa \ + --hash=sha256:7ce7ad8abebe737ad6143d9d3bf94b88b93365ea30a5b81f6877ec9c0dee0a48 \ + --hash=sha256:7ed07b3062b055d7a7f9d6557a251cc655eed0b3152b76de619516621c56f5d3 \ + --hash=sha256:7ff762670cada8e05b32bf1e4dc50b140790909caa8303cfddc4d702b71ea184 \ + --hash=sha256:8268cbcd48c5375f46e000adb1390572c98879eb4f77910c6053d25cc3ac2c67 \ + --hash=sha256:875a3f90d7eb5c5d77e529080d95140eacb3c6d13ad5b616ee8095447b1d22e7 \ + --hash=sha256:89feb82ca055af0fe797a2323ec9043b26bc371365847dbe83c7fd2e2f181c34 \ + --hash=sha256:8a7e24cb69ee5f32e003f50e016d5fde438010c1022c96738b04fc2423e61706 \ + --hash=sha256:8ab6a358d1286498d80fe67bd3d69fcbc7d1359b45b41e74c4a26964ca99c3f8 \ + --hash=sha256:8b8df03a9e995b6211dafa63b32f9d405881518ff1ddd775db4e7b98fb545e1c \ + --hash=sha256:8cf85a6e40ff1f37fe0f25719aadf443686b1ac7652593dc53c7ef9b8492b115 \ + --hash=sha256:8e8d351ff44c1638cb6e980623d517abd9f580d2e53bfcd18d8941c052a5a009 \ + --hash=sha256:9164361769b6ca7769079f4d426a41df6164879f7f3568be9086e15baca61466 \ + --hash=sha256:96e85aa09274955bb6bd483eaf5b12abadade01010478154b0ec70284c1b1526 \ + --hash=sha256:981a06a3076997adf7c743dcd0d7a0415582661e2517c7d961493572e909aa1d \ + --hash=sha256:9cd5323344d8ebb9fb5e96da5de5ad4ebab993bbf51674259dbe9d7a18049525 \ + --hash=sha256:9d6c6ea6a11ca0ff9cd0390b885984ed31157c168565702959c25e2191674a14 \ + --hash=sha256:a02d3c48f9bb1e10c7788d92c0c7db6f2002d024ab6e74d6f45ae33e3d0288a3 \ + --hash=sha256:a233bb68625a85126ac9f1fc66d24337d6e8a0f9207b688eec2e7c880f012ec0 \ + --hash=sha256:a2f6a1bc2460e643785a2cde17293bd7a8f990884b822f7bca47bee0a82fc66b \ + --hash=sha256:a6d17e0370d2516d5bb9062c7b4cb731cff921fc875644c3d751ad857ba9c5b1 \ + --hash=sha256:a6d2092797b388342c1bc932077ad232f914351932353e2e8706851c870bca1f \ + --hash=sha256:ab67ed772c584b7ef2379797bf14b82df9aa5f7438c5b9a09624dd834c1c1aaf \ + --hash=sha256:ac6540c9fff6e3813d29d0403ee7a81897f1d8ecc09a8ff84d2eea70ede1cdbf \ + --hash=sha256:ae4073a60ab98529ab8a72ebf429f2a8cc612619a8c04e08bed27450d52103c0 \ + --hash=sha256:ae791f6bd43305aade8c0e22f816b34f3b72b6c820477aab4d18473a37e8090b \ + --hash=sha256:aef5474d913d3b05e613906ba4090433c515e13ea49c837aca18bde190853dff \ + --hash=sha256:b0b3f2df149efb242cee2ffdeb6674b7f30d23c9a7af26595099afaf46ef4e88 \ + --hash=sha256:b128092c927eaf485928cec0c28f6b8bead277e28acf56800e972aa2c2abd7a2 \ + --hash=sha256:b16db2770517b8799c79aa80f4053cd6f8b716f21f8aca962725a9565ce3ee40 \ + --hash=sha256:b336b0416828022bfd5a2e3083e7f5ba54b96242159f83c7e3eebaec752f1716 \ + --hash=sha256:b47633251727c8fe279f34025844b3b3a3e40cd1b198356d003aa146258d13a2 \ + --hash=sha256:b537bd04d7ccd7c6350cdaaaad911f6312cbd61e6e6045542f781c7f8b2e99d2 \ + --hash=sha256:b5e4ef22ff25bfd4ede5f8fb30f7b24446345f3e79d9b7455aef2836437bc38a \ + --hash=sha256:b74b9ea10063efb77a965a8d5f4182806fbf59ed068b3c3fd6f30d2ac7bee734 \ + --hash=sha256:bb2dc4898180bea79863d5487e5f9c7c34297414bad54bcd0f0852aee9cfdb87 \ + --hash=sha256:bbc4b80af581e18568ff07f6395c02114d05f4865c2812a1f02f2eaecf0bfd48 \ + --hash=sha256:bcc98f911f10278d1daf14b87d65325851a1d29153caaf146877ec37031d5f36 \ + --hash=sha256:be49ad33819d7dcc28a309b86d4ed98e1a65f3075c6acd3cd4fe32103235222b \ + --hash=sha256:bec4bd9133420c5c52d562469c754f27c5c9e36ee06abc169612c959bd7dbb07 \ + --hash=sha256:c2faf60c583af0d135e853c86ac2735ce178f0e338a3c7f9ae8f622fd2eb788c \ + --hash=sha256:c689d0d5381f56de7bd6966a4541bff6e08bf8d3871bbd89a0c6ab18aa699573 \ + --hash=sha256:c7079d5eb1c1315a858bbf180000757db8ad904a89476653232db835c3114001 \ + --hash=sha256:cb3942960f0beb9f46e2a71a3aca220d1ca32feb5a398656be934320804c0df9 \ + --hash=sha256:cd9e78285da6c9ba2d5c769628f43ef66d96ac3085e59b10ad4f3707980710d3 \ + --hash=sha256:cf2a978c795b54c539f47964ec05e35c05bd045db5ca1e8366988c7f2fe6b3ce \ + --hash=sha256:d14a0d029a4e176795cef99c056d58067c06195e0c7e2dbb293bf95c08f772a3 \ + --hash=sha256:d237ba6664b8e60fd90b8549a149a74fcc675272e0e95539a00522e4ca688b04 \ + --hash=sha256:d26a618ae1766279f2660aca0081b2220aca6bd1aa06b2cf73f07383faf48927 \ + --hash=sha256:d28cb356f119a437cc58a13f8135ab8a4c8ece18159eb9194b0d269ec4e28083 \ + --hash=sha256:d4ed0c7cbecde7194cd3228c044e86bf73e30a23505af852857c09c24e77ec5d \ + --hash=sha256:d83e2d94b69bf31ead2fa45f0acdef0757fa0458a129734f59f67f3d2eb7ef32 \ + --hash=sha256:d8bbcd21769594dbba9c37d3c819e2d5847656ca99c747ddb31ac1701d0c0ed9 \ + --hash=sha256:d9b342c76003c6b9336a80efcc766748a333573abf9350f4094ee46b006ec18f \ + --hash=sha256:dc911208b18842a3a57266d8e51fc3cfaccee90a5351b92079beed912a7914c2 \ + --hash=sha256:dfa7c241073d8f2b8e8dbc7803c434f57dbb83ae2a3d7892dd068d99e96efe2c \ + --hash=sha256:e282aedd63c639c07c3857097fc0e236f984ceb4089a8b284da1c526491e3f3d \ + --hash=sha256:e290d79a4107d7d794634ce3e985b9ae4f920380a813717adf61804904dc4393 \ + --hash=sha256:e3d9d13603410b72787579769469af730c38f2f25505573a5888a94b62b920f8 \ + --hash=sha256:e481bba1e11ba585fb06db666bfc23dbe181dbafc7b25776156120bf12e0d5a6 \ + --hash=sha256:e49b052b768bb74f58c7dda4e0bdf7b79d43a9204ca584ffe1fb48a6f3c84c66 \ + --hash=sha256:eb00b549b13bd6d884c863554566095bf6fa9c3cecb2e7b399c4bc7904cb33b5 \ + --hash=sha256:ec87c44f619380878bd49ca109669c9f221d9ae6883a5bcb3616785fa8f94c97 \ + --hash=sha256:edcfa83e03370032a489430215c1e7783128808fd3e2e0a3225deee278585196 \ + --hash=sha256:f11ae142f3a322d44513de1018b50f474f8f736bc3cd91d969f464b5bfef8836 \ + --hash=sha256:f2a09f6184f17a80897172863a655467da2b11151ec98ba8d7af89f17bf63dae \ + --hash=sha256:f5b65529bb2f21ac7861a0e94fdbf5dc0daab41497d18223b46ee8515e5ad297 \ + --hash=sha256:f60fdd125d85bf9c279ffb8e94c78c51b3b6a37711464e1f5f31078b45002421 \ + --hash=sha256:f61efaf4bed1cc0860e567d2ecb2363974d414f7f1f124b1df368bbf183453a6 \ + --hash=sha256:f90e552ecbad426eab352e7b2933091f2be77115bb16f09f78404861c8322981 \ + --hash=sha256:f956196ef61369f1685d14dad80611488d8dc1ef00be57c0c5a03064005b0f30 \ + --hash=sha256:fb91819461b1b56d06fa4bcf86617fac795f6a99d12239fb0c68dbeba41a0a30 \ + --hash=sha256:fbc9d316552f9ef7bba39f4edfad4a734d3d6f93341232a9dddadec4f15d425f \ + --hash=sha256:ff69a9a0b4b17d78170c73abe2ab12084bdf1691550c5629ad1fe7849433f324 \ + --hash=sha256:ffb2be176fed4457e445fe540617f0252a72a8bc56208fd65a690fdb1f57660b + # via + # python3-saml + # xmlsec markdown==3.6 \ --hash=sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f \ --hash=sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224 @@ -734,21 +923,18 @@ markupsafe==2.1.5 \ --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 # via jinja2 -oauthlib==3.2.2 \ - --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \ - --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918 - # via requests-oauthlib odfpy==1.4.1 \ --hash=sha256:db766a6e59c5103212f3cc92ec8dd50a0f3a02790233ed0b52148b70d3c438ec # via tablib -openpyxl==3.1.2 \ - --hash=sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184 \ - --hash=sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5 +openpyxl==3.1.4 \ + --hash=sha256:8d2c8adf5d20d6ce8f9bca381df86b534835e974ed0156dacefa76f68c1d69fb \ + --hash=sha256:ec17f6483f2b8f7c88c57e5e5d3b0de0e3fb9ac70edc084d28e864f5b33bbefd # via tablib -opentelemetry-api==1.24.0 \ - --hash=sha256:0f2c363d98d10d1ce93330015ca7fd3a65f60be64e05e30f557c61de52c80ca2 \ - --hash=sha256:42719f10ce7b5a9a73b10a4baf620574fb8ad495a9cbe5c18d76b75d8689c67e +opentelemetry-api==1.25.0 \ + --hash=sha256:757fa1aa020a0f8fa139f8959e53dec2051cc26b832e76fa839a6d76ecefd737 \ + --hash=sha256:77c4985f62f2614e42ce77ee4c9da5fa5f0bc1e1821085e9a47533a9323ae869 # via + # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http # opentelemetry-instrumentation @@ -757,80 +943,87 @@ opentelemetry-api==1.24.0 \ # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi # opentelemetry-sdk -opentelemetry-exporter-otlp==1.24.0 \ - --hash=sha256:1dfe2e4befe1f0efc193a896837740407669b2929233b406ac0a813151200cac \ - --hash=sha256:649c6e249e55cbdebe99ba2846e3851c04c9f328570328c35b3af9c094314b55 -opentelemetry-exporter-otlp-proto-common==1.24.0 \ - --hash=sha256:5d31fa1ff976cacc38be1ec4e3279a3f88435c75b38b1f7a099a1faffc302461 \ - --hash=sha256:e51f2c9735054d598ad2df5d3eca830fecfb5b0bda0a2fa742c9c7718e12f641 + # opentelemetry-semantic-conventions +opentelemetry-exporter-otlp==1.25.0 \ + --hash=sha256:ce03199c1680a845f82e12c0a6a8f61036048c07ec7a0bd943142aca8fa6ced0 \ + --hash=sha256:d67a831757014a3bc3174e4cd629ae1493b7ba8d189e8a007003cacb9f1a6b60 + # via -r src/backend/requirements.in +opentelemetry-exporter-otlp-proto-common==1.25.0 \ + --hash=sha256:15637b7d580c2675f70246563363775b4e6de947871e01d0f4e3881d1848d693 \ + --hash=sha256:c93f4e30da4eee02bacd1e004eb82ce4da143a2f8e15b987a9f603e0a85407d3 # via # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-exporter-otlp-proto-grpc==1.24.0 \ - --hash=sha256:217c6e30634f2c9797999ea9da29f7300479a94a610139b9df17433f915e7baa \ - --hash=sha256:f40d62aa30a0a43cc1657428e59fcf82ad5f7ea8fff75de0f9d9cb6f739e0a3b +opentelemetry-exporter-otlp-proto-grpc==1.25.0 \ + --hash=sha256:3131028f0c0a155a64c430ca600fd658e8e37043cb13209f0109db5c1a3e4eb4 \ + --hash=sha256:c0b1661415acec5af87625587efa1ccab68b873745ca0ee96b69bb1042087eac # via opentelemetry-exporter-otlp -opentelemetry-exporter-otlp-proto-http==1.24.0 \ - --hash=sha256:25af10e46fdf4cd3833175e42f4879a1255fc01655fe14c876183a2903949836 \ - --hash=sha256:704c066cc96f5131881b75c0eac286cd73fc735c490b054838b4513254bd7850 +opentelemetry-exporter-otlp-proto-http==1.25.0 \ + --hash=sha256:2eca686ee11b27acd28198b3ea5e5863a53d1266b91cda47c839d95d5e0541a6 \ + --hash=sha256:9f8723859e37c75183ea7afa73a3542f01d0fd274a5b97487ea24cb683d7d684 # via opentelemetry-exporter-otlp -opentelemetry-instrumentation==0.45b0 \ - --hash=sha256:06c02e2c952c1b076e8eaedf1b82f715e2937ba7eeacab55913dd434fbcec258 \ - --hash=sha256:6c47120a7970bbeb458e6a73686ee9ba84b106329a79e4a4a66761f933709c7e +opentelemetry-instrumentation==0.46b0 \ + --hash=sha256:89cd721b9c18c014ca848ccd11181e6b3fd3f6c7669e35d59c48dc527408c18b \ + --hash=sha256:974e0888fb2a1e01c38fbacc9483d024bb1132aad92d6d24e2e5543887a7adda # via # opentelemetry-instrumentation-django # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi -opentelemetry-instrumentation-django==0.45b0 \ - --hash=sha256:1e612c90eb4c69e1f0aa2e38dea89c47616596d3600392640fa7c0a201e299fa \ - --hash=sha256:d8b55747d6784167ab3a50dc128cc13b6966a2215ce55f4043392ac1c83b5bb2 -opentelemetry-instrumentation-redis==0.45b0 \ - --hash=sha256:44500fb0e767d219d3453af9804111f46d11127b603ff67d7eda9945f766d8ca \ - --hash=sha256:a506772c5afe15b23cb6b7c1c5c67861111b71fce81c85a452f0bc66a319c648 -opentelemetry-instrumentation-requests==0.45b0 \ - --hash=sha256:275851d04de518507b0411b98524602101b228b72e61f39dc627c0421ff2a81f \ - --hash=sha256:6bf1359284105ab50fa7465ea6c60b4a62c699408cb0260af3ac8895e8a7451a -opentelemetry-instrumentation-wsgi==0.45b0 \ - --hash=sha256:7a6f9c71b25f5c5e112827540008882f6a9088447cb65745e7f2083749516663 \ - --hash=sha256:f53a2a38e6582406e207d404e4c1b859b83bec11a68ad6c7366642d01c873ad0 +opentelemetry-instrumentation-django==0.46b0 \ + --hash=sha256:cc11b2e24f9bdd20759570390ed8619d9c5acbf788b4a5401e36e280dfc20feb \ + --hash=sha256:ecc85941263122f99dbd96463a981b2d1eeea618ca287a58abe0af9fd67631ee + # via -r src/backend/requirements.in +opentelemetry-instrumentation-redis==0.46b0 \ + --hash=sha256:8b4639fe52edb6ccdc633c54c01630005ab63faeffd97754cddbf6bdc1f04c5e \ + --hash=sha256:e796530808829a9c32f19eaf470f0b01caef13bd89f1d964f536198de881e460 + # via -r src/backend/requirements.in +opentelemetry-instrumentation-requests==0.46b0 \ + --hash=sha256:a8c2472800d8686f3f286cd524b8746b386154092e85a791ba14110d1acc9b81 \ + --hash=sha256:ef0ad63bfd0d52631daaf7d687e763dbd89b465f5cb052f12a4e67e5e3d181e4 + # via -r src/backend/requirements.in +opentelemetry-instrumentation-wsgi==0.46b0 \ + --hash=sha256:2386014b026f5307c802417eeab74265785ae3dd6eee8c5581a830e3b2d3435b \ + --hash=sha256:f4e1001e8477eb546cac7c13cff0b0cf127812b1188a37bcaa3e43eb741451e2 # via opentelemetry-instrumentation-django -opentelemetry-proto==1.24.0 \ - --hash=sha256:bcb80e1e78a003040db71ccf83f2ad2019273d1e0828089d183b18a1476527ce \ - --hash=sha256:ff551b8ad63c6cabb1845ce217a6709358dfaba0f75ea1fa21a61ceddc78cab8 +opentelemetry-proto==1.25.0 \ + --hash=sha256:35b6ef9dc4a9f7853ecc5006738ad40443701e52c26099e197895cbda8b815a3 \ + --hash=sha256:f07e3341c78d835d9b86665903b199893befa5e98866f63d22b00d0b7ca4972f # via # opentelemetry-exporter-otlp-proto-common # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-sdk==1.24.0 \ - --hash=sha256:75bc0563affffa827700e0f4f4a68e1e257db0df13372344aebc6f8a64cde2e5 \ - --hash=sha256:fa731e24efe832e98bcd90902085b359dcfef7d9c9c00eb5b9a18587dae3eb59 +opentelemetry-sdk==1.25.0 \ + --hash=sha256:ce7fc319c57707ef5bf8b74fb9f8ebdb8bfafbe11898410e0d2a761d08a98ec7 \ + --hash=sha256:d97ff7ec4b351692e9d5a15af570c693b8715ad78b8aafbec5c7100fe966b4c9 # via + # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-semantic-conventions==0.45b0 \ - --hash=sha256:7c84215a44ac846bc4b8e32d5e78935c5c43482e491812a0bb8aaf87e4d92118 \ - --hash=sha256:a4a6fb9a7bacd9167c082aa4681009e9acdbfa28ffb2387af50c2fef3d30c864 +opentelemetry-semantic-conventions==0.46b0 \ + --hash=sha256:6daef4ef9fa51d51855d9f8e0ccd3a1bd59e0e545abe99ac6203804e36ab3e07 \ + --hash=sha256:fbc982ecbb6a6e90869b15c1673be90bd18c8a56ff1cffc0864e38e2edffaefa # via # opentelemetry-instrumentation-django # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi # opentelemetry-sdk -opentelemetry-util-http==0.45b0 \ - --hash=sha256:4ce08b6a7d52dd7c96b7705b5b4f06fdb6aa3eac1233b3b0bfef8a0cab9a92cd \ - --hash=sha256:6628868b501b3004e1860f976f410eeb3d3499e009719d818000f24ce17b6e33 +opentelemetry-util-http==0.46b0 \ + --hash=sha256:03b6e222642f9c7eae58d9132343e045b50aca9761fcb53709bd2b663571fdf6 \ + --hash=sha256:8dc1949ce63caef08db84ae977fdc1848fe6dc38e6bbaad0ae3e6ecd0d451629 # via # opentelemetry-instrumentation-django # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi -packaging==24.0 \ - --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ - --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 +packaging==24.1 \ + --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ + --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 # via gunicorn pdf2image==1.17.0 \ --hash=sha256:eaa959bc116b420dd7ec415fcae49b98100dda3dd18cd2fdfa86d09f112f6d57 \ --hash=sha256:ecdd58d7afb810dffe21ef2b1bbc057ef434dabbac6c33778a38a3f7744a27e2 + # via -r src/backend/requirements.in pillow==10.3.0 \ --hash=sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c \ --hash=sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2 \ @@ -902,6 +1095,7 @@ pillow==10.3.0 \ --hash=sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27 \ --hash=sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a # via + # -r src/backend/requirements.in # django-stdimage # pdf2image # python-barcode @@ -910,9 +1104,11 @@ pillow==10.3.0 \ pint==0.21 \ --hash=sha256:3e98bdf01f4dcf840cc0207c0b6f7510d4e0c6288efc1bf470626e875c831172 \ --hash=sha256:998b695e84a34d11702da4a8b9457a39bb5c7ab5ec68db90e948e30878e421f1 + # via -r src/backend/requirements.in pip-licenses==4.4.0 \ --hash=sha256:996817118375445243a34faafe23c06f6b2d250247c4046571b5a6722d45be69 \ --hash=sha256:dbad2ac5a25f574cabe2716f2f031a0c5fa359bed9b3ef615301f4e546893b46 + # via -r src/backend/requirements.in prettytable==3.10.0 \ --hash=sha256:6536efaf0757fdaa7d22e78b3aac3b69ea1b7200538c2c6995d649365bddab92 \ --hash=sha256:9665594d137fb08a1117518c25551e0ede1687197cf353a4fdc78d27e1073568 @@ -944,12 +1140,10 @@ pydyf==0.10.0 \ --hash=sha256:357194593efaf61d7b48ab97c3d59722114934967c3df3d7878ca6dd25b04c30 \ --hash=sha256:ef76b6c0976a091a9e15827fb5800e5e37e7cd1a3ca4d4bd19d10a14ea8c0ae3 # via weasyprint -pyjwt[crypto]==2.8.0 \ +pyjwt==2.8.0 \ --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 - # via - # django-allauth - # djangorestframework-simplejwt + # via djangorestframework-simplejwt pyphen==0.15.0 \ --hash=sha256:999b430916ab42ae9912537cd95c074e0c6691e89a9d05999f9b610a68f34858 \ --hash=sha256:a430623decac53dc3691241253263cba36b9dd7a44ffd2680b706af368cda2f2 @@ -961,6 +1155,7 @@ pypng==0.20220715.0 \ python-barcode[images]==0.15.1 \ --hash=sha256:057636fba37369c22852410c8535b36adfbeb965ddfd4e5b6924455d692e0886 \ --hash=sha256:3b1825fbdb11e597466dff4286b4ea9b1e86a57717b59e563ae679726fc854de + # via -r src/backend/requirements.in python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 @@ -970,6 +1165,7 @@ python-dateutil==2.9.0.post0 \ python-dotenv==1.0.1 \ --hash=sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca \ --hash=sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a + # via -r src/backend/requirements.in python-fsutil==0.14.1 \ --hash=sha256:0d45e623f0f4403f674bdd8ae7aa7d24a4b3132ea45c65416bd2865e6b20b035 \ --hash=sha256:8fb204fa8059f37bdeee8a1dc0fff010170202ea47c4225ee71bb3c26f3997be @@ -978,6 +1174,11 @@ python3-openid==3.2.0 \ --hash=sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf \ --hash=sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b # via django-allauth +python3-saml==1.16.0 \ + --hash=sha256:20b97d11b04f01ee22e98f4a38242e2fea2e28fbc7fbc9bdd57cab5ac7fc2d0d \ + --hash=sha256:97c9669aecabc283c6e5fb4eb264f446b6e006f5267d01c9734f9d8bffdac133 \ + --hash=sha256:c49097863c278ff669a337a96c46dc1f25d16307b4bb2679d2d1733cc4f5176a + # via django-allauth pytz==2024.1 \ --hash=sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812 \ --hash=sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319 @@ -1038,106 +1239,113 @@ pyyaml==6.0.1 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f # via + # -r src/backend/requirements.in # drf-spectacular # tablib qrcode[pil]==7.4.2 \ --hash=sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a \ --hash=sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845 - # via django-allauth-2fa -rapidfuzz==3.9.0 \ - --hash=sha256:014ac55b03f4074f903248ded181f3000f4cdbd134e6155cbf643f0eceb4f70f \ - --hash=sha256:08d8b49b3a4fb8572e480e73fcddc750da9cbb8696752ee12cca4bf8c8220d52 \ - --hash=sha256:0bb28ab5300cf974c7eb68ea21125c493e74b35b1129e629533468b2064ae0a2 \ - --hash=sha256:0c5b8f9a7b177af6ce7c6ad5b95588b4b73e37917711aafa33b2e79ee80fe709 \ - --hash=sha256:0ca799f882364e69d0872619afb19efa3652b7133c18352e4a3d86a324fb2bb1 \ - --hash=sha256:0dcb95fde22f98e6d0480db8d6038c45fe2d18a338690e6f9bba9b82323f3469 \ - --hash=sha256:0e2e106cc66453bb80d2ad9c0044f8287415676df5c8036d737d05d4b9cdbf8e \ - --hash=sha256:0e86e39c1c1a0816ceda836e6f7bd3743b930cbc51a43a81bb433b552f203f25 \ - --hash=sha256:1179dcd3d150a67b8a678cd9c84f3baff7413ff13c9e8fe85e52a16c97e24c9b \ - --hash=sha256:11a7ec4676242c8a430509cff42ce98bca2fbe30188a63d0f60fdcbfd7e84970 \ - --hash=sha256:134b7098ac109834eeea81424b6822f33c4c52bf80b81508295611e7a21be12a \ - --hash=sha256:13857f9070600ea1f940749f123b02d0b027afbaa45e72186df0f278915761d0 \ - --hash=sha256:170822a1b1719f02b58e3dce194c8ad7d4c5b39be38c0fdec603bd19c6f9cf81 \ - --hash=sha256:182b4e11de928fb4834e8f8b5ecd971b5b10a86fabe8636ab65d3a9b7e0e9ca7 \ - --hash=sha256:1b1f74997b6d94d66375479fa55f70b1c18e4d865d7afcd13f0785bfd40a9d3c \ - --hash=sha256:1d536f8beb8dd82d6efb20fe9f82c2cfab9ffa0384b5d184327e393a4edde91d \ - --hash=sha256:2003071aa633477a01509890c895f9ef56cf3f2eaa72c7ec0b567f743c1abcba \ - --hash=sha256:2444d8155d9846f206e2079bb355b85f365d9457480b0d71677a112d0a7f7128 \ - --hash=sha256:28da953eb2ef9ad527e536022da7afff6ace7126cdd6f3e21ac20f8762e76d2c \ - --hash=sha256:2a96209f046fe328be30fc43f06e3d4b91f0d5b74e9dcd627dbfd65890fa4a5e \ - --hash=sha256:2bc5559b9b94326922c096b30ae2d8e5b40b2e9c2c100c2cc396ad91bcb84d30 \ - --hash=sha256:2d267d4c982ab7d177e994ab1f31b98ff3814f6791b90d35dda38307b9e7c989 \ - --hash=sha256:3083512e9bf6ed2bb3d25883922974f55e21ae7f8e9f4e298634691ae1aee583 \ - --hash=sha256:30f7609da871510583f87484a10820b26555a473a90ab356cdda2f3b4456256c \ - --hash=sha256:33cfabcb7fd994938a6a08e641613ce5fe46757832edc789c6a5602e7933d6fa \ - --hash=sha256:36bf35df2d6c7d5820da20a6720aee34f67c15cd2daf8cf92e8141995c640c25 \ - --hash=sha256:3733aede16ea112728ffeafeb29ccc62e095ed8ec816822fa2a82e92e2c08696 \ - --hash=sha256:3904d0084ab51f82e9f353031554965524f535522a48ec75c30b223eb5a0a488 \ - --hash=sha256:3a16c48c6df8fb633efbbdea744361025d01d79bca988f884a620e63e782fe5b \ - --hash=sha256:3c42a238bf9dd48f4ccec4c6934ac718225b00bb3a438a008c219e7ccb3894c7 \ - --hash=sha256:3f4a2468432a1db491af6f547fad8f6d55fa03e57265c2f20e5eaceb68c7907e \ - --hash=sha256:413ac49bae291d7e226a5c9be65c71b2630b3346bce39268d02cb3290232e4b7 \ - --hash=sha256:4514980a5d204c076dd5b756960f6b1b7598f030009456e6109d76c4c331d03c \ - --hash=sha256:47b7c0840afa724db3b1a070bc6ed5beab73b4e659b1d395023617fc51bf68a2 \ - --hash=sha256:47d97e28c42f1efb7781993b67c749223f198f6653ef177a0c8f2b1c516efcaf \ - --hash=sha256:48105991ff6e4a51c7f754df500baa070270ed3d41784ee0d097549bc9fcb16d \ - --hash=sha256:488f74126904db6b1bea545c2f3567ea882099f4c13f46012fe8f4b990c683df \ - --hash=sha256:491274080742110427f38a6085bb12dffcaff1eef12dccf9e8758398c7e3957e \ - --hash=sha256:4eea3bf72c4fe68e957526ffd6bcbb403a21baa6b3344aaae2d3252313df6199 \ - --hash=sha256:544b0bf9d17170720809918e9ccd0d482d4a3a6eca35630d8e1459f737f71755 \ - --hash=sha256:55e2c5076f38fc1dbaacb95fa026a3e409eee6ea5ac4016d44fb30e4cad42b20 \ - --hash=sha256:5c396562d304e974b4b0d5cd3afc4f92c113ea46a36e6bc62e45333d6aa8837e \ - --hash=sha256:623883fb78e692d54ed7c43b09beec52c6685f10a45a7518128e25746667403b \ - --hash=sha256:633b9d03fc04abc585c197104b1d0af04b1f1db1abc99f674d871224cd15557a \ - --hash=sha256:65d9250a4b0bf86320097306084bc3ca479c8f5491927c170d018787793ebe95 \ - --hash=sha256:68da1b70458fea5290ec9a169fcffe0c17ff7e5bb3c3257e63d7021a50601a8e \ - --hash=sha256:6993d361f28b9ef5f0fa4e79b8541c2f3507be7471b9f9cb403a255e123b31e1 \ - --hash=sha256:6a7f273906b3c7cc6d63a76e088200805947aa0bc1ada42c6a0e582e19c390d7 \ - --hash=sha256:6a83128d505cac76ea560bb9afcb3f6986e14e50a6f467db9a31faef4bd9b347 \ - --hash=sha256:6c1ed63345d1581c39d4446b1a8c8f550709656ce2a3c88c47850b258167f3c2 \ - --hash=sha256:731269812ea837e0b93d913648e404736407408e33a00b75741e8f27c590caa2 \ - --hash=sha256:7988363b3a415c5194ce1a68d380629247f8713e669ad81db7548eb156c4f365 \ - --hash=sha256:7c09f4e87e82a164c9db769474bc61f8c8b677f2aeb0234b8abac73d2ecf9799 \ - --hash=sha256:849160dc0f128acb343af514ca827278005c1d00148d025e4035e034fc2d8c7f \ - --hash=sha256:8e5ff882d3a3d081157ceba7e0ebc7fac775f95b08cbb143accd4cece6043819 \ - --hash=sha256:905b01a9b633394ff6bb5ebb1c5fd660e0e180c03fcf9d90199cc6ed74b87cf7 \ - --hash=sha256:9a06a99f1335fe43464d7121bc6540de7cd9c9475ac2025babb373fe7f27846b \ - --hash=sha256:9bc0f7e6256a9c668482c41c8a3de5d0aa12e8ca346dcc427b97c7edb82cba48 \ - --hash=sha256:9d6478957fb35c7844ad08f2442b62ba76c1857a56370781a707eefa4f4981e1 \ - --hash=sha256:a2de844e0e971d7bd8aa41284627dbeacc90e750b90acfb016836553c7a63192 \ - --hash=sha256:a365886c42177b2beab475a50ba311b59b04f233ceaebc4c341f6f91a86a78e2 \ - --hash=sha256:ab872cb57ae97c54ba7c71a9e3c9552beb57cb907c789b726895576d1ea9af6f \ - --hash=sha256:ae643220584518cbff8bf2974a0494d3e250763af816b73326a512c86ae782ce \ - --hash=sha256:b11e602987bcb4ea22b44178851f27406fca59b0836298d0beb009b504dba266 \ - --hash=sha256:b1256915f7e7a5cf2c151c9ac44834b37f9bd1c97e8dec6f936884f01b9dfc7d \ - --hash=sha256:b182f0fb61f6ac435e416eb7ab330d62efdbf9b63cf0c7fa12d1f57c2eaaf6f3 \ - --hash=sha256:b33c6d4b3a1190bc0b6c158c3981535f9434e8ed9ffa40cf5586d66c1819fb4b \ - --hash=sha256:b9bf90b3d96925cbf8ef44e5ee3cf39ef0c422f12d40f7a497e91febec546650 \ - --hash=sha256:bd375c4830fee11d502dd93ecadef63c137ae88e1aaa29cc15031fa66d1e0abb \ - --hash=sha256:bdd8c15c3a14e409507fdf0c0434ec481d85c6cbeec8bdcd342a8cd1eda03825 \ - --hash=sha256:c4ef34b2ddbf448f1d644b4ec6475df8bbe5b9d0fee173ff2e87322a151663bd \ - --hash=sha256:c56d2efdfaa1c642029f3a7a5bb76085c5531f7a530777be98232d2ce142553c \ - --hash=sha256:c74f2da334ce597f31670db574766ddeaee5d9430c2c00e28d0fbb7f76172036 \ - --hash=sha256:cd2e6e97daf17ebb3254285cf8dd86c60d56d6cf35c67f0f9a557ef26bd66290 \ - --hash=sha256:ce897b5dafb7fb7587a95fe4d449c1ea0b6d9ac4462fbafefdbbeef6eee4cf6a \ - --hash=sha256:d20ab9abc7e19767f1951772a6ab14cb4eddd886493c2da5ee12014596ad253f \ - --hash=sha256:d5d5684f54d82d9b0cf0b2701e55a630527a9c3dd5ddcf7a2e726a475ac238f2 \ - --hash=sha256:dcb523243e988c849cf81220164ec3bbed378a699e595a8914fffe80596dc49f \ - --hash=sha256:e2218d62ab63f3c5ad48eced898854d0c2c327a48f0fb02e2288d7e5332a22c8 \ - --hash=sha256:e33362e98c7899b5f60dcb06ada00acd8673ce0d59aefe9a542701251fd00423 \ - --hash=sha256:e3f2d1ea7cd57dfcd34821e38b4924c80a31bcf8067201b1ab07386996a9faee \ - --hash=sha256:e65b8f7921bf60cbb207c132842a6b45eefef48c4c3b510eb16087d6c08c70af \ - --hash=sha256:e721842e6b601ebbeb8cc5e12c75bbdd1d9e9561ea932f2f844c418c31256e82 \ - --hash=sha256:f81fe99a69ac8ee3fd905e70c62f3af033901aeb60b69317d1d43d547b46e510 \ - --hash=sha256:f83bd3d01f04061c3660742dc85143a89d49fd23eb31eccbf60ad56c4b955617 \ - --hash=sha256:fb67cf43ad83cb886cbbbff4df7dcaad7aedf94d64fca31aea0da7d26684283c \ - --hash=sha256:fc02157f521af15143fae88f92ef3ddcc4e0cff05c40153a9549dc0fbdb9adb3 \ - --hash=sha256:fc4e26f592b51f97acf0a3f8dfed95e4d830c6a8fbf359361035df836381ab81 \ - --hash=sha256:ff08081c49b18ba253a99e6a47f492e6ee8019e19bbb6ddc3ed360cd3ecb2f62 \ - --hash=sha256:ff8982fc3bd49d55a91569fc8a3feba0de4cef0b391ff9091be546e9df075b81 -redis==5.0.4 \ - --hash=sha256:7adc2835c7a9b5033b7ad8f8918d09b7344188228809c98df07af226d39dec91 \ - --hash=sha256:ec31f2ed9675cc54c21ba854cfe0462e6faf1d83c8ce5944709db8a4700b9c61 + # via + # -r src/backend/requirements.in + # django-allauth-2fa +rapidfuzz==3.9.3 \ + --hash=sha256:05ee0696ebf0dfe8f7c17f364d70617616afc7dafe366532730ca34056065b8a \ + --hash=sha256:0c34139df09a61b1b557ab65782ada971b4a3bce7081d1b2bee45b0a52231adb \ + --hash=sha256:0d055da0e801c71dd74ba81d72d41b2fa32afa182b9fea6b4b199d2ce937450d \ + --hash=sha256:119c010e20e561249b99ca2627f769fdc8305b07193f63dbc07bca0a6c27e892 \ + --hash=sha256:143caf7247449055ecc3c1e874b69e42f403dfc049fc2f3d5f70e1daf21c1318 \ + --hash=sha256:14c9f268ade4c88cf77ab007ad0fdf63699af071ee69378de89fff7aa3cae134 \ + --hash=sha256:153f23c03d4917f6a1fc2fb56d279cc6537d1929237ff08ee7429d0e40464a18 \ + --hash=sha256:15e4158ac4b3fb58108072ec35b8a69165f651ba1c8f43559a36d518dbf9fb3f \ + --hash=sha256:17ff7f7eecdb169f9236e3b872c96dbbaf116f7787f4d490abd34b0116e3e9c8 \ + --hash=sha256:21047f55d674614eb4b0ab34e35c3dc66f36403b9fbfae645199c4a19d4ed447 \ + --hash=sha256:256e07d3465173b2a91c35715a2277b1ee3ae0b9bbab4e519df6af78570741d0 \ + --hash=sha256:282d55700a1a3d3a7980746eb2fcd48c9bbc1572ebe0840d0340d548a54d01fe \ + --hash=sha256:2bc8391749e5022cd9e514ede5316f86e332ffd3cfceeabdc0b17b7e45198a8c \ + --hash=sha256:2c1d3ef3878f871abe6826e386c3d61b5292ef5f7946fe646f4206b85836b5da \ + --hash=sha256:35b7286f177e4d8ba1e48b03612f928a3c4bdac78e5651379cec59f95d8651e6 \ + --hash=sha256:3617d1aa7716c57d120b6adc8f7c989f2d65bc2b0cbd5f9288f1fc7bf469da11 \ + --hash=sha256:378d1744828e27490a823fc6fe6ebfb98c15228d54826bf4e49e4b76eb5f5579 \ + --hash=sha256:3bb6546e7b6bed1aefbe24f68a5fb9b891cc5aef61bca6c1a7b1054b7f0359bb \ + --hash=sha256:3d8a57261ef7996d5ced7c8cba9189ada3fbeffd1815f70f635e4558d93766cb \ + --hash=sha256:3e6d27dad8c990218b8cd4a5c99cbc8834f82bb46ab965a7265d5aa69fc7ced7 \ + --hash=sha256:41a81a9f311dc83d22661f9b1a1de983b201322df0c4554042ffffd0f2040c37 \ + --hash=sha256:505d99131afd21529293a9a7b91dfc661b7e889680b95534756134dc1cc2cd86 \ + --hash=sha256:51fa1ba84653ab480a2e2044e2277bd7f0123d6693051729755addc0d015c44f \ + --hash=sha256:5276df395bd8497397197fca2b5c85f052d2e6a66ffc3eb0544dd9664d661f95 \ + --hash=sha256:53c7f27cdf899e94712972237bda48cfd427646aa6f5d939bf45d084780e4c16 \ + --hash=sha256:53e06e4b81f552da04940aa41fc556ba39dee5513d1861144300c36c33265b76 \ + --hash=sha256:5410dc848c947a603792f4f51b904a3331cf1dc60621586bfbe7a6de72da1091 \ + --hash=sha256:57e7c5bf7b61c7320cfa5dde1e60e678d954ede9bb7da8e763959b2138391401 \ + --hash=sha256:58c6a4936190c558d5626b79fc9e16497e5df7098589a7e80d8bff68148ff096 \ + --hash=sha256:5b422c0a6fe139d5447a0766268e68e6a2a8c2611519f894b1f31f0a392b9167 \ + --hash=sha256:5c7ca5b6050f18fdcacdada2dc5fb7619ff998cd9aba82aed2414eee74ebe6cd \ + --hash=sha256:5d0abbacdb06e27ff803d7ae0bd0624020096802758068ebdcab9bd49cf53115 \ + --hash=sha256:5d0cb272d43e6d3c0dedefdcd9d00007471f77b52d2787a4695e9dd319bb39d2 \ + --hash=sha256:5d6a210347d6e71234af5c76d55eeb0348b026c9bb98fe7c1cca89bac50fb734 \ + --hash=sha256:5e2b827258beefbe5d3f958243caa5a44cf46187eff0c20e0b2ab62d1550327a \ + --hash=sha256:5e33f779391caedcba2ba3089fb6e8e557feab540e9149a5c3f7fea7a3a7df37 \ + --hash=sha256:604e0502a39cf8e67fa9ad239394dddad4cdef6d7008fdb037553817d420e108 \ + --hash=sha256:6073a46f61479a89802e3f04655267caa6c14eb8ac9d81a635a13805f735ebc1 \ + --hash=sha256:6175682a829c6dea4d35ed707f1dadc16513270ef64436568d03b81ccb6bdb74 \ + --hash=sha256:65f45be77ec82da32ce5709a362e236ccf801615cc7163b136d1778cf9e31b14 \ + --hash=sha256:67201c02efc596923ad950519e0b75ceb78d524177ea557134d6567b9ac2c283 \ + --hash=sha256:754b719a4990735f66653c9e9261dcf52fd4d925597e43d6b9069afcae700d21 \ + --hash=sha256:77b5c4f3e72924d7845f0e189c304270066d0f49635cf8a3938e122c437e58de \ + --hash=sha256:790b0b244f3213581d42baa2fed8875f9ee2b2f9b91f94f100ec80d15b140ba9 \ + --hash=sha256:802ca2cc8aa6b8b34c6fdafb9e32540c1ba05fca7ad60b3bbd7ec89ed1797a87 \ + --hash=sha256:8319838fb5b7b5f088d12187d91d152b9386ce3979ed7660daa0ed1bff953791 \ + --hash=sha256:83ea7ca577d76778250421de61fb55a719e45b841deb769351fc2b1740763050 \ + --hash=sha256:858ba57c05afd720db8088a8707079e8d024afe4644001fe0dbd26ef7ca74a65 \ + --hash=sha256:8709918da8a88ad73c9d4dd0ecf24179a4f0ceba0bee21efc6ea21a8b5290349 \ + --hash=sha256:875b581afb29a7213cf9d98cb0f98df862f1020bce9d9b2e6199b60e78a41d14 \ + --hash=sha256:87bb8d84cb41446a808c4b5f746e29d8a53499381ed72f6c4e456fe0f81c80a8 \ + --hash=sha256:8add34061e5cd561c72ed4febb5c15969e7b25bda2bb5102d02afc3abc1f52d0 \ + --hash=sha256:8f917eaadf5388466a95f6a236f678a1588d231e52eda85374077101842e794e \ + --hash=sha256:930b4e6fdb4d914390141a2b99a6f77a52beacf1d06aa4e170cba3a98e24c1bc \ + --hash=sha256:93981895602cf5944d89d317ae3b1b4cc684d175a8ae2a80ce5b65615e72ddd0 \ + --hash=sha256:959a15186d18425d19811bea86a8ffbe19fd48644004d29008e636631420a9b7 \ + --hash=sha256:964c08481aec2fe574f0062e342924db2c6b321391aeb73d68853ed42420fd6d \ + --hash=sha256:a24603dd05fb4e3c09d636b881ce347e5f55f925a6b1b4115527308a323b9f8e \ + --hash=sha256:a39890013f6d5b056cc4bfdedc093e322462ece1027a57ef0c636537bdde7531 \ + --hash=sha256:a4fc7b784cf987dbddc300cef70e09a92ed1bce136f7bb723ea79d7e297fe76d \ + --hash=sha256:a56da3aff97cb56fe85d9ca957d1f55dbac7c27da927a86a2a86d8a7e17f80aa \ + --hash=sha256:a93250bd8fae996350c251e1752f2c03335bb8a0a5b0c7e910a593849121a435 \ + --hash=sha256:a96c5225e840f1587f1bac8fa6f67562b38e095341576e82b728a82021f26d62 \ + --hash=sha256:aca21c0a34adee582775da997a600283e012a608a107398d80a42f9a57ad323d \ + --hash=sha256:acbe4b6f1ccd5b90c29d428e849aa4242e51bb6cab0448d5f3c022eb9a25f7b1 \ + --hash=sha256:ad04a3f5384b82933213bba2459f6424decc2823df40098920856bdee5fd6e88 \ + --hash=sha256:afe7c72d3f917b066257f7ff48562e5d462d865a25fbcabf40fca303a9fa8d35 \ + --hash=sha256:b300708c917ce52f6075bdc6e05b07c51a085733650f14b732c087dc26e0aaad \ + --hash=sha256:b398ea66e8ed50451bce5997c430197d5e4b06ac4aa74602717f792d8d8d06e2 \ + --hash=sha256:b3bd0d9632088c63a241f217742b1cf86e2e8ae573e01354775bd5016d12138c \ + --hash=sha256:b5bc0fdbf419493163c5c9cb147c5fbe95b8e25844a74a8807dcb1a125e630cf \ + --hash=sha256:b770f85eab24034e6ef7df04b2bfd9a45048e24f8a808e903441aa5abde8ecdd \ + --hash=sha256:b777cd910ceecd738adc58593d6ed42e73f60ad04ecdb4a841ae410b51c92e0e \ + --hash=sha256:b80eb7cbe62348c61d3e67e17057cddfd6defab168863028146e07d5a8b24a89 \ + --hash=sha256:b8ab0fa653d9225195a8ff924f992f4249c1e6fa0aea563f685e71b81b9fcccf \ + --hash=sha256:bc1991b4cde6c9d3c0bbcb83d5581dc7621bec8c666c095c65b4277233265a82 \ + --hash=sha256:bdb8c5b8e29238ec80727c2ba3b301efd45aa30c6a7001123a6647b8e6f77ea4 \ + --hash=sha256:c52970f7784518d7c82b07a62a26e345d2de8c2bd8ed4774e13342e4b3ff4200 \ + --hash=sha256:c6e65a301fcd19fbfbee3a514cc0014ff3f3b254b9fd65886e8a9d6957fb7bca \ + --hash=sha256:c8444e921bfc3757c475c4f4d7416a7aa69b2d992d5114fe55af21411187ab0d \ + --hash=sha256:cbe93ba1725a8d47d2b9dca6c1f435174859427fbc054d83de52aea5adc65729 \ + --hash=sha256:cde6b9d9ba5007077ee321ec722fa714ebc0cbd9a32ccf0f4dd3cc3f20952d71 \ + --hash=sha256:d36447d21b05f90282a6f98c5a33771805f9222e5d0441d03eb8824e33e5bbb4 \ + --hash=sha256:d861bf326ee7dabc35c532a40384541578cd1ec1e1b7db9f9ecbba56eb76ca22 \ + --hash=sha256:dc1037507810833646481f5729901a154523f98cbebb1157ba3a821012e16402 \ + --hash=sha256:dd789100fc852cffac1449f82af0da139d36d84fd9faa4f79fc4140a88778343 \ + --hash=sha256:de077c468c225d4c18f7188c47d955a16d65f21aab121cbdd98e3e2011002c37 \ + --hash=sha256:e53ed2e9b32674ce96eed80b3b572db9fd87aae6742941fb8e4705e541d861ce \ + --hash=sha256:e6e4b9380ed4758d0cb578b0d1970c3f32dd9e87119378729a5340cb3169f879 \ + --hash=sha256:efe6e200a75a792d37b960457904c4fce7c928a96ae9e5d21d2bd382fe39066e \ + --hash=sha256:f50fed4a9b0c9825ff37cf0bccafd51ff5792090618f7846a7650f21f85579c9 \ + --hash=sha256:f57e8305c281e8c8bc720515540e0580355100c0a7a541105c6cafc5de71daae \ + --hash=sha256:fd84b7f652a5610733400307dc732f57c4a907080bef9520412e6d9b55bc9adc + # via -r src/backend/requirements.in +redis==5.0.7 \ + --hash=sha256:0e479e24da960c690be5d9b96d21f7b918a98c0cf49af3b6fafaa0753f93a0db \ + --hash=sha256:8f611490b93c8109b50adc317b31bfd84fff31def3475b92e7e80bf39f48175b # via django-redis referencing==0.35.1 \ --hash=sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c \ @@ -1225,18 +1433,13 @@ regex==2024.4.28 \ --hash=sha256:fd24fd140b69f0b0bcc9165c397e9b2e89ecbeda83303abf2a072609f60239e2 \ --hash=sha256:fdae0120cddc839eb8e3c15faa8ad541cc6d906d3eb24d82fb041cfe2807bc1e \ --hash=sha256:fe00f4fe11c8a521b173e6324d862ee7ee3412bf7107570c9b564fe1119b56fb -requests==2.32.0 \ - --hash=sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5 \ - --hash=sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8 + # via -r src/backend/requirements.in +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 # via # coreapi - # django-allauth # opentelemetry-exporter-otlp-proto-http - # requests-oauthlib -requests-oauthlib==2.0.0 \ - --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ - --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 - # via django-allauth rpds-py==0.18.1 \ --hash=sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee \ --hash=sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc \ @@ -1340,14 +1543,17 @@ rpds-py==0.18.1 \ # via # jsonschema # referencing -sentry-sdk==2.1.1 \ - --hash=sha256:95d8c0bb41c8b0bc37ab202c2c4a295bb84398ee05f4cdce55051cd75b926ec1 \ - --hash=sha256:99aeb78fb76771513bd3b2829d12613130152620768d00cd3e45ac00cb17950f - # via django-q-sentry -setuptools==70.0.0 \ - --hash=sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4 \ - --hash=sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0 +sentry-sdk==2.8.0 \ + --hash=sha256:6051562d2cfa8087bb8b4b8b79dc44690f8a054762a29c07e22588b1f619bfb5 \ + --hash=sha256:aa4314f877d9cd9add5a0c9ba18e3f27f99f7de835ce36bd150e48a41c7c646f # via + # -r src/backend/requirements.in + # django-q-sentry +setuptools==72.1.0 \ + --hash=sha256:5a03e1860cf56bb6ef48ce186b0e557fdba433237481a9a625176c2831be15d1 \ + --hash=sha256:8d243eff56d095e5817f796ede6ae32941278f542e0f941867cc05ae52b162ec + # via + # -r src/backend/requirements.in # django-money # opentelemetry-instrumentation sgmllib3k==1.0.0 \ @@ -1359,6 +1565,7 @@ six==1.16.0 \ # via # bleach # html5lib + # isodate # python-dateutil sqlparse==0.5.0 \ --hash=sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93 \ @@ -1369,7 +1576,9 @@ sqlparse==0.5.0 \ tablib[html, ods, xls, xlsx, yaml]==3.5.0 \ --hash=sha256:9821caa9eca6062ff7299fa645e737aecff982e6b2b42046928a6413c8dabfd9 \ --hash=sha256:f6661dfc45e1d4f51fa8a6239f9c8349380859a5bfaa73280645f046d6c96e33 - # via django-import-export + # via + # -r src/backend/requirements.in + # django-import-export tinycss2==1.2.1 \ --hash=sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847 \ --hash=sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627 @@ -1377,9 +1586,9 @@ tinycss2==1.2.1 \ # bleach # cssselect2 # weasyprint -typing-extensions==4.11.0 \ - --hash=sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0 \ - --hash=sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a +typing-extensions==4.12.2 \ + --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ + --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 # via # asgiref # drf-spectacular @@ -1392,9 +1601,9 @@ uritemplate==4.1.1 \ # via # coreapi # drf-spectacular -urllib3==2.2.1 \ - --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ - --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 +urllib3==2.2.2 \ + --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ + --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 # via # dulwich # requests @@ -1406,7 +1615,9 @@ wcwidth==0.2.13 \ weasyprint==61.2 \ --hash=sha256:47df6cfeeff8c6c28cf2e4caf837cde17715efe462708ada74baa2eb391b6059 \ --hash=sha256:76c6dc0e75e09182d5645d92c66ddf86b1b992c9420235b723fb374b584e5bf4 - # via django-weasyprint + # via + # -r src/backend/requirements.in + # django-weasyprint webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 @@ -1415,9 +1626,10 @@ webencodings==0.5.1 \ # cssselect2 # html5lib # tinycss2 -whitenoise==6.6.0 \ - --hash=sha256:8998f7370973447fac1e8ef6e8ded2c5209a7b1f67c1012866dbcd09681c3251 \ - --hash=sha256:b1f9db9bf67dc183484d760b99f4080185633136a273a03f6436034a41064146 +whitenoise==6.7.0 \ + --hash=sha256:58c7a6cd811e275a6c91af22e96e87da0b1109e9a53bb7464116ef4c963bf636 \ + --hash=sha256:a1ae85e01fdc9815d12fa33f17765bc132ed2c54fa76daf9e39e879dd93566f6 + # via -r src/backend/requirements.in wrapt==1.16.0 \ --hash=sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc \ --hash=sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81 \ @@ -1501,9 +1713,69 @@ xlwt==1.3.0 \ --hash=sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e \ --hash=sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88 # via tablib -zipp==3.18.1 \ - --hash=sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b \ - --hash=sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715 +xmlsec==1.3.14 \ + --hash=sha256:004e8a82e26728bf8a60f8ece1ef3ffafdac30ef538139dfe28870e8503ca64a \ + --hash=sha256:03ccba7dacf197850de954666af0221c740a5de631a80136362a1559223fab75 \ + --hash=sha256:0bae37b2920115cf00759ee9fb7841cbdebcef3a8a92734ab93ae8fa41ac581d \ + --hash=sha256:0be3b7a28e54a03b87faf07fb3c6dc3e50a2c79b686718c3ad08300b8bf6bb67 \ + --hash=sha256:1072878301cb9243a54679e0520e6a5be2266c07a28b0ecef9e029d05a90ffcd \ + --hash=sha256:12d90059308bb0c1b94bde065784e6852999d08b91bcb2048c17e62b954acb07 \ + --hash=sha256:147934bd39dfd840663fb6b920ea9201455fa886427975713f1b42d9f20b9b29 \ + --hash=sha256:19c86bab1498e4c2e56d8e2c878f461ccb6e56b67fd7522b0c8fda46d8910781 \ + --hash=sha256:1b9b5de6bc69fdec23147e5f712cb05dc86df105462f254f140d743cc680cc7b \ + --hash=sha256:1eb3dcf244a52f796377112d8f238dbb522eb87facffb498425dc8582a84a6bf \ + --hash=sha256:1fa1311f7489d050dde9028f5a2b5849c2927bb09c9a93491cb2f28fdc563912 \ + --hash=sha256:1fe23c2dd5f5dbcb24f40e2c1061e2672a32aabee7cf8ac5337036a485607d72 \ + --hash=sha256:204d3c586b8bd6f02a5d4c59850a8157205569d40c32567f49576fa5795d897d \ + --hash=sha256:2401e162aaab7d9416c3405bac7a270e5f370988a0f1f46f0f29b735edba87e1 \ + --hash=sha256:28cd9f513cf01dc0c5b9d9f0728714ecde2e7f46b3b6f63de91f4ae32f3008b3 \ + --hash=sha256:2f84a1c509c52773365645a87949081ee9ea9c535cd452048cc8ca4ad3b45666 \ + --hash=sha256:330147ce59fbe56a9be5b2085d739c55a569f112576b3f1b33681f87416eaf33 \ + --hash=sha256:34c61ec0c0e70fda710290ae74b9efe1928d9242ed82c4eecf97aa696cff68e6 \ + --hash=sha256:38e035bf48300b7dbde2dd01d3b8569f8584fc9c73809be13886e6b6c77b74fb \ + --hash=sha256:48e894ad3e7de373f56efc09d6a56f7eae73a8dd4cec8943313134849e9c6607 \ + --hash=sha256:4922afa9234d1c5763950b26c328a5320019e55eb6000272a79dfe54fee8e704 \ + --hash=sha256:4af81ce8044862ec865782efd353d22abdcd95b92364eef3c934de57ae6d5852 \ + --hash=sha256:4dea6df3ffcb65d0b215678c3a0fe7bbc66785d6eae81291296e372498bad43a \ + --hash=sha256:4edd8db4df04bbac9c4a5ab4af855b74fe2bf2c248d07cac2e6d92a485f1a685 \ + --hash=sha256:4fac2a787ae3b9fb761f9aec6b9f10f2d1c1b87abb574ebd8ff68435bdc97e3d \ + --hash=sha256:57fed3bc7943681c9ed4d2221600ab440f060d8d1a8f92f346f2b41effe175b8 \ + --hash=sha256:6566434e2e5c58e472362a6187f208601f1627a148683a6f92bd16479f1d9e20 \ + --hash=sha256:6679cec780386d848e7351d4b0de92c4483289ea4f0a2187e216159f939a4c6b \ + --hash=sha256:73eabf5ef58189d81655058cf328c1dfa9893d89f1bff5fc941481f08533f338 \ + --hash=sha256:774d5d1e45f07f953c1cc14fd055c1063f0725f7248b6b0e681f59fd8638934d \ + --hash=sha256:77749b338503fb6e151052c664064b34264f4168e2cb0cca1de78b7e5312a783 \ + --hash=sha256:7799a9ff3593f9dd43464e18b1a621640bffc40456c47c23383727f937dca7fc \ + --hash=sha256:7882963e9cb9c0bd0e8c2715a29159a366417ff4a30d8baf42b05bc5cf249446 \ + --hash=sha256:7e8e0171916026cbe8e2022c959558d02086655fd3c3466f2bc0451b09cf9ee8 \ + --hash=sha256:82ac81deb7d7bf5cc8a748148948e5df5386597ff43fb92ec651cc5c7addb0e7 \ + --hash=sha256:86ff7b2711557c1087b72b0a1a88d82eafbf2a6d38b97309a6f7101d4a7041c3 \ + --hash=sha256:934f804f2f895bcdb86f1eaee236b661013560ee69ec108d29cdd6e5f292a2d9 \ + --hash=sha256:995e87acecc263a2f6f2aa3cc204268f651cac8f4d7a2047f11b2cd49979cc38 \ + --hash=sha256:a487c3d144f791c32f5e560aa27a705fba23171728b8a8511f36de053ff6bc93 \ + --hash=sha256:a98eadfcb0c3b23ccceb7a2f245811f8d784bd287640dcfe696a26b9db1e2fc0 \ + --hash=sha256:ad1634cabe0915fe2a12e142db0ed2daf5be80cbe3891a2cecbba0750195cc6b \ + --hash=sha256:b109cdf717257fd4daa77c1d3ec8a3fb2a81318a6d06a36c55a8a53ae381ae5e \ + --hash=sha256:b6dd86f440fec9242515c64f0be93fec8b4289287db1f6de2651eee9995aaecb \ + --hash=sha256:b7ba2ea38e3d9efa520b14f3c0b7d99a7c055244ae5ba8bc9f4ca73b18f3a215 \ + --hash=sha256:ba3b39c493e3b04354615068a3218f30897fcc2f42c6d8986d0c1d63aca87782 \ + --hash=sha256:bd10ca3201f164482775a7ce61bf7ee9aade2e7d032046044dd0f6f52c91d79d \ + --hash=sha256:bddd2a2328b4e08c8a112e06cf2cd2b4d281f4ad94df15b4cef18f06cdc49d78 \ + --hash=sha256:c12900e1903e289deb84eb893dca88591d6884d3e3cda4fb711b8812118416e8 \ + --hash=sha256:c42735cc68fdb4c6065cf0a0701dfff3a12a1734c63a36376349af9a5481f27b \ + --hash=sha256:c4d41c83c8a2b8d8030204391ebeb6174fbdb044f0331653c4b5a4ce4150bcc0 \ + --hash=sha256:ce4e165a1436697e5e39587c4fba24db4545a5c9801e0d749f1afd09ad3ab901 \ + --hash=sha256:cf35a25be3eb6263b2e0544ba26294651113fab79064f994d347a2ca5973e8e2 \ + --hash=sha256:d0762f4232bce2c7f6c0af329db8b821b4460bbe123a2528fb5677d03db7a4b5 \ + --hash=sha256:dba457ff87c39cbae3c5020475a728d24bbd9d00376df9af9724cd3bb59ff07a \ + --hash=sha256:df4aa0782a53032fd35e18dcd6d328d6126324bfcfdef0cb5c2856f25b4b6f94 \ + --hash=sha256:e6cbc914d77678db0c8bc39e723d994174633d18f9d6be4665ec29cce978a96d \ + --hash=sha256:e732a75fcb6b84872b168f972fbbf3749baf76308635f14015d1d35ed0c5719c \ + --hash=sha256:ed4034939d8566ccdcd3b4e4f23c63fd807fb8763ae5668d59a19e11640a8242 + # via python3-saml +zipp==3.19.2 \ + --hash=sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19 \ + --hash=sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c # via importlib-metadata zopfli==0.2.3 \ --hash=sha256:0574372283befa5af98fb31407e1fe6822f2f9c437ef69e7fa260e49022d8a65 \ diff --git a/src/frontend/.linguirc b/src/frontend/.linguirc index db0ade6fbe..5295430412 100644 --- a/src/frontend/.linguirc +++ b/src/frontend/.linguirc @@ -1,5 +1,6 @@ { "locales": [ + "ar", "bg", "cs", "da", @@ -8,6 +9,7 @@ "en", "es", "es-mx", + "et", "fa", "fi", "fr", diff --git a/src/frontend/package.json b/src/frontend/package.json index af2378e32b..4c6da933eb 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -11,79 +11,83 @@ "compile": "lingui compile --typescript" }, "dependencies": { - "@codemirror/autocomplete": ">=6.0.0", + "@codemirror/autocomplete": ">=6.18.0", "@codemirror/lang-liquid": "^6.2.1", - "@codemirror/language": ">=6.0.0", - "@codemirror/lint": ">=6.0.0", + "@codemirror/language": ">=6.10.2", + "@codemirror/lint": ">=6.8.1", "@codemirror/search": ">=6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/theme-one-dark": ">=6.0.0", - "@codemirror/view": ">=6.0.0", - "@emotion/react": "^11.11.4", - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-regular-svg-icons": "^6.5.2", - "@fortawesome/free-solid-svg-icons": "^6.5.2", - "@fortawesome/react-fontawesome": "^0.2.0", - "@lingui/core": "^4.10.0", - "@lingui/react": "^4.10.0", - "@mantine/carousel": "^7.8.0", - "@mantine/charts": "^7.10.1", - "@mantine/core": "^7.10.0", - "@mantine/dates": "^7.8.0", - "@mantine/dropzone": "^7.8.0", - "@mantine/form": "^7.8.0", - "@mantine/hooks": "^7.8.0", - "@mantine/modals": "^7.8.0", - "@mantine/notifications": "^7.8.0", - "@mantine/spotlight": "^7.8.0", - "@mantine/vanilla-extract": "^7.8.0", - "@mdxeditor/editor": "^3.0.7", - "@naisutech/react-tree": "^3.1.0", - "@sentry/react": "^7.110.0", - "@tabler/icons-react": "^3.2.0", - "@tanstack/react-query": "^5.29.2", - "@uiw/codemirror-theme-vscode": "^4.21.25", - "@uiw/react-codemirror": "^4.21.25", + "@codemirror/view": ">=6.30.0", + "@emotion/react": "^11.13.0", + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-regular-svg-icons": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", + "@lingui/core": "^4.11.2", + "@lingui/react": "^4.11.2", + "@mantine/carousel": "^7.12.0", + "@mantine/charts": "^7.12.0", + "@mantine/core": "^7.12.0", + "@mantine/dates": "^7.12.0", + "@mantine/dropzone": "^7.12.0", + "@mantine/form": "^7.12.0", + "@mantine/hooks": "^7.12.0", + "@mantine/modals": "^7.12.0", + "@mantine/notifications": "^7.12.0", + "@mantine/spotlight": "^7.12.0", + "@mantine/vanilla-extract": "^7.12.0", + "@mdxeditor/editor": "^3.10.1", + "@sentry/react": "^8.23.0", + "@tabler/icons-react": "^3.11.0", + "@tanstack/react-query": "^5.51.21", + "@uiw/codemirror-theme-vscode": "^4.23.0", + "@uiw/react-codemirror": "^4.23.0", "@uiw/react-split": "^5.9.3", - "@vanilla-extract/css": "^1.14.2", - "axios": "^1.6.8", + "@vanilla-extract/css": "^1.15.3", + "axios": "^1.7.3", "clsx": "^2.1.0", "codemirror": ">=6.0.0", - "dayjs": "^1.11.10", - "embla-carousel-react": "^8.0.2", + "dayjs": "^1.11.12", + "embla-carousel-react": "^8.1.8", + "fuse.js": "^7.0.0", "html5-qrcode": "^2.3.8", - "mantine-datatable": "^7.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "mantine-datatable": "^7.11.3", + "qrcode": "^1.5.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-grid-layout": "^1.4.4", - "react-hook-form": "^7.51.3", - "react-is": "^18.2.0", - "react-router-dom": "^6.22.3", + "react-hook-form": "^7.52.2", + "react-is": "^18.3.1", + "react-router-dom": "^6.26.0", "react-select": "^5.8.0", + "react-window": "^1.8.10", "recharts": "^2.12.4", - "styled-components": "^6.1.8", - "zustand": "^4.5.2" + "styled-components": "^6.1.12", + "zustand": "^4.5.4" }, "devDependencies": { - "@babel/core": "^7.24.4", - "@babel/preset-react": "^7.24.1", - "@babel/preset-typescript": "^7.24.1", - "@lingui/cli": "^4.10.0", - "@lingui/macro": "^4.10.0", - "@playwright/test": "^1.43.1", - "@types/node": "^20.12.7", - "@types/react": "^18.2.79", - "@types/react-dom": "^18.2.25", + "@babel/core": "^7.25.2", + "@babel/preset-react": "^7.24.7", + "@babel/preset-typescript": "^7.24.7", + "@lingui/cli": "^4.11.2", + "@lingui/macro": "^4.11.2", + "@playwright/test": "^1.45.3", + "@types/node": "^22.1.0", + "@types/qrcode": "^1.5.5", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", "@types/react-grid-layout": "^1.3.5", "@types/react-router-dom": "^5.3.3", - "@vanilla-extract/vite-plugin": "^4.0.7", - "@vitejs/plugin-react": "^4.2.1", + "@types/react-window": "^1.8.8", + "@vanilla-extract/vite-plugin": "^4.0.13", + "@vitejs/plugin-react": "^4.3.1", "babel-plugin-macros": "^3.1.0", - "nyc": "^15.1.0", - "rollup-plugin-license": "^3.3.1", - "typescript": "^5.4.5", - "vite": "^5.2.8", + "nyc": "^17.0.0", + "rollup-plugin-license": "^3.5.2", + "typescript": "^5.5.4", + "vite": "^5.3.5", "vite-plugin-babel-macros": "^1.0.6", - "vite-plugin-istanbul": "^6.0.0" + "vite-plugin-istanbul": "^6.0.2" } } diff --git a/src/frontend/playwright.config.ts b/src/frontend/playwright.config.ts index f24b94d323..2914f54f5a 100644 --- a/src/frontend/playwright.config.ts +++ b/src/frontend/playwright.config.ts @@ -3,7 +3,7 @@ import { defineConfig, devices } from '@playwright/test'; export default defineConfig({ testDir: './tests', fullyParallel: true, - timeout: 60000, + timeout: 90000, forbidOnly: !!process.env.CI, retries: process.env.CI ? 1 : 0, workers: process.env.CI ? 2 : undefined, diff --git a/src/frontend/src/App.tsx b/src/frontend/src/App.tsx index 1adaf03d04..24818dccbe 100644 --- a/src/frontend/src/App.tsx +++ b/src/frontend/src/App.tsx @@ -29,4 +29,10 @@ export function setApiDefaults() { } } -export const queryClient = new QueryClient(); +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + refetchOnWindowFocus: false + } + } +}); diff --git a/src/frontend/src/components/Boundary.tsx b/src/frontend/src/components/Boundary.tsx index 6f317efb03..1ad6529883 100644 --- a/src/frontend/src/components/Boundary.tsx +++ b/src/frontend/src/components/Boundary.tsx @@ -26,7 +26,7 @@ export function Boundary({ fallback?: React.ReactElement | FallbackRender | undefined; }): ReactNode { const onError = useCallback( - (error: Error, componentStack: string, eventId: string) => { + (error: unknown, componentStack: string | undefined, eventId: string) => { console.error(`Error rendering component: ${label}`); console.error(error, componentStack); }, diff --git a/src/frontend/src/components/DashboardItemProxy.tsx b/src/frontend/src/components/DashboardItemProxy.tsx index cc0efa3bd0..d0ed0015c8 100644 --- a/src/frontend/src/components/DashboardItemProxy.tsx +++ b/src/frontend/src/components/DashboardItemProxy.tsx @@ -31,7 +31,7 @@ export function DashboardItemProxy({ queryFn: fetchData, refetchOnWindowFocus: autoupdate }); - const [dashdata, setDashData] = useState({ title: t`Title`, value: '000' }); + const [dashData, setDashData] = useState({ title: t`Title`, value: '000' }); useEffect(() => { if (data) { @@ -44,7 +44,7 @@ export function DashboardItemProxy({
    diff --git a/src/frontend/src/components/buttons/ActionButton.tsx b/src/frontend/src/components/buttons/ActionButton.tsx index 089cb98995..dce1209dc1 100644 --- a/src/frontend/src/components/buttons/ActionButton.tsx +++ b/src/frontend/src/components/buttons/ActionButton.tsx @@ -43,7 +43,7 @@ export function ActionButton(props: ActionButtonProps) { props.tooltip ?? props.text ?? '' )}`} onClick={props.onClick ?? notYetImplemented} - variant={props.variant ?? 'light'} + variant={props.variant ?? 'transparent'} > {props.icon} diff --git a/src/frontend/src/components/buttons/AdminButton.tsx b/src/frontend/src/components/buttons/AdminButton.tsx index a9a81011d4..7adfe73f72 100644 --- a/src/frontend/src/components/buttons/AdminButton.tsx +++ b/src/frontend/src/components/buttons/AdminButton.tsx @@ -1,11 +1,8 @@ import { t } from '@lingui/macro'; import { IconUserStar } from '@tabler/icons-react'; import { useCallback, useMemo } from 'react'; -import { useNavigate } from 'react-router-dom'; import { ModelType } from '../../enums/ModelType'; -import { navigateToLink } from '../../functions/navigation'; -import { base_url } from '../../main'; import { useLocalState } from '../../states/LocalState'; import { useUserState } from '../../states/UserState'; import { ModelInformationDict } from '../render/ModelType'; diff --git a/src/frontend/src/components/buttons/ButtonMenu.tsx b/src/frontend/src/components/buttons/ButtonMenu.tsx index 42feeb0718..0bf2a36df7 100644 --- a/src/frontend/src/components/buttons/ButtonMenu.tsx +++ b/src/frontend/src/components/buttons/ButtonMenu.tsx @@ -11,7 +11,7 @@ export function ButtonMenu({ label = '' }: { icon: any; - actions: any[]; + actions: React.ReactNode[]; label?: string; tooltip?: string; }) { diff --git a/src/frontend/src/components/buttons/CopyButton.tsx b/src/frontend/src/components/buttons/CopyButton.tsx index bf51eebd0b..c63ec29630 100644 --- a/src/frontend/src/components/buttons/CopyButton.tsx +++ b/src/frontend/src/components/buttons/CopyButton.tsx @@ -1,6 +1,13 @@ import { t } from '@lingui/macro'; -import { Button, CopyButton as MantineCopyButton } from '@mantine/core'; -import { IconCopy } from '@tabler/icons-react'; +import { + ActionIcon, + Button, + CopyButton as MantineCopyButton, + Text, + Tooltip +} from '@mantine/core'; + +import { InvenTreeIcon } from '../../functions/icons'; export function CopyButton({ value, @@ -9,20 +16,27 @@ export function CopyButton({ value: any; label?: JSX.Element; }) { + const ButtonComponent = label ? Button : ActionIcon; + return ( {({ copied, copy }) => ( - + + + {copied ? ( + + ) : ( + + )} + + {label && {label}} + + )} ); diff --git a/src/frontend/src/components/buttons/PrimaryActionButton.tsx b/src/frontend/src/components/buttons/PrimaryActionButton.tsx new file mode 100644 index 0000000000..8d30b3fd36 --- /dev/null +++ b/src/frontend/src/components/buttons/PrimaryActionButton.tsx @@ -0,0 +1,41 @@ +import { Button, Tooltip } from '@mantine/core'; + +import { InvenTreeIcon, InvenTreeIconType } from '../../functions/icons'; +import { notYetImplemented } from '../../functions/notifications'; + +/** + * A "primary action" button for display on a page detail, (for example) + */ +export default function PrimaryActionButton({ + title, + tooltip, + icon, + color, + hidden, + onClick +}: { + title: string; + tooltip?: string; + icon?: InvenTreeIconType; + color?: string; + hidden?: boolean; + onClick?: () => void; +}) { + if (hidden) { + return null; + } + + return ( + + ); +} diff --git a/src/frontend/src/components/buttons/PrintingActions.tsx b/src/frontend/src/components/buttons/PrintingActions.tsx index 3f14e49eeb..fbeb5deab1 100644 --- a/src/frontend/src/components/buttons/PrintingActions.tsx +++ b/src/frontend/src/components/buttons/PrintingActions.tsx @@ -1,7 +1,8 @@ import { t } from '@lingui/macro'; import { notifications } from '@mantine/notifications'; import { IconPrinter, IconReport, IconTags } from '@tabler/icons-react'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useQuery } from '@tanstack/react-query'; +import { useMemo, useState } from 'react'; import { api } from '../../App'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; @@ -32,31 +33,28 @@ export function PrintingActions({ const [pluginKey, setPluginKey] = useState(''); - const loadFields = useCallback(() => { - if (!enableLabels) { - return; - } - - api - .options(apiUrl(ApiEndpoints.label_print), { - params: { - plugin: pluginKey || undefined - } - }) - .then((response: any) => { - setExtraFields(extractAvailableFields(response, 'POST') || {}); - }) - .catch(() => {}); - }, [enableLabels, pluginKey]); - - useEffect(() => { - loadFields(); - }, [loadFields, pluginKey]); - - const [extraFields, setExtraFields] = useState({}); + // Fetch available printing fields via OPTIONS request + const printingFields = useQuery({ + enabled: enableLabels, + queryKey: ['printingFields', modelType, pluginKey], + gcTime: 500, + queryFn: () => + api + .options(apiUrl(ApiEndpoints.label_print), { + params: { + plugin: pluginKey || undefined + } + }) + .then((response: any) => { + return extractAvailableFields(response, 'POST') || {}; + }) + .catch(() => { + return {}; + }) + }); const labelFields: ApiFormFieldSet = useMemo(() => { - let fields: ApiFormFieldSet = extraFields; + let fields: ApiFormFieldSet = printingFields.data || {}; // Override field values fields['template'] = { @@ -88,7 +86,7 @@ export function PrintingActions({ }; return fields; - }, [extraFields, items, loadFields]); + }, [printingFields.data, items]); const labelModal = useCreateApiFormModal({ url: apiUrl(ApiEndpoints.label_print), @@ -98,6 +96,7 @@ export function PrintingActions({ onClose: () => { setPluginKey(''); }, + submitText: t`Print`, successMessage: t`Label printing completed successfully`, onFormSuccess: (response: any) => { setPluginKey(''); @@ -136,6 +135,7 @@ export function PrintingActions({ value: items } }, + submitText: t`Generate`, successMessage: t`Report printing completed successfully`, onFormSuccess: (response: any) => { if (!response.complete) { diff --git a/src/frontend/src/components/buttons/YesNoButton.tsx b/src/frontend/src/components/buttons/YesNoButton.tsx index ec12af7f90..d18b492857 100644 --- a/src/frontend/src/components/buttons/YesNoButton.tsx +++ b/src/frontend/src/components/buttons/YesNoButton.tsx @@ -22,6 +22,7 @@ export function PassFailButton({ variant="filled" radius="lg" size="sm" + style={{ maxWidth: '50px' }} > {v ? pass : fail} diff --git a/src/frontend/src/components/details/Details.tsx b/src/frontend/src/components/details/Details.tsx index 374f35b556..f58136d628 100644 --- a/src/frontend/src/components/details/Details.tsx +++ b/src/frontend/src/components/details/Details.tsx @@ -1,15 +1,12 @@ import { t } from '@lingui/macro'; import { - ActionIcon, Anchor, Badge, - CopyButton, Paper, Skeleton, Stack, Table, - Text, - Tooltip + Text } from '@mantine/core'; import { useSuspenseQuery } from '@tanstack/react-query'; import { getValueAtPath } from 'mantine-datatable'; @@ -24,23 +21,13 @@ import { navigateToLink } from '../../functions/navigation'; import { getDetailUrl } from '../../functions/urls'; import { apiUrl } from '../../states/ApiState'; import { useGlobalSettingsState } from '../../states/SettingsState'; +import { CopyButton } from '../buttons/CopyButton'; import { YesNoButton } from '../buttons/YesNoButton'; import { ProgressBar } from '../items/ProgressBar'; import { StylishText } from '../items/StylishText'; import { getModelInfo } from '../render/ModelType'; import { StatusRenderer } from '../render/StatusRenderer'; -export type PartIconsType = { - assembly: boolean; - template: boolean; - component: boolean; - trackable: boolean; - purchaseable: boolean; - saleable: boolean; - virtual: boolean; - active: boolean; -}; - export type DetailsField = | { hidden?: boolean; @@ -59,7 +46,7 @@ export type DetailsField = ); type BadgeType = 'owner' | 'user' | 'group'; -type ValueFormatterReturn = string | number | null; +type ValueFormatterReturn = string | number | null | React.ReactNode; type StringDetailField = { type: 'string' | 'text'; @@ -135,11 +122,11 @@ function NameBadge({ pk, type }: { pk: string | number; type: BadgeType }) { case 200: return response.data; default: - return null; + return {}; } }) .catch(() => { - return null; + return {}; }); } }); @@ -148,7 +135,9 @@ function NameBadge({ pk, type }: { pk: string | number; type: BadgeType }) { // Rendering a user's rame for the badge function _render_name() { - if (type === 'user' && settings.isSet('DISPLAY_FULL_NAMES')) { + if (!data) { + return ''; + } else if (type === 'user' && settings.isSet('DISPLAY_FULL_NAMES')) { if (data.first_name || data.last_name) { return `${data.first_name} ${data.last_name}`; } else { @@ -169,7 +158,7 @@ function NameBadge({ pk, type }: { pk: string | number; type: BadgeType }) { variant="filled" style={{ display: 'flex', alignItems: 'center' }} > - {data.name ?? _render_name()} + {data?.name ?? _render_name()}
    @@ -334,26 +323,7 @@ function StatusValue(props: Readonly) { } function CopyField({ value }: { value: string }) { - return ( - - {({ copied, copy }) => ( - - - {copied ? ( - - ) : ( - - )} - - - )} - - ); + return ; } export function DetailsTableField({ @@ -398,10 +368,10 @@ export function DetailsTableField({ > - + {field.label} - + diff --git a/src/frontend/src/components/details/DetailsImage.tsx b/src/frontend/src/components/details/DetailsImage.tsx index fcc5a03ce5..f380997b9e 100644 --- a/src/frontend/src/components/details/DetailsImage.tsx +++ b/src/frontend/src/components/details/DetailsImage.tsx @@ -85,7 +85,7 @@ function UploadModal({ apiPath: string; setImage: (image: string) => void; }) { - const [file1, setFile] = useState(null); + const [currentFile, setCurrentFile] = useState(null); let uploading = false; // Components to show in the Dropzone when no file is selected @@ -168,7 +168,7 @@ function UploadModal({ return ( setFile(files[0])} + onDrop={(files) => setCurrentFile(files[0])} maxFiles={1} accept={IMAGE_MIME_TYPE} loading={uploading} @@ -198,7 +198,9 @@ function UploadModal({ }} /> - {file1 ? fileInfo(file1) : noFileIdle} + + {currentFile ? fileInfo(currentFile) : noFileIdle} + - @@ -354,31 +359,27 @@ export function DetailsImage(props: Readonly) { }; return ( - <> - - <> - - {permissions.hasChangeRole(props.appRole) && - hasOverlay && - hovered && ( - - - - )} - - - + + <> + + {permissions.hasChangeRole(props.appRole) && hasOverlay && hovered && ( + + + + )} + + ); } diff --git a/src/frontend/src/components/details/PartIcons.tsx b/src/frontend/src/components/details/PartIcons.tsx deleted file mode 100644 index 5a39a85be1..0000000000 --- a/src/frontend/src/components/details/PartIcons.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { Trans, t } from '@lingui/macro'; -import { Badge, Tooltip } from '@mantine/core'; - -import { InvenTreeIcon, InvenTreeIconType } from '../../functions/icons'; - -/** - * Fetches and wraps an InvenTreeIcon in a flex div - * @param icon name of icon - * - */ -function PartIcon(icon: InvenTreeIconType) { - return ( -
    - -
    - ); -} - -/** - * Generates a table cell with Part icons. - * Only used for Part Model Details - */ -export function PartIcons({ part }: { part: any }) { - return ( - -
    - {!part.active && ( - - -
    - {' '} - Inactive -
    -
    -
    - )} - {part.template && ( - - )} - {part.assembly && ( - - )} - {part.component && ( - - )} - {part.trackable && ( - - )} - {part.purchaseable && ( - - )} - {part.saleable && ( - - )} - {part.virtual && ( - - -
    - {' '} - Virtual -
    -
    -
    - )} -
    - - ); -} diff --git a/src/frontend/src/components/editors/NotesEditor.tsx b/src/frontend/src/components/editors/NotesEditor.tsx index c849311f99..30343af5fa 100644 --- a/src/frontend/src/components/editors/NotesEditor.tsx +++ b/src/frontend/src/components/editors/NotesEditor.tsx @@ -142,7 +142,12 @@ export default function NotesEditor({ // Callback to save notes to the server const saveNotes = useCallback(() => { - const markdown = ref.current?.getMarkdown() ?? ''; + const markdown = ref.current?.getMarkdown(); + + if (!noteUrl || markdown === undefined) { + return; + } + api .patch(noteUrl, { notes: markdown }) .then(() => { @@ -163,7 +168,7 @@ export default function NotesEditor({ id: 'notes' }); }); - }, [noteUrl, ref.current]); + }, [api, noteUrl, ref.current]); const plugins: any[] = useMemo(() => { let plg = [ diff --git a/src/frontend/src/components/editors/TemplateEditor/CodeEditor/CodeEditor.tsx b/src/frontend/src/components/editors/TemplateEditor/CodeEditor/CodeEditor.tsx index e69d8136e7..789fbad4c1 100644 --- a/src/frontend/src/components/editors/TemplateEditor/CodeEditor/CodeEditor.tsx +++ b/src/frontend/src/components/editors/TemplateEditor/CodeEditor/CodeEditor.tsx @@ -25,12 +25,18 @@ const tags: Tag[] = [ description: 'Generate a QR code image', args: ['data'], kwargs: { - fill_color: 'Fill color (default = black)', - back_color: 'Background color (default = white)', - version: 'Version (default = 1)', - box_size: 'Box size (default = 20)', - border: 'Border width (default = 1)', - format: 'Format (default = PNG)' + version: 'QR code version, (None to auto detect) (default = None)', + error_correction: + "Error correction level (L: 7%, M: 15%, Q: 25%, H: 30%) (default = 'Q')", + box_size: + 'pixel dimensions for one black square pixel in the QR code (default = 20)', + border: + 'count white QR square pixels around the qr code, needed as padding (default = 1)', + optimize: + 'data will be split into multiple chunks of at least this length using different modes (text, alphanumeric, binary) to optimize the QR code size. Set to `0` to disable. (default = 1)', + format: "Image format (default = 'PNG')", + fill_color: 'Fill color (default = "black")', + back_color: 'Background color (default = "white")' }, returns: 'base64 encoded qr code image data' }, diff --git a/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx b/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx index c38e65f8a0..c0e48ae0a5 100644 --- a/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx +++ b/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx @@ -81,7 +81,9 @@ export const PdfPreviewComponent: PreviewAreaComponent = forwardRef( Preview not available, click "Reload Preview".
    )} - {pdfUrl &&